C指针原理(11)-编译原理-小型计算器实现
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C指针原理(11)-编译原理-小型计算器实现相关的知识,希望对你有一定的参考价值。
我们接着完善这个计算器程序,让算式能显示出来,修改calculator.l
我们接着完善这个计算器程序,让算式能显示出来,修改calculator.l
通过加入printf语句,打印词法分析器解析到的字符。比如 :
..................
[0-9]+?{yylval=atoi(yytext);printf("%d",yylval);return?NUMBER;}
??{return?EOL;}
[? ]?/blank/
.?/invalid?char/
%%
然后编译执行。
[email protected]:~/test/4#?make
bison?-d?calculator.y
flex?calculator.l
gcc?calculator.tab.c??lex.yy.c?-lfl
[email protected]:~/test/4#?./a.out
12+66
12+66=78
^C
[email protected]:~/test/4#?./a.out?mycpt1.cpt?mycpt2.cpt???
12*66/(10-5)=158
77/(10+1)-15=-8
接下来加上读取的行号,将结果的显示更加人性化
flex文件要改:
?{printf("<line:%4d>",yylineno);yylineno++;return EOL;}
然后,bison文件也改:
calclist:/**/
? |calclist exp EOL{printf ("the result is:%d
",$2);}
? ;
最后 ,编译运行测试一下。
[email protected]:~/test/4# make
bison -d calculator.y
flex calculator.l
gcc calculator.tab.c ?lex.yy.c -lfl
[email protected]:~/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
[email protected]:~/test/4#?
以上是关于C指针原理(11)-编译原理-小型计算器实现的主要内容,如果未能解决你的问题,请参考以下文章