Class: Yadriggy::ASTree
Overview
Abstract syntax tree (AST).
Instance Attribute Summary collapse
-
#astrees ⇒ ASTreeTable
readonly
All the reified ASTs.
-
#context ⇒ Method|Proc
readonly
The Method or Proc object given for the reification.
-
#file_name ⇒ String
readonly
The source file name.
-
#tree ⇒ ASTnode
readonly
The AST.
Attributes inherited from ASTnode
Class Method Summary collapse
Instance Method Summary collapse
-
#accept(evaluator) ⇒ void
A method for Visitor pattern.
-
#initialize(ast_table, proc, file, sexp) ⇒ ASTree
constructor
A new instance of ASTree.
- #pretty_print(pp) ⇒ Object
-
#reify(proc) ⇒ ASTree|nil
Gets the abstract syntax tree of the given procedure.
Methods inherited from ASTnode
#add_child, #add_children, #const_value, #const_value_in_class, #get_context_class, #get_receiver_object, #is_proc?, #root, #source_location, #source_location_string, #value, #value_in_class
Constructor Details
#initialize(ast_table, proc, file, sexp) ⇒ ASTree
Returns a new instance of ASTree.
1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 |
# File 'lib/yadriggy/ast.rb', line 1765 def initialize(ast_table, proc, file, sexp) unless proc.is_a?(Proc) || proc.is_a?(Method) || proc.is_a?(UnboundMethod) raise "unknown context #{proc.class.name}" end @astrees = ast_table # ASTreeTable @context = proc # Proc or Method @file_name = file @tree = ASTree.to_node(sexp) add_child(@tree) @astrees[proc] = self end |
Instance Attribute Details
#astrees ⇒ ASTreeTable (readonly)
Returns all the reified ASTs.
1753 1754 1755 |
# File 'lib/yadriggy/ast.rb', line 1753 def astrees @astrees end |
#context ⇒ Method|Proc (readonly)
Returns the Method or Proc object given for the reification.
1757 1758 1759 |
# File 'lib/yadriggy/ast.rb', line 1757 def context @context end |
#file_name ⇒ String (readonly)
Returns the source file name.
1760 1761 1762 |
# File 'lib/yadriggy/ast.rb', line 1760 def file_name @file_name end |
#tree ⇒ ASTnode (readonly)
Returns the AST.
1763 1764 1765 |
# File 'lib/yadriggy/ast.rb', line 1763 def tree @tree end |
Class Method Details
.append_tags(clazz) ⇒ Object
1829 1830 1831 |
# File 'lib/yadriggy/ast.rb', line 1829 def self.(clazz) clazz..each {|t| @tags[t] = clazz } end |
.to_node(sexp) ⇒ Object
1852 1853 1854 1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865 1866 1867 1868 1869 1870 1871 1872 |
# File 'lib/yadriggy/ast.rb', line 1852 def self.to_node(sexp) if sexp.nil? nil elsif sexp[0] == :var_ref || sexp[0] == :var_field || sexp[0] == :const_ref to_node(sexp[1]) else klass = @tags[sexp[0]] if klass.nil? sexp_name = if sexp.is_a?(Array) sexp[0].to_s else ':' + sexp.to_s end raise "unknown s-expression " + sexp_name else node = klass.new(sexp) StringLiteral.normalize(node) end end end |
Instance Method Details
#accept(evaluator) ⇒ void
This method returns an undefined value.
A method for Visitor pattern.
1801 1802 1803 |
# File 'lib/yadriggy/ast.rb', line 1801 def accept(evaluator) evaluator.astree(self) end |
#pretty_print(pp) ⇒ Object
1779 1780 1781 |
# File 'lib/yadriggy/ast.rb', line 1779 def pretty_print(pp) Yadriggy::simpler_pretty_print(pp, self, "@astrees") end |
#reify(proc) ⇒ ASTree|nil
Gets the abstract syntax tree of the given procedure.
1788 1789 1790 1791 1792 1793 1794 1795 1796 |
# File 'lib/yadriggy/ast.rb', line 1788 def reify(proc) ast_obj = @astrees[proc] unless ast_obj.nil? ast_obj else ast = SourceCode.get_sexp(proc) ast && ast[1] && ASTree.new(@astrees, proc, ast[0], ast[1]) end end |