我正在为一种小型查询语言构建一个 ANTLR 解析器。查询语言根据定义是模棱两可的,我们需要所有可能的解释 (AST) 来处理查询。
Example:
query : CLASSIFIED_TOKEN UNCLASSIFIED_TOKEN
| ANY_TOKEN UNCLASSIFIED_TOKEN
;
在这种情况下,如果输入与两个规则都匹配,我需要获得 2 个具有两种解释的 AST。ANTLR 将返回第一个匹配的 AST。
你知道一种简单的方法来获得相同语法的所有可能的 AST 吗?我正在考虑多次运行解析器,在迭代之间“关闭”已经匹配的规则;这似乎很脏。有更好的主意吗?也许其他具有 java 支持的 lex/parser 工具可以做到这一点?
谢谢