我正在尝试制作一种没有运算符优先级的语法,但要求您使用一个运算符或将它们括在括号中。(为简单起见,在此处使用而test
不是有效运算符列表)。例如:id|int_literal etc
+
test + test ///valid!
(test + test) + test ///valid!
(test + test) + (test + test) /// valid!
test + test + test /// invalid!
有没有办法为此编写不需要回溯=真的语法?我不认为左分解在这里真的有意义,我不确定句法谓词会有什么帮助。
这是我所拥有的(需要backtrack=true
):
fragment
bexpr : 'test' | '(' cbebr ')';
fragment
cbexpr : bexpr '+' bexpr;
expr : bexpr | cbexpr;