我们接着完善这个计算器程序,让算式能显示出来,修改calculator.l
我们接着完善这个计算器程序,让算式能显示出来,修改calculator.l
通过加入printf语句,打印词法分析器解析到的字符。比如 :
..................
[0-9]+ {yylval=atoi(yytext);printf("%d",yylval);return NUMBER;}
n {return EOL;}
[ t] /blank/
. /invalid char/
%%
然后编译执行。
root@myhaspl:~/test/4# make
bison -d calculator.y
flex calculator.l
gcc calculator.tab.c lex.yy.c -lfl
root@myhaspl:~/test/4# ./a.out
12+66
12+66=78
^C
root@myhaspl:~/test/4# ./a.out mycpt1.cpt mycpt2.cpt
12*66/(10-5)=158
77/(10+1)-15=-8
接下来加上读取的行号,将结果的显示更加人性化
flex文件要改:
n {printf("
然后,bison文件也改:
calclist:
|calclist exp EOL{printf ("the result is:%dn",$2);}
;
最后 ,编译运行测试一下。
root@myhaspl:~/test/4# make
bison -d calculator.y
flex calculator.l
gcc calculator.tab.c lex.yy.c -lfl
root@myhaspl:~/test/4# ./a.out mycpt1.cpt mycpt2.cpt
1266/(10-5)
12/22-8
77(6-2)
77/(10+1)-15
root@myhaspl:~/test/4#
©著作权归作者所有:来自51CTO博客作者myhaspl的原创作品,如需转载,请注明出处,否则将追究法律责任



