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)-编译原理-小型计算器实现的主要内容,如果未能解决你的问题,请参考以下文章

C指针原理(27)-编译基本原理-语法树及其实现7

实现一个小型编译器

编译原理

c++C++面试知识1——第一章 编译内存相关

了解编译原理

帮忙解下编译原理题