有没有办法在 Antlr4 中将多个规则的零个或多个模式组合到一个列表中?



可能,这是一个重复的问题,但我找不到我想阅读的问题,所以我在这里发帖。

我是Antlr的新手,我尝试使用Antlr4在Scala中制作具有访问者模式的抽象语法树。

但是,我想不出如何将以下多个规则的结果放在一个列表中。

foo: (rule0 | rule1)*
rule0: ...
rule1: ...

我知道有一种方法可以获取每个列表(即rule0列表和rule1列表(。 但是,这种方式可能会破坏发生的顺序(我想保持顺序(。 像rules=(rule0 | rule1)*这样的方式也是不允许的,所以我不能像下面这样写

ctx.rules().asScala.map(...).toArray`

我的问题是如何将多个规则结果放在一起,同时保持访客模式的出现顺序。

访问者只是解析运行生成的解析树上的步行者。访问者类循环访问每个分析器上下文的子级,并调用访问者函数。这意味着实际信息存储在解析树中,您可以直接使用它。

当您获得FooContext迭代其子列表时,该列表包含找到的Rule0ContextRule1Context实例,这些实例按源代码中的使用顺序排列。这为您提供了有关子部件的位置信息以及有关每个子部件的信息。

最新更新