1. 程式人生 > >C指針原理(11)-編譯原理-小型計算器實現

C指針原理(11)-編譯原理-小型計算器實現

$2 計算器 tex 打印 turn The 行號 clist 指針

我們接著完善這個計算器程序,讓算式能顯示出來,修改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)-編譯原理-小型計算器實現