이 작은 yacc 프로그램은 어떻게 작동합니까?yacc은 어떻게 작동합니까? 섹션별로 섹션을 설명 할 수 있습니까?
는 내가 지금까지 알고
%{...%}
는 정의 %% ... %%
규칙입니다,하지만 어떻게 규칙을 해석하는? %%
다음에 및 stuff가 함수 정의입니다. %}
과 %%
사이에 %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