我正在使用 jison (相当于 Bison 的 javascript )并且我遇到了以下优先级问题。我将使用计算器演示 http://zaach.github.com/jison/try/来说明它
它按原样工作正常。优先级是
%left '+' '-'
%left '*' '/'
%left '^'
%left UMINUS
语法是
e
: e '+' e
{$$ = $1+$3;}
| e '-' e
{$$ = $1-$3;}
| e '*' e
{$$ = $1*$3;}
| e '/' e
{$$ = $1/$3;}
| e '^' e
{$$ = Math.pow($1, $3);}
| '-' e %prec UMINUS
{$$ = -$2;}
如果我将“*”行更改为
| e '*' e %prec TIMESPREC
{$$ = $1*$3;}
并将优先级更改为
%left '+' '-'
%left TIMESPREC '/'
%left '^'
%left UMINUS
它不再起作用了。不应该是一样的吗?这可能很有用,例如,如果希望最终获得一种代数语法,其中 2 x + 3 被解析为 (2x)+3。
谢谢!