代码之家  ›  专栏  ›  技术社区  ›  Pace

在多重性之间写一个“antlr”动作

  •  0
  • Pace  · 技术社区  · 14 年前

    我正在研究一种类似于…

    A : B+;
    

    …我希望能够在B的每个实例前后执行一个操作。例如,我希望……

    A : A {out("Before");} B {out("After");}
      | {out("Before");} B {out("After");};
    

    所以在输入流上 A B B 我会看到输出…

    Before
    After
    Before
    After
    

    当然,由于左边的递归规则,第二个示例不是有效的antlr语法。有没有一种方法可以用适当的antlr语法来完成我想要的工作?

    我还应该提到,还有其他方法可以达到B规则,所以简单地用前后包围B规则是行不通的。

    1 回复  |  直到 14 年前
        1
  •  1
  •   jpalecek    14 年前

    不是这样的吗

    A : ({out("Before");} B {out("After");})+;
    

    工作?