嵌入式操作中的 ANTLR4 规则和令牌属性
ANTLR4 Rule and Token attributes in embedded actions
在 The Definitive ANTLR4 Reference 一书中,有两个短语涉及从嵌入式操作访问规则和令牌属性
短语 1(第 272 页令牌属性):$T 和 $l 计算令牌名称 T 和令牌标签 l 的令牌对象。 $ll 对列表标签 ll 的计算结果为 List。
短语 2(第 273 页解析器规则属性):$r 和 $rl 计算规则名称 r 和规则标签 rl 的 RContext 类型的 ParserRuleContext 对象。 $rll 对规则列表标签 rll
的计算结果为 List
我不明白是什么部分
"$ll 对列表标签 ll 计算为 List"
和
"$rll 计算规则列表标签 rll 的列表"
平均值。
能否请您举例说明并告诉我如何使用它?
提前致谢
是的,这在书中有点误导。有令牌列表是什么意思。我假设有一个包含 ll
的示例,但后来没有出现在印刷书中。
你可以有这样的东西:
list: ll += ID (ll += ID)*;
注意 +=
,ANTLR 将其转换为标记列表(而不是用于简单赋值的单个标记)。然后,您可以像使用您的语言的任何其他列表一样访问它(例如,$ll[1].text
用于第二个元素的文本)。
请注意,还有另一种情况 ANTLR 会自动生成列表,即当您在 alt 中多次引用 token/rule 时:
list: ID COMMA ID;
当您现在想在监听器中访问 ID 时,您会看到实际上有一个列表,这样您就可以访问所有出现的事件。
在 The Definitive ANTLR4 Reference 一书中,有两个短语涉及从嵌入式操作访问规则和令牌属性
短语 1(第 272 页令牌属性):$T 和 $l 计算令牌名称 T 和令牌标签 l 的令牌对象。 $ll 对列表标签 ll 的计算结果为 List。
短语 2(第 273 页解析器规则属性):$r 和 $rl 计算规则名称 r 和规则标签 rl 的 RContext 类型的 ParserRuleContext 对象。 $rll 对规则列表标签 rll
的计算结果为 List我不明白是什么部分
"$ll 对列表标签 ll 计算为 List"
和
"$rll 计算规则列表标签 rll 的列表"
平均值。
能否请您举例说明并告诉我如何使用它?
提前致谢
是的,这在书中有点误导。有令牌列表是什么意思。我假设有一个包含 ll
的示例,但后来没有出现在印刷书中。
你可以有这样的东西:
list: ll += ID (ll += ID)*;
注意 +=
,ANTLR 将其转换为标记列表(而不是用于简单赋值的单个标记)。然后,您可以像使用您的语言的任何其他列表一样访问它(例如,$ll[1].text
用于第二个元素的文本)。
请注意,还有另一种情况 ANTLR 会自动生成列表,即当您在 alt 中多次引用 token/rule 时:
list: ID COMMA ID;
当您现在想在监听器中访问 ID 时,您会看到实际上有一个列表,这样您就可以访问所有出现的事件。