43 lines
1.4 KiB
Plaintext
43 lines
1.4 KiB
Plaintext
grammar Keywords
|
|
include BasicTypes
|
|
|
|
rule keyword_begin 'begin' deliminator end
|
|
rule keyword_class 'class' deliminator end
|
|
rule keyword_def 'def' deliminator end
|
|
rule keyword_do 'do' deliminator end
|
|
rule keyword_else 'else' deliminator end
|
|
rule keyword_end 'end' deliminator end
|
|
rule keyword_if 'if' deliminator end
|
|
rule keyword_rescue 'rescue' deliminator end
|
|
rule keyword_return 'return' deliminator end
|
|
rule keyword_module 'module' deliminator end
|
|
rule keyword_unless 'unless' deliminator end
|
|
rule keyword_until 'until' deliminator end
|
|
rule keyword_while 'while' deliminator end
|
|
|
|
rule keyword_nil
|
|
('nil' deliminator ){ Ast::NilExpression.new }
|
|
end
|
|
|
|
rule keyword_false
|
|
('false' deliminator) { Ast::FalseExpression.new }
|
|
end
|
|
|
|
rule keyword_true
|
|
('true' deliminator) { Ast::TrueExpression.new }
|
|
end
|
|
|
|
# this rule is just to make sure identifiers can't be keywords. Kind of duplication here, but we need the
|
|
# space in above rules, so just make sure to add any here too.
|
|
rule keyword ('begin' | 'def' | 'do' | 'else' | 'end' |
|
|
'false' | 'if' | 'rescue' | 'true' | 'nil' |
|
|
'unless' | 'until' | 'while') deliminator
|
|
end
|
|
|
|
rule keyword_expression
|
|
keyword_true | keyword_false | keyword_nil | basic_expression
|
|
end
|
|
|
|
root keyword_expression
|
|
end
|