我刚刚开始使用antlr,使用antlr for ruby。版本是3.2.1
我正在尝试为chef language创建一个解析器,语法给我一个真正的头痛:P我确定我错过了一些基本概念,但我无法理解它进行。
我创建了3个语法。主要的是配方解析器,它(当然)解析配方。解析一个配方后,我使用了另外两个解析成分和指令的语法(方法部分)。
我的问题在于最后一个,解析说明的那个,例如“把...放进搅拌碗”,“液化......”等等。除了一些规则外,一切都很好。我发布了Instructions.g source here, at paste.bin,因为它的长度。
以下是发生的事情:
当我取消注释规则 combine_ingredient_into_mixing_bowl 或 divide_ingredient_into_mixing_bowl 时,解析器会停止识别几乎所有其他规则(例如put_ingredient_into_mixing_bowl)。这对我来说似乎很奇怪,因为它们似乎并没有互相覆盖(当然它们是某种方式)。我收到错误:“第0行:-1不匹配的输入”“期待WS”
stir_mixing_bowl 与任何内容都不匹配,但它与其他正常工作的规则没有什么不同。我收到错误:“第0行:-1不匹配的输入”“期待设置为无”
是否可以包含规则 verb_the_ingredient 和 liquefy_ingredient ,而不会与其他规则冲突?前者实际上会与我猜测的其他内容发生冲突,后者会与 liquefy_mixing_bowl 发生冲突。什么是处理这种令人讨厌的语法的最佳方法?
顺便说一句,我没有将WS(空格和制表符等空格)设置为忽略通道,因为一个成分可以包含一个或多个单词(例如第戎芥末或只是zuchinnis),我发现它通过使用WS标记作为分隔符,更容易指定语法。
此外,运行antlr4ruby命令以生成解析器/词法分析器代码根本不会显示任何警告。
任何提示,提示或启发都非常感谢:)
提前致谢。