0
它基于this article,但使用lex
而不是自己实现它。为什么我的计算器总是报告“语法错误”?
但我已经试过像2+3
各种表情,都以失败告终......
法:
0 {
yylval = atoi(yytext);
}
[1-9][0-9]* {
yylval = atoi(yytext);
return NUM;
}
[-+*/()] {
return *yytext;
}
[ \t\n]+ ;
. yyerror("Unknown character");
YACC:
%start prob
%token NUM
%%
prob : expr '\n'
{
printf("\t=%X\n", $1);
return 0;
}
;
expr : expr '+' term
{
$$ = $1 + $3;
}
| expr '-' term
{
$$ = $1 - $3;
}
| term
{
$$ = $1;
}
;
term : term '*' NUM
{
$$ = $1 * $3;
}
| term '/' NUM
{
$$ = $1/$3;
}
| '(' expr ')'
{
$$ = $2;
}
| NUM
{
$$ = $1;
}
;
%%