码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2018-12-01 00:20:49      阅读:171      评论:0      收藏:0      [点我收藏+]

标签:分析   make   gcc   原理   ++   ret   ali   执行   ext   

我们接着完善这个计算器程序,让算式能显示出来,修改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#?

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

标签:分析   make   gcc   原理   ++   ret   ali   执行   ext   

原文地址:http://blog.51cto.com/13959448/2324502

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!