ANTLR 词法分析器“标记”部分的用途

问题描述 投票:0回答:1

词法分析器规则的 docs 显示了词法分析器命令的以下示例

type(...)

lexer grammar SetType;
tokens { STRING }
DOUBLE : '"' .*? '"'   -> type(STRING) ;
SINGLE : '\'' .*? '\'' -> type(STRING) ;
WS     : [ \r\t\n]+    -> skip ;

我找不到

tokens { STRING }
的任何文档。
这是关于什么的?我为什么要使用它?

antlr antlr4
1个回答
0
投票

tokens
部分定义了所谓的虚拟代币。它们是虚拟的,因为没有代表该标记的词法分析器规则。您可能还记得标记名称是从定义它们的词法分析器规则派生的。

然而,有时您需要更多差异化。例如,您有数字的词法分析器规则,但您想区分 SHORT、LONG、WORD 等。然后您可以为这些特殊值定义虚拟标记:

tokens { SHORT, LONG, WORD }

ANLTR 将把它们定义为代币类型。然后,您可以编写一个返回这些虚拟类型之一的数字规则。喜欢:

NUMBER: [0-9]+ -> { type = determineNumeric($text); };

注意:上面给出的代码相当具有象征意义。操作内容取决于您的目标语言。

默认情况下,词法分析器会分配标记值

NUMBER
捕获的数字,但通过该操作,您可以分配您想要的任何标记值。

© www.soinside.com 2019 - 2024. All rights reserved.