继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

C指针原理(11)-编译原理-小型计算器实现

holdtom
关注TA
已关注
手记 1703
粉丝 240
获赞 991

我们接着完善这个计算器程序,让算式能显示出来,修改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("<line:%4d>",yylineno);yylineno++;return EOL;}

然后,bison文件也改:

calclist:/**/

  |calclist exp EOL{printf ("the result is:%d\n",$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)<line:   1>the result is:158

12/22-8<line:   2>the result is:-8

77(6-2)<line:   3>the result is:308

77/(10+1)-15<line:   4>the result is:-8

root@myhaspl:~/test/4# 

©著作权归作者所有:来自51CTO博客作者myhaspl的原创作品,如需转载,请注明出处,否则将追究法律责任


打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP