gpt4 book ai didi

parsing - 处理 ANTLR 返回值

转载 作者:行者123 更新时间:2023-12-02 17:32:59 25 4
gpt4 key购买 nike

我有这样的语法规则:

a returns [string expr] : (b | c) {$expr = "Build expression from b OR c here";}

b returns [string expr] : 'B' {$expr = "From b";}

c returns [string expr] : 'C' {$expr = "From c";}

我想更换

$expr = "Build expression from b OR c here"; 

使用一条指令,将 b 或 c 返回的任何内容放入 $expr 变量中。我知道有一个解决方案,可以像这样执行此作业:

a returns [string expr] : b {$expr = $b.expr;} | c {$expr = $c.expr;}

但想知道是否有一种更简单的方法,例如用变量命名整个组并使用它:

a returns [string expr] : group = (b | c) {$expr = $group.expr;}

我已经尝试过这个,但它在 ANTLR 中不起作用,即使组变量用于获取“b”返回的值。

最佳答案

不能对多个非终结符使用相同的标签,除非它们在语法中引用相同的规则。这意味着像 group=(A | B) 这样的语法仅适用于 token 引用(AB 是终端)。为此可以使用以下语法。

a returns [string expr]
: b {$expr = $b.expr;}
| c {$expr = $c.expr;}
;

关于parsing - 处理 ANTLR 返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16796096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com