有没有办法将多个规则的零个或多个模式放在 Antlr4 中的一个列表中?
Is there a way to put together zero or more pattern of multiple rules into one list in Antlr4?
可能这是一个重复的问题,但我找不到我想看的问题,所以我在这里发帖。
我是Antlr的新手,我尝试使用Antlr4在Scala中制作带有访问者模式的抽象语法树。
但是,我想不出如何将如下多个规则的结果放在一个列表中。
foo: (rule0 | rule1)*
rule0: ...
rule1: ...
我知道有一种方法可以获取每个列表(即 rule0
列表和 rule1
列表)。
但是,这种方式可能会破坏出现的顺序(我想保持顺序)。
像rules=(rule0 | rule1)*
这样的方式也是不允许的,所以我不能像下面这样写
ctx.rules().asScala.map(...).toArray`
我的问题是如何将多个规则结果放在一起,同时保持访问者模式中出现的顺序。
访问者只是在您的解析 运行 生成的解析树上漫步。访问者 class 遍历每个解析器上下文的子项并调用访问者函数。这意味着实际信息存储在解析树中,您可以直接使用它。
当你得到一个 FooContext
迭代它的子列表时,它包含找到的 Rule0Context
和 Rule1Context
实例,按照它们在源代码中的使用顺序。这为您提供了子部件的位置信息以及每个子部件的信息。
可能这是一个重复的问题,但我找不到我想看的问题,所以我在这里发帖。
我是Antlr的新手,我尝试使用Antlr4在Scala中制作带有访问者模式的抽象语法树。
但是,我想不出如何将如下多个规则的结果放在一个列表中。
foo: (rule0 | rule1)*
rule0: ...
rule1: ...
我知道有一种方法可以获取每个列表(即 rule0
列表和 rule1
列表)。
但是,这种方式可能会破坏出现的顺序(我想保持顺序)。
像rules=(rule0 | rule1)*
这样的方式也是不允许的,所以我不能像下面这样写
ctx.rules().asScala.map(...).toArray`
我的问题是如何将多个规则结果放在一起,同时保持访问者模式中出现的顺序。
访问者只是在您的解析 运行 生成的解析树上漫步。访问者 class 遍历每个解析器上下文的子项并调用访问者函数。这意味着实际信息存储在解析树中,您可以直接使用它。
当你得到一个 FooContext
迭代它的子列表时,它包含找到的 Rule0Context
和 Rule1Context
实例,按照它们在源代码中的使用顺序。这为您提供了子部件的位置信息以及每个子部件的信息。