标签:分析 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#?
标签:分析 make gcc 原理 ++ ret ali 执行 ext
原文地址:http://blog.51cto.com/13959448/2324502