您的位置:首页 > 其它

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

2015-01-22 09:36 465 查看

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: