如何在ANTLR中获得令牌TYPE作为令牌文本



假设我有一个语法,它有这样的标记:

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

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

因此,如果我解析"A和B或C",两个二进制操作符将是"one_answers"/"或"。如果我解析"A &&B || C",他们会是"&&"/"| |"。

我想要的是它们总是"AND"/"OR"/"NOT",不管匹配的是什么文字符号。这可能吗?

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

相关内容

最新更新