Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行

词法分析程序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

Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行

(2)其次,编译yacc文件,生成ch3-01.tab.h 与ch3-01.tab.c文件

bison -d ch3-01.y

Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行

(3)链接生成的.c 文件,并生成相应的可执行文件

gcc -o ch3-01 ch3-01.tab.c lex.yy.c -ly -lfl

Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行

(4)运行可执行文件,计算简单表达式

./ch3-01.exe

99+11

Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行Lex与Yacc学习(六)之lex & yacc (简单计算器程序) 运行

上一篇:Lex与Yacc学习(四)之Lex规范


下一篇:Lex与Yacc学习(五)之正则表达式篇