4

yacc / bisonで簡単な電卓を書いて​​います。

式の文法は次のようになります。

expr
: NUM
| expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { $$ = $1 / $3; }
| '+' expr %prec '*' { $$ = $1; }
| '-' expr %prec '*' { $$ = $1; }
| '(' expr ')' { $$ = $2; }
| expr expr { $$ = $1 '*' $2; }
;

このように演算子の優先順位を宣言しました。

%left '+' '-'
%left '*' '/'
%nonassoc '('

問題は最後のルールにあります:

expr expr { $$ = $1 $2; }

5(3+4)(3-24)電卓のように式を記述できるようにしたいので、このルールが必要です。

この文法を明確にすることは可能ですか?

4

1 に答える 1