【发布时间】:2018-05-03 16:50:10
【问题描述】:
我希望让我的 JavaCC 解析器返回比默认值更具体的自定义错误消息。
我目前的基本结构是这样的:
Foo(): {} { (A() B())+ }
A(): {} { <TOKA1> | <TOKA2> }
B(): {} { <TOKB1> | <TOKB2> }
我一直在研究如何抛出自定义错误消息,标准方法似乎是这样的:
A(): {} { <TOKA1> | <TOKA2>
| {throw new ParseException("Expected A, found " + getToken(1).image + ".");} }
但是,在 A 和 B 上执行此操作会导致编译器产生错误:
Expansion within "(...)+" can be matched by empty string.
这是可以理解的,因为解析器不“知道”空选项将终止解析过程。它预测它可以将空字符串匹配到无穷大。尽管如此,我找不到或想到任何其他简单的方法来引发这样的错误。实现我想要的结果的最佳方法是什么?
【问题讨论】:
标签: error-handling javacc