我们接着完善这个计算器程序,让算式能显示出来,修改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的原创作品,如需转载,请注明出处,否则将追究法律责任