数式の評価を便利な道具で #11
0除算の処理を忘れていた。さらに修正パッチ。
--- calc.y # +++ # # @@ -26,7 +26,7 @@ | expr '+' expr { mpz_init($$); mpz_add($$, $1, $3); mpz_clears($1, $3, NULL); } | expr '-' expr { mpz_init($$); mpz_sub($$, $1, $3); mpz_clears($1, $3, NULL); } | expr '*' expr { mpz_init($$); mpz_mul($$, $1, $3); mpz_clears($1, $3, NULL); } - | expr '/' expr { mpz_init($$); mpz_tdiv_q($$, $1, $3); mpz_clears($1, $3, NULL); } + | expr '/' expr { if (mpz_sgn($3) == 0) { yyerror("zero divisor"); YYERROR; } mpz_init($$); mpz_tdiv_q($$, $1, $3); mpz_clears($1, $3, NULL); } | '-' expr %prec NEG { mpz_init($$); mpz_neg($$, $2); mpz_clear($2); } | '(' expr ')' { mpz_init($$); mpz_set($$, $2); mpz_clear($2); } ;