keyword expressions

and smaller new harness
This commit is contained in:
Torsten Ruger 2015-08-29 11:45:16 +03:00
parent d5a0736f48
commit fa27ebebdf
2 changed files with 32 additions and 9 deletions

View File

@ -7,16 +7,22 @@ grammar Keywords
rule keyword_do 'do' space? end rule keyword_do 'do' space? end
rule keyword_else 'else' space? end rule keyword_else 'else' space? end
rule keyword_end 'end' space? end rule keyword_end 'end' space? end
rule keyword_false 'false' space? end
rule keyword_if 'if' space? end rule keyword_if 'if' space? end
rule keyword_rescue 'rescue' space? end rule keyword_rescue 'rescue' space? end
rule keyword_return 'return' space? end rule keyword_return 'return' space? end
rule keyword_module 'module' space? end rule keyword_module 'module' space? end
rule keyword_nil 'nil' space? end
rule keyword_unless 'unless' space? end rule keyword_unless 'unless' space? end
rule keyword_until 'until' space? end rule keyword_until 'until' space? end
rule keyword_while 'while' space? end rule keyword_while 'while' space? end
rule keyword_nil
('nil' space? ){ Ast::NilExpression.new }
end
rule keyword_false
('false' space?) { Ast::FalseExpression.new }
end
rule keyword_true rule keyword_true
('true' space?) { Ast::TrueExpression.new } ('true' space?) { Ast::TrueExpression.new }
end end
@ -28,4 +34,9 @@ grammar Keywords
'unless' | 'until' | 'while') space? 'unless' | 'until' | 'while') space?
end end
rule keyword_expression
keyword_true | keyword_false | keyword_nil
end
root keyword_expression
end end

View File

@ -1,23 +1,35 @@
require_relative "../parser_helper" require_relative "../setup"
class TestBasic < MiniTest::Test class TestBasic < MiniTest::Test
# include the magic (setup and parse -> test method translation), see there # include the magic (setup and parse -> test method translation), see there
include ParserHelper #include ParserHelper
def setup
@parser = Keywords
end
def check
parse = @parser.parse(@input)
assert_equal @input , parse
assert_equal @output , parse.value
end
def test_true def test_true
@input = 'true ' @input = 'true '
@output = Ast::TrueExpression.new() @output = Ast::TrueExpression.new()
@root = :keyword_true check
end end
def ttest_false
def test_false
@input = 'false ' @input = 'false '
@output = Ast::FalseExpression.new() @output = Ast::FalseExpression.new()
@root = :basic_type check
end end
def ttest_nil
def test_nil
@input = 'nil ' @input = 'nil '
@output = Ast::NilExpression.new() @output = Ast::NilExpression.new()
@root = :basic_type check
end end
def ttest_number def ttest_number