我正在用树顶 gem 用 ruby 编写一个小的、非常简单的 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