数式の評価を便利な道具で #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); }
     ;