這個微小的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