这个微小的yacc程序是如何工作的?yacc是如何工作的,你可以逐节解释它吗?
我知道到目前为止什么:
%{...%}
是定义 %% ... %%
是规则的,但如何解释规则? 和%%
之后的东西是函数定义。 %}
和%%
之间的%token INTEGER
是什么?
%{
#include <stdlib.h>
int yylex(void);
void yyerror(char *);
%}
%token INTEGER
%left '+' '-'
%left '*' '/'
%%
program:
program expr '\n' { printf("%d\n", $2); }
|
;
expr:
INTEGER { $$ = $1; }
| expr '*' expr { $$ = $1 * $3; }
| expr '/' expr { $$ = $1/$3; }
| expr '+' expr { $$ = $1 + $3; }
| expr '-' expr { $$ = $1 - $3; }
;
%%
void yyerror(char *s) {
printf("%s\n", s);
}
int main(void) {
yyparse();
return 0;
}
UPDATE
我不明白:
program:
program expr '\n' { printf("%d\n", $2); }
|
;
这看起来像是一个很好的答案,但如果格式更好,它会更清晰。我已经清理了我现在可以使用的部分,而无需更改您写得太多的内容,但是您也可以参阅http://stackoverflow.com/editing-help。 – Flexo 2011-11-08 13:02:18