我正在研究一种类似于…
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规则是行不通的。