在“之间”编写 ANTLR 动作多重性

发布于 2024-09-15 23:08:45 字数 463 浏览 2 评论 0原文

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

A : B+;

并且我希望能够在 B 的每个实例之前和之后执行一个操作。例如,我想要类似......

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

所以在输入流 AB B 上我会看到输出...

Before
After
Before
After

当然,由于左递归规则,第二个示例不是有效的 ANTLR 语法。有没有办法用正确的 ANTLR 语法来完成我想要的事情?

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

I'm working on an ANTLR grammar that looks like...

A : B+;

...and I'd like to be able to perform an action before and after each instance of B. For example, I'd like something like...

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

So that on the input stream A B B I would see the output...

Before
After
Before
After

Of course the second example isn't valid ANTLR syntax because of the left recursive rule. Is there a way to accomplish what I want with proper ANTLR syntax?

I should also mention that there are other ways of reaching the B rule so simply surrounding the B rule with before and after won't work.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

伤痕我心 2024-09-22 23:08:45

难道就没有

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

工作之类的吗?

Doesn't something like

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

work?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文