解析器的调试¶ ↑
这里将介绍在使用 Racc 时可能遇到的问题。
语法文件解析出错¶ ↑
请查看错误信息中显示的行号附近的错误。如果在关闭块的行出现错误,则很可能是您在某处增加了左括号等。
出现了“冲突”提示¶ ↑
最常见且最麻烦的问题是冲突。如果语法中存在冲突,racc 在编译后会显示类似“5 shift/reduce conflict”的消息。使用 -v 选项可以从输出的 .output 文件中获得更详细的信息。至于如何使用它,以及诸如此类的问题,请阅读相关的书籍。这绝不是一个可以简单解释的问题。当然,推荐阅读《Ruby を 256 倍使うための本 無道編》(青木峰郎 著)。
解析器生成成功但运行不符合预期¶ ↑
使用 -g 选项运行 racc 生成解析器时,会附加调试代码。在这里,将解析器类的实例变量 @yydebug 设置为 true,然后调用 do_parse/yyparse,就会输出调试消息。可以直接看到解析器如何工作,从而完全掌握当前的状态。一旦知道哪里出了问题,剩下的就是修复它。
关于 next_token¶ ↑
我自己也经常忘记的是“当发送的令牌耗尽时,发送 [false, 某些内容]”。顺便说一下,在 Racc
0.10.2 及更高版本中,一旦收到 [false, 某些内容],保证不会再调用 next_token。
补充:最近改为可以使用 nil 代替 [false, 某些内容]。