我一直在尝试最近使用Treetop为我的客户之一创建CFG DSL语言的简单解析器。我成功地实现了他所需的所有功能,但与Treetop一起工作竟然是相当痛苦的经历。提供无用输出的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库中的错误/错误?
感谢您的意见。
谢谢,这真的很有帮助。看来,failure_rason提供了一些更好的信息。 –