迭代/处理 ANTLR 中解析的 Token 列表

发布于 2024-11-14 14:43:37 字数 275 浏览 4 评论 0原文

我有一条规则

((cns=IDENT '->')* IDENT | (cns=IDENT '->')* 'STOP') -> ^(PREFIX ^(EVENTS $cns*) ^(ENDS $procn? STOP?)  ) 

,如果将 cns=IDENT 替换为“cns+=IDENT”,则该规则将正常工作。在这种情况下,我如何访问 cns 作为 $cns.text

I have a rule

((cns=IDENT '->')* IDENT | (cns=IDENT '->')* 'STOP') -> ^(PREFIX ^(EVENTS $cns*) ^(ENDS $procn? STOP?)  ) 

This will work correctly if cns=IDENT is replaced by 'cns+=IDENT'. In that case how can I access cns as $cns.text.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

奶茶白久 2024-11-21 14:43:37

要存储所有 IDENT 而不仅仅是最后一个 IDENT,必须将 cns=IDENT 更改为 cns+=IDENT

现在,如果您探索 ANTLR 生成的解析器 Java 代码,cns 是一个通用的 ArrayList,其中所有存储的项都是 Token 类型。

现在可以通过使用循环来迭代此列表,并且您可以使用以下代码对项目执行任何操作:

$cns.get(index)

This item is of Object type while and can be Casted(这是正确的术语吗?)到 Token 对象令牌特定任务。

To store all IDENTs and not only last one cns=IDENT has to be changed to cns+=IDENT.

Now if you explore parser Java code generated by ANTLR cns is a generic ArrayList where all stored items are of type Token.

Now this list can be iterated through using a loop and you can do anything with the items using code like

$cns.get(index)

This item is of Object type though and can be Casted(is this correct terminology?) to Token object for Token specific tasks.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文