/* calculator.y * * cинтаксический анализатор * * для калькулятора */ %{ #include #include int yylex(void); %} %start line %token INTEGER %left '+' '-' %left '/' '*' %left '^' %left uminus %% line: expr '\n' { fprintf(stdout,"%d\n", $1); return 0; } | /* empty */ ; expr: INTEGER { $$ = $1; } | "-" expr %prec uminus { $$ = -$2; } | "(" expr ")" { $$ = $2; } | expr "-" expr { $$ = $1 - $3; } | expr "+" expr { $$ = $1 + $3; } | expr "*" expr { $$ = $1 * $3; } | expr "/" expr { $$ = $1 / $3; } ;