注:
課程:《編譯技術》上機
實驗一:詞法語法分析器的設計與實作,生成抽象語法樹,
建議使用詞法語法分析程式生成工具如:LEX/FLEX , YACC/BISON等專業工具完成,
此處完成補充 自增自減 的操作
另外:希望大噶支持下我滴個人博客網站:www.xyzsh.cn
文章有更新的話,個人網站會優先發出來的(CSDN有審核)
希望童鞋們可以去踩一踩~!
前期準備
- 已完成上一篇文章中的補充char操作
- 已經將整個檔案夾都備好份,以供魔改后的回溯

開始實驗
第一步
?修改lex.l檔案(lex描述檔案給出了每一類詞法單元的規則)
- 第47行插入對字串++的識別
- 第48行插入對字串–的識別

第二步
?修改parser.y檔案(parser.y是C語言文法)
- 第35行插入單詞聲名DPLUS DMINUS

- 第48行定義優先級
?自增自減的優先級很高,與負號(UMINUS),非號(NOT)優先級相同

- 第117-120行插入自增的文法
?為了區分前自增與后自增,我又分別設了兩個狀態DPLUS_BEFORE DPLUS_AFTORE

- 第38行補充定義狀態名

第三步
?修改ast.c檔案(ast.c定義了樹的生成與輸出)
- 在第152-155行插入DPLUS\DMINUS的輸出
?他們與NOT、UMINUS共用一套輸出即可

補:解釋一下 printf("% * cCHAR:%c\n",indent,’ ',T->type_char);的含義:先列印indent個空格,再列印CHAR:%c
默認低一級的話,往后移3個空格
第四步
?修改test.c檔案(測驗代碼)
- 第18-21行是測驗自增自減單獨出現時
- 第23行是測驗在自增復合陳述句中

結果檢驗
?依次運行
flex lex.l
bison -d parser.y
gcc -o parser lex.yy.c parser.tab.c ast.c
parser test.c

?發現有亂碼,使用chcp 65001切換到UTF-8編碼界面

?自增自減輸出完成!
?在復合陳述句也可以輸出!
?自增自減補充完成啦!勝利就在眼前,加油呀!
寫在結尾
希望以上可以幫到你!
如有錯誤,或不同想法,歡迎指出,互相學習共同進步!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/223049.html
標籤:其他
上一篇:Java學習記錄-9(網路通信)
下一篇:R語言繪制動態熱力地圖
