写一个ANTLR行动“;在两者之间;多种多样

写一个ANTLR行动“;在两者之间;多种多样,antlr,Antlr,我正在研究一个ANTLR语法,看起来像 A : B+; …我希望能够在B的每个实例之前和之后执行操作。例如,我希望 A : A {out("Before");} B {out("After");} | {out("Before");} B {out("After");}; 因此,在输入流abb上,我将看到输出 Before After Before After 当然,由于左递归规则,第二个示例不是有效的ANTLR语法。有没有一种方法可以通过正确的ANTLR语法实现我想要的 我还应该提到

我正在研究一个ANTLR语法,看起来像

A : B+;
…我希望能够在B的每个实例之前和之后执行操作。例如,我希望

A : A {out("Before");} B {out("After");}
  | {out("Before");} B {out("After");};
因此,在输入流
abb
上,我将看到输出

Before
After
Before
After
当然,由于左递归规则,第二个示例不是有效的ANTLR语法。有没有一种方法可以通过正确的ANTLR语法实现我想要的

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

不是这样吗

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