gpt4 book ai didi

ANTLR4 又一个左递归

转载 作者:行者123 更新时间:2023-12-01 12:42:31 28 4
gpt4 key购买 nike

很惭愧的问...我为从 int 到 bool 类型转换的语言编写了一个语法,反之亦然。

logic_expr : expr NOT? OR | AND expr
| expr '|' expr SMALLER | LARGER
| NUMBER
| NUMBER_SHORT
| IDENT
| LOGIC_DEFINED
;
math_expr : expr ADD | SUB expr
| NUMBER
| NUMBER_SHORT
| IDENT
| LOGIC_FULL
;
expr : logic_expr
| math_expr
| IDENT
| LOGIC_DEFINED
| '(' expr ')'
;

但是 antlr 告诉我“下面的规则集是相互左递归的 [logic_expr, expr, math_expr]”我不明白我的语法有什么问题吗?

最佳答案

从 ANTLR 4.2.2 开始,ANTLR 4 当前不支持包含间接左递归的语法。此限制由 issue #522 解决,我希望它能进入 ANTLR 4.3。

由于 ANTLR 4 已经支持直接左递归,您可以通过内联您的logic_exprmath_expr 规则来解决这个问题。我还通过添加您省略的括号编辑了 3 个损坏的备选方案。我没有消除原始规则中存在的歧义。

expr
: expr NOT? (OR | AND) expr
| expr '|' expr (SMALLER | LARGER)
| NUMBER
| NUMBER_SHORT
| IDENT
| LOGIC_DEFINED
| expr (ADD | SUB) expr
| NUMBER
| NUMBER_SHORT
| IDENT
| LOGIC_FULL
| IDENT
| LOGIC_DEFINED
| '(' expr ')'
;

关于ANTLR4 又一个左递归,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22999041/

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