嵌入式操作中的ANTLR4规则和令牌属性

时间:2016-10-20 17:32:42

标签: antlr4

在The Definitive ANTLR4 Reference一书中,有两个关于从嵌入式动作访问规则和标记属性的短语

短语1(第272页令牌属性):$ T和$ l为令牌名称T和令牌标签l的令牌对象求值。 $ ll计算列表以获取列表标签ll。

短语2(第273页分析器规则属性):$ r和$ rl为规则名称r和规则标签rl的RContext类型的ParserRuleContext对象求值。 $ rll计算到列表的规则列表标签rll

我不明白这些部分是什么

" $ ll评估列表中的列表标签ll"

" $ rll计算到列表中的规则列表标签rll"

的意思。

请举例解释一下,告诉我如何使用它?

提前致谢

1 个答案:

答案 0 :(得分:0)

是的,这本书有点误导。什么是令牌列表。我假设有一个包含ll的例子,后来没有在印刷书中出现。

您可以拥有以下内容:

list: ll += ID (ll += ID)*;

注意ANTLR转换为令牌列表的+=(而不是简单赋值的单个令牌)。然后,您可以像使用您的语言中的任何其他列表一样访问该列表(例如$ll[1].text以获取第二个元素的文本)。

请注意,还有另一种情况,即ANTLR会自动生成一个列表,即在alt中多次引用令牌/规则时:

list: ID COMMA ID;

当您现在想要在侦听器中访问ID时,您会看到实际存在一个List,以便您可以访问所有出现的内容。