数式の評価を便利な道具で #10
ということで、引き算や割り算や括弧が使える版のcalc.y用の修正パッチ。
--- calc.y # +++ # # @@ -12,8 +12,8 @@ %left '+' '-' %left '*' '/' %left NEG -%type <val> expr -%destructor { mpz_clear($$); } <val> +%type <val> expr uint +%destructor { mpz_clear($$); } expr %% stmt: /* empty */ @@ -22,7 +22,7 @@ | error '\n' { yyerrok; } ; expr: - UINT { mpz_init($$); mpz_set($$, $1); } + uint { mpz_init($$); mpz_set($$, $1); mpz_clear($1); } | 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); } @@ -30,6 +30,9 @@ | '-' expr %prec NEG { mpz_init($$); mpz_neg($$, $2); mpz_clear($2); } | '(' expr ')' { mpz_init($$); mpz_set($$, $2); mpz_clear($2); } ; +uint: + UINT { mpz_init($$); mpz_set($$, $1); } + ; %% int main(void) {