小小程序媛  
得之坦然,失之淡然,顺其自然,争其必然

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


posted on 2015-01-22 09:36  Coding菌  阅读(1068)  评论(0编辑  收藏  举报