parsing - 处理 ANTLR 返回值

标签 parsing antlr

我有这样的语法规则:

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/

相关文章:

python - 使用解析器模块检查 Python 3 源代码中的严重错误

parsing - 运算符和关键字应该放入词法分析器还是解析器中?

regex - 正则表达式/"regular expression"中的正则是什么意思?

c# - 试图将标志枚举解析为字符串

java - ANTLR NoViableAltException 与 JAVA

antlr - 我的词法分析器 token 操作未被调用

在 ANTLR 中解析字符串插值

java - TreeViewer 包无法在 ANTLR v4 w/Java 中工作

c - C 的最佳 XML 解析器

javascript - JSON 跨域问题..iframe 中的替代解析?