在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"
的意思。
请举例解释一下,告诉我如何使用它?
提前致谢
答案 0 :(得分:0)
是的,这本书有点误导。什么是令牌列表。我假设有一个包含ll
的例子,后来没有在印刷书中出现。
您可以拥有以下内容:
list: ll += ID (ll += ID)*;
注意ANTLR转换为令牌列表的+=
(而不是简单赋值的单个令牌)。然后,您可以像使用您的语言中的任何其他列表一样访问该列表(例如$ll[1].text
以获取第二个元素的文本)。
请注意,还有另一种情况,即ANTLR会自动生成一个列表,即在alt中多次引用令牌/规则时:
list: ID COMMA ID;
当您现在想要在侦听器中访问ID时,您会看到实际存在一个List,以便您可以访问所有出现的内容。