我正在用ruby和treetop gem编写一个小的、非常简单的lisp解析器,只是为了进行实验。然而,它并没有真正解决我想要它如何,而且文档非常差,所以很难理解我做错了什么。目前,语法可以匹配符号和布尔值,但不能匹配数字。但是,当我将atom规则中的顺序(例如切换到bool/number/symbol)时,它仍然匹配前两个,但不匹配最后一个。树梢宝石是否有限制,意味着你只能在一个规则中有两个选择?同样,类似于'(3)'的东西仍然不能解析。
我的语法如下:
grammar Lisp
rule expression
atom / list
end
rule atom
symbol / bool / number
end
rule number
[0-9]*
end
rule bool
'T' / 'F'
end
rule symbol
[a-zA-Z]*
end
rule list
'(' expression* ')'
end
end
我正在测试它,正如他们在教程中所显示的那样,包括:
parser = LispParser.new
if parser.parse('T')
puts "Success"
else
puts "Fail"
end