Bison写一个计算器规则代码
时间: 2024-01-15 14:02:46 浏览: 26
以下是使用Bison编写的计算器规则代码:
```
%{
#include <stdio.h>
%}
%token NUMBER
%left '+' '-'
%left '*' '/'
%left UMINUS
%%
/* 语法规则 */
calc: /* 空 */
| calc exp '\n' { printf("= %d\n", $2); }
| calc error '\n' { yyerror("语法错误"); }
;
exp: NUMBER
| exp '+' exp { $$ = $1 + $3; }
| exp '-' exp { $$ = $1 - $3; }
| exp '*' exp { $$ = $1 * $3; }
| exp '/' exp { if ($3 == 0) yyerror("除数不能为0"); else $$ = $1 / $3; }
| '-' exp %prec UMINUS { $$ = -$2; }
| '(' exp ')' { $$ = $2; }
;
%%
int main()
{
yyparse();
return 0;
}
int yyerror(char *s)
{
printf("%s\n", s);
return 0;
}
int yylex()
{
int c = getchar();
if (c == EOF)
return 0;
if (c >= '0' && c <= '9')
{
ungetc(c, stdin);
scanf("%d", &yylval);
return NUMBER;
}
return c;
}
```
这个计算器可以计算加减乘除和取负操作,支持括号。在输入表达式时需要以回车键结尾,程序会输出计算结果。如果输入的表达式有语法错误,程序会打印错误信息并退出。