我正在制作一个看起来像......的ANTLR语法。
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规则前后都不会有效。
答案 0 :(得分:1)
不喜欢
A : ({out("Before");} B {out("After");})+;
工作?