예제: Yacc 파일 ( Lex 사용시) calc. y %{ #include <stdio. h> %} %token NUMBER %% command: exp { printf("%dn", $1); } ; exp : | | exp '+' term {$$ = $1 + $3; } exp '-' term {$$ = $1 - $3; } term {$$ = $1; } ; term : term '*' factor {$$ = $1 * $3; } | factor {$$ = $1; } ; factor: NUMBER | '(' exp ')' ; %% {$$ = $1; } {$$ = $2; } main() { if (yyparse() ==0) printf("parsing Success!!!nn"); else printf("parsing Fail!!!nn"); } int yyerror(char *s) { fprintf(stderr, "%sn", s); return 0; } 16
예제: Lex 파일(yacc 사용시) 토큰 정의 포함 calc. l %{ #include "calc. tab. h" %} %% [0 -9]+ [ t] n. %% {yylval = atoi(yytext); return NUMBER; } ; return 0; return yytext[0]; >flex calc. l >bison –d calc. y >gcc –o calc lex. yy. c calc. tab. c –lfl -ly // 입력 끝 표시 ‘-d’의 옵션으로 calc. tab. h를 추가로 생성. 그렇 지 않으면 calc. tab. c만 생성 Yacc 라이브러리 링크 17
test >gcc –o calc lex. yy. c calc. tab. c –lfl -ly 19