我最近一直在尝试使用 Treetop 为我的一位客户创建用于 CFG DSL 语言的简单解析器。我成功地实现了他需要的所有功能,但与 Treetop 一起工作却是一段非常痛苦的经历。
问题是我无法从 Treetop 获得任何可用的错误消息。我得到的唯一输出是
parser.rb:22:in `parse': Parser error at offset: 0 (Exception)
Error:
#<TranLanParser:0x007f960c852f60>
from parser.rb:28:in `<class:Parser>'
from parser.rb:10:in `<main>'
它总是指向文件中的第一个字符。在解析的语言中发现任何错误真的很糟糕。如果我找不到任何问题,我应该如何逐步开发我的解析器?
我试图改变我的语法以包含递归规则,因为我认为这将有助于解析器尽快创建 AST 节点,但它没有帮助。
我的问题是:我做错了吗?有没有什么好的例子如何为 Treetop 创建 PEG 语法,它在部分派生的树上提供有意义的错误消息?还是 Treetop 库中的错误/错误?
感谢您的任何意见。