ANTLR4 - 如何在 ANTLR 中获取令牌 TYPE 作为令牌文本?

Rya*_* O. 3 antlr antlr4

假设我有一个具有如下标记的语法:

AND        : 'AND' | 'and' | '&&' | '&';
OR         : 'OR' | 'or' | '||' | '|' ;
NOT        : 'NOT' | 'not' | '~' | '!';
Run Code Online (Sandbox Code Playgroud)

当我使用 TreeViewer 可视化 ParseTree 或使用 tree.toStringTree() 打印树时,每个节点的文本与匹配的文本相同。

因此,如果我解析“A 和 B 或 C”,两个二元运算符将是“和”/“或”。如果我解析“A && B || C”,它们将是“&&”/“||”。

我希望它们始终是“AND”/“OR/NOT”,无论匹配什么文字符号。这可能吗?

Mik*_*hke 6

这就是词汇表的用途。使用yourLexer.getVocabulary()yourParser.getVocabulary()然后vocabulary.getSymbolicName(tokenType)用于标记类型的文本表示。如果返回空字符串 try as second step vocabulary.getLiteralName(tokenType),则返回用于定义标记的文本。