厨师语言的语法

时间:2012-07-29 14:07:44

标签: antlr3

我刚刚开始使用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命令以生成解析器/词法分析器代码根本不会显示任何警告。

任何提示,提示或启发都非常感谢:)

提前致谢。

0 个答案:

没有答案