java - 有没有一种方法可以将零个或多个多个规则模式组合到 Antlr4 的一个列表中?

标签 java scala antlr4

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

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

但是,我无法想出如何将如下所示的多个规则的结果组合到一个列表中。

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

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

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

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

最佳答案

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

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

关于java - 有没有一种方法可以将零个或多个多个规则模式组合到 Antlr4 的一个列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59809274/

相关文章:

java - 如何设置带角的表面 View 相机背景

java - 将 mp3 转换为 LINEAR_16 或 FLAC 格式以用于谷歌云语音

java - antlr4 类似的标记定义

java - Antlr4 的缩进而不是括号

java - 在 Kotlin 中仅使用 getter 覆盖 Java 接口(interface)

java - 如何在javafx2中获取变换后的形状的坐标?

java - 如何在旋转之前保存应用程序的当前快照?

scala - scala 中的 eta/placeholders 下划线 : why does "Console println" work and "Console.println" not?

Scala:返回集合并集的高阶函数

parsing - ANTLR4:TokenStreamRewriter输出的格式不正确(删除了空格)