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;
}
;
%%