jison(Bisonのjavascript相当版)を使用していますが、次の優先順位の問題があります。私は電卓のデモを使って説明します http://zaach.github.com/jison/try/bisonの優先順位(実際にはjisonを使用していますが、同じである必要があります)
それはそのまま動作します。優先順位は
であると私は
| e '*' e %prec TIMESPREC
{$$ = $1*$3;}
ことと
%left '+' '-'
%left TIMESPREC '/'
%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;}
ですこれ以上動作しません。同じことをしなければならないのでしょうか?例えば、2 x + 3が(2x)+3として解析される代数構文を最終的に得たい場合など、これは有用である。
ありがとうございます!
ありがとう、それは理由を説明します!今、2 * x + 3の代わりに2 x + 3のようなものを許可したい場合、正しい解決策は何ですか?ありがとう – user1213898
これを可能にするには、基本的に文法を書き直さなければなりません。それは重大な問題ではなく、単にルール内の '*'を削除して優先順位を設定することはできません。競合が発生するためです。本質的に、 '%prec'はこれであなたの問題を解決することはありません。ちなみに、upvoteや答えを受け入れるより感謝の言葉を言う良い方法はありません:) – Dervall