wrapping root array as class ExpressionList
This commit is contained in:
@ -35,3 +35,4 @@ require_relative "module_expression"
|
||||
require_relative "operator_expressions"
|
||||
require_relative "return_expression"
|
||||
require_relative "while_expression"
|
||||
require_relative "expression_list"
|
||||
|
18
lib/ast/expression_list.rb
Normal file
18
lib/ast/expression_list.rb
Normal file
@ -0,0 +1,18 @@
|
||||
module Ast
|
||||
class ExpressionList < Expression
|
||||
attr_reader :expressions
|
||||
def initialize expressions
|
||||
@expressions = expressions
|
||||
end
|
||||
def attributes
|
||||
[:expressions]
|
||||
end
|
||||
def inspect
|
||||
self.class.name + ".new( ["+ expressions.collect(&:inspect).join( ",") +"])"
|
||||
end
|
||||
|
||||
def to_s
|
||||
expressions.collect(&:inspect).join("\n")
|
||||
end
|
||||
end
|
||||
end
|
@ -32,6 +32,6 @@ module Parser
|
||||
include ModuleDef
|
||||
|
||||
rule(:root_body) {(module_definition | class_definition | function_definition | expression | call_site )}
|
||||
rule(:root) { root_body.repeat() }
|
||||
rule(:root) { root_body.repeat.as(:expression_list) }
|
||||
end
|
||||
end
|
||||
|
@ -81,6 +81,9 @@ module Parser
|
||||
Ast::ClassExpression.new(module_name , derived_name ? derived_name.name : nil , class_expressions)
|
||||
end
|
||||
|
||||
rule(:expression_list => sequence(:expression_list)) {
|
||||
Ast::ExpressionList.new(expression_list)
|
||||
}
|
||||
#shortcut to get the ast tree for a given string
|
||||
# optional second arguement specifies a rule that will be parsed (mainly for testing)
|
||||
def self.ast string , rule = :root
|
||||
|
Reference in New Issue
Block a user