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

时间:2016-06-29 17:49:45

标签: antlr antlr4

假设我的语法有这样的标记:

AND        : 'AND' | 'and' | '&&' | '&';
OR         : 'OR' | 'or' | '||' | '|' ;
NOT        : 'NOT' | 'not' | '~' | '!';

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

因此,如果我解析" A和B或C",那么两个二元运算符将是"和" /"或"。 如果我解析" A&& B || C",他们将"&&" /" ||"。

我喜欢的是他们永远是" AND" /" OR /" NOT",无论匹配什么文字符号。这可能吗?

1 个答案:

答案 0 :(得分:4)

这就是词汇表的用途。使用yourLexer.getVocabulary()yourParser.getVocabulary(),然后使用vocabulary.getSymbolicName(tokenType)作为令牌类型的文本表示形式。如果返回空字符串,请尝试第二步vocabulary.getLiteralName(tokenType),返回用于定义令牌的文本。