Module: Yadriggy
- Included in:
- Checker
- Defined in:
- lib/yadriggy/eval.rb,
lib/yadriggy.rb,
lib/yadriggy/c.rb,
lib/yadriggy/ast.rb,
lib/yadriggy/c/c.rb,
lib/yadriggy/type.rb,
lib/yadriggy/c/ffi.rb,
lib/yadriggy/assert.rb,
lib/yadriggy/syntax.rb,
lib/yadriggy/algebra.rb,
lib/yadriggy/c/ctype.rb,
lib/yadriggy/checker.rb,
lib/yadriggy/printer.rb,
lib/yadriggy/version.rb,
lib/yadriggy/c/config.rb,
lib/yadriggy/c/opencl.rb,
lib/yadriggy/eval_all.rb,
lib/yadriggy/ast_value.rb,
lib/yadriggy/c/codegen.rb,
lib/yadriggy/c/program.rb,
lib/yadriggy/typecheck.rb,
lib/yadriggy/source_code.rb,
lib/yadriggy/ast_location.rb,
lib/yadriggy/c/ctypecheck.rb,
lib/yadriggy/pretty_print.rb,
lib/yadriggy/ruby_typecheck.rb,
lib/yadriggy/ruby_typeinfer.rb
Overview
Yadriggy is a platform for building embedded DSLs.
It means mistletoe in Japanese.
Defined Under Namespace
Modules: Assert, AstHelper, C Classes: ASTnode, ASTree, ASTreeTable, Algebra, ArrayLiteral, ArrayRef, ArrayRefField, Assign, BeginEnd, Binary, Block, Break, Call, CheckError, Checker, ClassDef, Command, CommonSuperType, CompositeType, Conditional, Const, ConstPathField, ConstPathRef, Def, Dots, Eval, EvalAlgebra, EvalAll, Exprs, FilePrinter, ForLoop, GlobalVariable, HashLiteral, Identifier, IdentifierOrCall, InstanceType, InstanceVariable, Label, Lambda, LocalVarType, Loop, MethodType, ModuleDef, Name, NonRubyType, Number, OptionalRole, Parameters, Paren, PrettyPrinter, Printer, Program, Rescue, Reserved, ResultType, Return, RubyClass, RubyTypeChecker, RubyTypeInferer, SingularClassDef, SourceCode, StringInterpolation, StringLiteral, Super, SymbolLiteral, Syntax, SyntaxError, Type, TypeChecker, Unary, UnionType, VariableCall
Constant Summary collapse
- DynType =
Dynamic type.
NonRubyType.new('#<Yadriggy::DynType>', 'DynType')
- VERSION =
"1.1.0"- Undef =
Undefined value.
:undef- Void =
Void type.
NonRubyType.new('#<Yadriggy::Void>', 'Void')
- @@debug =
0
Class Method Summary collapse
-
.debug ⇒ Integer
Current debug level (0, 1, or 2).
-
.debug=(level) ⇒ Object
Sets the current debug level.
-
.define_syntax(&block) ⇒ Syntax
Defines syntax and returns a Syntax object.
-
.reify(proc = nil) { ... } ⇒ ASTree|nil
Gets the abstract syntax tree (AST) of the given procedure ‘proc`.
Class Method Details
.debug ⇒ Integer
Current debug level (0, 1, or 2).
25 |
# File 'lib/yadriggy.rb', line 25 def self.debug() @@debug end |
.debug=(level) ⇒ Object
Sets the current debug level.
29 30 31 |
# File 'lib/yadriggy.rb', line 29 def self.debug=(level) @@debug = level end |
.define_syntax(&block) ⇒ Syntax
Defines syntax and returns a Syntax object. define_syntax is not available in a method body.
11 12 13 14 15 16 17 18 |
# File 'lib/yadriggy/syntax.rb', line 11 def self.define_syntax(&block) ast = reify(block) if Syntax.check_syntax(ast.tree) Syntax.new(ast) else raise Syntax.last_error end end |
.reify(proc = nil) { ... } ⇒ ASTree|nil
Gets the abstract syntax tree (AST) of the given procedure ‘proc`. If `proc` is nil, the block argument is converted into an abstract syntax tree. The returned ASTree object is a container holding not only an AST but also other data. To get an AST, call Yadriggy::ASTree#tree on the ASTree object.
Yadriggy::ASTree#reify on the ASTree object obtains the ASTs of other procs and methods. It returns the same AST for the same proc or method since it records ASTs obtained before. The table of the recorded ASTs are shared among ASTree objects. Every call to reify on Yadriggy makes a new table. Hence,
<pre>ast1 = Yadriggy.reify(proc1) ast2 = ast.reify(proc2) a1 = Yadriggy.reify(proc1) # a1 != ast1 a2 = a1.reify(proc2) # a2 != ast2 b2 = a1.reify(proc2) # b2 == a2</pre>
Although ‘ast1` and `a1`, and `ast2` and `a2` are different copies of the AST of the same proc, `a2` and `b2` refer to the same AST.
33 34 35 36 37 38 39 40 |
# File 'lib/yadriggy/ast.rb', line 33 def self.reify(proc = nil, &block) code = proc || block return nil if code.nil? # a is used only for bootstrapping. a = ASTree.new(ASTreeTable.new, code, '?', [:zsuper]) a.astrees.delete(code) a.reify(code) end |