词法分析程序ch3-01.l
%{
#include "ch3-01.tab.h"
extern int yylval;
%} %%
[0-9]+ { yylval = atoi(yytext); return NUMBER; }
[ \t] ; /* ignore white space */
\n return 0; /* logical EOF */
. return yytext[0];
%%
语法分析程序ch3-01.y
%token NAME NUMBER
%%
statement: NAME '=' expression
| expression { printf("= %d\n", $1); }
; expression: expression '+' NUMBER { $$ = $1 + $3; }
| expression '-' NUMBER { $$ = $1 - $3; }
| NUMBER { $$ = $1; }
;
%%
int main()
{
yyparse();
return 0;
} int yyerror(char *s)
{
printf("%s/n",s);
return 0;
}
编译运行命令:
(1)首先,编译lex文件,生成lex.yy.c文件
flex ch3-01.l
(2)其次,编译yacc文件,生成ch3-01.tab.h 与ch3-01.tab.c文件
bison -d ch3-01.y
(3)链接生成的.c 文件,并生成相应的可执行文件
gcc -o ch3-01 ch3-01.tab.c lex.yy.c -ly -lfl
(4)运行可执行文件,计算简单表达式
./ch3-01.exe
99+11