为什么ANTLR v4 -diagnostics选项无法检测到这种明显的歧义?

时间:2019-02-22 23:11:24

标签: antlr antlr4

考虑以下ANTLR v4语法:

grammar String;

anything:   STRING    '"'?;

STRING: '"' (ESC|.)*? '"';
fragment
ESC: '\\"' | '\\\\';

这摘自《权威的ANTLR 4参考》一书,但请注意,该不寻常的修改允许在STRINGanything之后使用可选的隔离双引号。

此语法对于输入"Orange\""似乎模棱两可,因为它可以将其解析为"Orange\"""Orange\" "(也就是说,将\与{{1 }},而不是.)。前者是解析器实际生成的解析器,因为在选择ESCESC.之前,并且解析器并未探索所有可能的解析以提高效率。

但是,这本书提到使用(ESC|.)选项运行TestRig可以打开精确的歧义检测功能。我决定测试此选项是否可以检测到上述歧义,但是在输入-diagnostics上运行grun String anything -diagnostics不会产生任何歧义消息。我想念什么?

0 个答案:

没有答案