define modules and tests, no compiling
This commit is contained in:
@ -6,6 +6,7 @@ require_relative "control"
|
||||
require_relative "expression"
|
||||
require_relative "call_site"
|
||||
require_relative "function_definition"
|
||||
require_relative "module_def"
|
||||
require_relative "operators"
|
||||
|
||||
module Parser
|
||||
@ -28,7 +29,8 @@ module Parser
|
||||
include CallSite
|
||||
include FunctionDefinition
|
||||
include Operators
|
||||
include ModuleDef
|
||||
|
||||
rule(:root){ (function_definition | expression | call_site | space).repeat }
|
||||
rule(:root){ (function_definition | expression | call_site ).repeat }
|
||||
end
|
||||
end
|
||||
|
@ -3,6 +3,7 @@ module Parser
|
||||
include Parslet
|
||||
|
||||
rule(:keyword_begin) { str('begin').as(:begin) >> space?}
|
||||
rule(:keyword_class) { str('class') >> space? }
|
||||
rule(:keyword_def) { str('def') >> space? }
|
||||
rule(:keyword_do) { str('do').as(:do) >> space?}
|
||||
rule(:keyword_else) { str('else').as(:else) >> space? }
|
||||
@ -12,6 +13,7 @@ module Parser
|
||||
rule(:keyword_rescue) { str('rescue').as(:rescue) >> space?}
|
||||
rule(:keyword_return) { str('return').as(:return) >> space?}
|
||||
rule(:keyword_true) { str('true').as(:true) >> space?}
|
||||
rule(:keyword_module) { str('module') >> space? }
|
||||
rule(:keyword_nil) { str('nil').as(:nil) >> space?}
|
||||
rule(:keyword_unless) { str('unless').as(:unless) >> space?}
|
||||
rule(:keyword_until) { str('until').as(:until) >> space?}
|
||||
|
9
lib/parser/module_def.rb
Normal file
9
lib/parser/module_def.rb
Normal file
@ -0,0 +1,9 @@
|
||||
module Parser
|
||||
module ModuleDef
|
||||
include Parslet
|
||||
rule(:module_def) do
|
||||
keyword_module >> name >> eol >>
|
||||
( (keyword_end.absent? >> root).repeat(1)).as(:module_expressions) >> keyword_end >> newline
|
||||
end
|
||||
end
|
||||
end
|
@ -53,6 +53,10 @@ module Parser
|
||||
Ast::OperatorExpression.new( o.to_s.strip , l ,r)
|
||||
end
|
||||
|
||||
rule( :name => simple(:name) , :module_expressions => sequence(:module_expressions) , :end=>"end") do
|
||||
Ast::ModuleExpression.new(name , module_expressions)
|
||||
end
|
||||
|
||||
#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