0

我刚刚开始使用 antlr,而 antlr 则用于 ruby​​ 。版本是 3.2.1

我正在尝试为厨师语言创建一个解析器,语法让我很头疼:P 我确定我错过了一些基本概念,但我就是想不通。

我创建了 3 个语法。主要的是菜谱解析器,它(当然)解析菜谱。解析配方后,我使用了其他 2 个语法,即解析成分和说明(方法部分)。

我的问题是最后一个,即解析指令的那个,例如“将……放入搅拌碗”、“液化……”等。除了一些规则外,一切都很好。由于它的长度,我已经在 paste.bin发布了 Instructions.g 源。

这是正在发生的事情:

  • 当我取消注释规则combine_ingredient_into_mixing_bowldivide_ingredient_into_mixing_bowl时,解析器停止识别几乎所有其他规则(例如 put_ingredient_into_mixing_bowl)。这对我来说似乎很奇怪,因为它们似乎并没有相互覆盖(当然它们是,不知何故)。我收到错误:“行 0:-1 输入不匹配”“期待 WS”

  • Stir_mixing_bowl不匹配任何东西,但它确实与其他可以正常工作的规则没有什么不同。我收到错误:“第 0 行:-1 输入不匹配”“期望设置为零”

  • 是否可以包含规则verb_the_ingredientliquefy_ingredient而不使它们与其他规则冲突?前者实际上会与我猜的其他一切冲突,而后者将与liquefy_mixing_bowl冲突。处理这种讨厌的语法的最佳方法是什么?

顺便说一句,我没有将 WS(空格,例如空格和制表符)设置为忽略通道,因为因为一种成分可以包含一个或多个单词(例如第戎芥末或只是 zuchinnis),我发现它更容易通过使用 WS 标记作为分隔符来指定语法。

此外,运行 antlr4ruby 命令来生成解析器/词法分析器代码根本不会显示任何警告。

任何提示、提示或启发在这里都非常感谢:)

提前致谢。

4

0 回答 0