【发布时间】:2012-05-07 01:49:10
【问题描述】:
我正在尝试制作一种没有运算符优先级的语法,但要求您使用一个运算符或将它们括在括号中。 (为简单起见,使用test 代替id|int_literal etc 和+ 代替有效运算符列表)。比如:
test + test ///valid!
(test + test) + test ///valid!
(test + test) + (test + test) /// valid!
test + test + test /// invalid!
有没有什么方法可以为此编写一个不需要 backtrack=true 的语法?我不认为左分解在这里真的有意义,我不确定句法谓词会有什么帮助。
这是我所拥有的(需要backtrack=true):
fragment
bexpr : 'test' | '(' cbebr ')';
fragment
cbexpr : bexpr '+' bexpr;
expr : bexpr | cbexpr;
【问题讨论】: