adds class definition with tests

This commit is contained in:
Torsten Ruger
2014-05-30 10:59:49 +03:00
parent e7a823bf3e
commit 3e93517986
7 changed files with 114 additions and 3 deletions

View File

@ -30,5 +30,7 @@ module Ast
end
end
class ClassExpression < ModuleExpression
end
end

View File

@ -31,6 +31,6 @@ module Parser
include Operators
include ModuleDef
rule(:root){ (module_definition | function_definition | expression | call_site ).repeat }
rule(:root){ (module_definition | class_definition | function_definition | expression | call_site ).repeat }
end
end

View File

@ -5,5 +5,11 @@ module Parser
keyword_module >> name >> eol >>
( (keyword_end.absent? >> root).repeat(1)).as(:module_expressions) >> keyword_end >> newline
end
rule(:class_definition) do
keyword_class >> name >> eol >>
( (keyword_end.absent? >> root).repeat(1)).as(:class_expressions) >> keyword_end >> newline
end
end
end

View File

@ -53,8 +53,12 @@ module Parser
Ast::OperatorExpression.new( o.to_s.strip , l ,r)
end
#modules and classes are undertsndibly quite similar Class < Module
rule( :name => simple(:name) , :module_expressions => sequence(:module_expressions) , :end=>"end") do
Ast::ModuleExpression.new(name , module_expressions)
Ast::ModuleExpression.new(name , module_expressions)
end
rule( :name => simple(:name) , :class_expressions => sequence(:class_expressions) , :end=>"end") do
Ast::ClassExpression.new(name , class_expressions)
end
#shortcut to get the ast tree for a given string