假设我有一个具有如下标记的语法:
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”,无论匹配什么文字符号。这可能吗?
这就是词汇表的用途。使用yourLexer.getVocabulary()或yourParser.getVocabulary()然后vocabulary.getSymbolicName(tokenType)用于标记类型的文本表示。如果返回空字符串 try as second step vocabulary.getLiteralName(tokenType),则返回用于定义标记的文本。