这可能是一个重复的问题,但我找不到我想阅读的问题,所以我在这里发布。
我是Antlr的新手,我尝试使用Antlr4在Scala中使用访问者模式制作抽象语法树。
但是,我无法想出如何将如下所示的多个规则的结果组合到一个列表中。
foo: (rule0 | rule1)*
rule0: ...
rule1: ...
我知道有一种方法可以获取每个列表(即 rule0
列表和 rule1
列表)。
但是,这种方式可能会破坏发生的顺序(我想维持顺序)。
像 rules=(rule0 |rule1)*
这样的方式也是不允许的,所以我不能像下面这样写
ctx.rules().asScala.map(...).toArray`
我的问题是如何将多个规则结果组合在一起,同时保持访问者模式中的出现顺序。
最佳答案
访问者只是解析运行生成的解析树上的一个步行者。访问者类迭代每个解析器上下文的子级并调用访问者函数。这意味着实际信息存储在解析树中,您可以直接使用它。
当您获得 FooContext
迭代其子列表时,其中包含找到的 Rule0Context
和 Rule1Context
实例(按其使用顺序排列)源代码。这将为您提供有关子部件的位置信息以及有关每个子部件的信息。
关于java - 有没有一种方法可以将零个或多个多个规则模式组合到 Antlr4 的一个列表中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59809274/