下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、編譯原理實(shí)驗(yàn)報(bào)告五年月日姓名學(xué)號(hào)姓名學(xué)號(hào)系年級(jí) 2012 級(jí) 專業(yè) 計(jì)算機(jī) 科目 編譯原理題目_驗(yàn)證 Yacc 的使用_?實(shí)驗(yàn)?zāi)康氖煜ふZ法分析器生成工具 Yacc 的使用,并學(xué)會(huì)在 cygwi n 下使用 bis on 工具 編譯 Yacc 文法說明文件。學(xué)習(xí)如何使用 lex 和 yacc 合作進(jìn)行語法分析。?實(shí)驗(yàn)內(nèi)容根據(jù)給出的 calculator 例子(calculator0,calculator1,calculator2,calculator3)完成下面題目: 用 lex和 yacc 寫一個(gè)計(jì)算布爾表達(dá)式真值的計(jì)算器。?實(shí)驗(yàn)要求輸入為一個(gè)布爾表達(dá)式,以換行結(jié)束。輸出為這個(gè)布爾表達(dá)式的真值
2、(true或 false )。 嘗試二義文法和非二義文法兩種不同的實(shí)現(xiàn)方式。 布爾表達(dá)式二義 文法為:S - S or S | S and S | not S | (S) | true | false,其中優(yōu)先級(jí) or and 1| |0false!1| |1true11 10&1true1 | | 0&0true二義(版本 1,未去掉對(duì)于運(yùn)算結(jié)合性的定義)Administra七0廣匚白廣rim z $ /ex2311false!0true true0 false1|0&0truE以上的內(nèi)容按照我們的計(jì)算順序都是對(duì)的,一開始無法相通為什么二義與非二義的結(jié)果相 同,后來明
3、白了,于是有了下面的一個(gè)版本的結(jié)果。二義(版本 2,去掉了運(yùn)算結(jié)合性的定義)1|0&0 trueHI le falsee| |!ifalse!0|1 Ifalse!B&0 true這兩項(xiàng)本來應(yīng)該的結(jié)果與其相反,說明了二義文法如果不進(jìn)行運(yùn)算符優(yōu)先性、結(jié)合性的定義,則會(huì)造成預(yù)料不到的結(jié)果。?實(shí)驗(yàn)心得1.要深刻理解二義與非二義文法的內(nèi)涵與區(qū)別,才能更好地完成這個(gè)實(shí)驗(yàn);2.由于對(duì) yacc 了解的不夠好,導(dǎo)致用了一段時(shí)間才能看懂給的例子以及各部 分的寫法,這就告訴我們,不能夠忽視老師對(duì)于這些工具的用法的講解,每 一部分都要學(xué)的認(rèn)真仔細(xì);3.一開始是寫的非二義的文法,然后做出來后直接修改
4、成二義的,沒有去掉對(duì)于運(yùn)算結(jié)合性的定義,導(dǎo)致了兩者運(yùn)行結(jié)果不管怎么嘗試都沒有差別,后來 才考慮到這是因?yàn)槲覀兌x了優(yōu)先級(jí)與結(jié)合性,所以結(jié)果是一樣的,于是特 意為了嘗試如果沒有這些定義會(huì)如何,產(chǎn)生了二義版本2。?附:實(shí)驗(yàn)代碼文件:1%3include ec23.tab.bT4int yywrap(void)6 return 1;7勺%o1WS t2 digit 0-9inum digit+4 %0 return FALSE;inum return TRUE;)宀.return PLUS;*-* return MINUS;1計(jì)return TIMES;:7 return DIVIDE;T retu
5、rn LPAREN;T return RPAREN;& return AND;return OR;屮(return NOT;陰 Cn return ENTER;,printffVnLEXRROR! c=%sn yytext);二義:.y 文件(版本 2)%#include ytype.hinclude int yylexO:define YYSTYPE double嚴(yán)將日匸匸棧定義為 doubletsdefine YYDEBUG 1/* 允許 ci 色 bug 模式 */%token NUM TRUE FALSE ENTER LPAREN RPAREN NOT OR AND%left
6、PLUS MINUS%left TIMES DIVIDEfright UM1NUS%尸這樣寫 peg 可以 it 分析器每次讀入一行進(jìn)行分析下一行重新分析 e)(pVprog : prog expln| explnexpln : expr ENTER if($ = 0) printfCfalsenn); else printf(truenn);Jexpr : expr PLUS term $ = $1 + $3;| expr MINUS term $ = $1 - $3;| termrterm : term TIMES factor $ = $1 * $3;| term DIVIDE fact
7、or $ = $1/ $3;| factorfactor : LPAREN expr RPAREN $ = $2;| MINUS factor $ = - $2;I NUM$ = $1;| exprlexprl:| exprl OR exprl $ = ($1) ? 1: ($3);| exprl AND exprl $ = ($1)? ($3): 0; j NOTexprl $ = ($2) ?0:lI TRUE $ = 1;| FALSE $ 二 0;%int mainO yyparseQ;return 0;二義版本 1 的區(qū)別在于:%token NUM TRUE FALSE ENTER
8、LPAREN RPAREN%left OR%left AND%right NOT%left PLUS MINUS%left TIMES DIVIDE%right UM1NUS非二義:.y 文件%#inelude #include int yylexQ;#define YYSTYPIE double /*將刊仁【棧走義為 doub 龐類型*/#define YYDEBUG 1/* 允許 Wbug 模式 7%token NUM TRUE FALSE ENTER LPAREN RPAREN%left OR%left AND%right NOT%left PLUS MINUS%left TIMES D
9、IVIDE%right UMINUS%r弦樣寫 pog 可以讓分析器每次讀入一行逬行分析,下一行重新分析倘 p7prog : prog expln| explnexpln : expr ENTER iif($ = 0) prirrtfCfalsenn); else printf(BtruennB); expr : expr PLUSterm $ = $1 + $?;| expr MINUS term $ = $1 - $3;| termterm : term TIMES factor $ = $1 * $3;| term DIVIDE factor $ = $1/ $3; | factorfa
10、ctor : LPAREN expr RPAREN $ = $2;| MINUS factor $ = - $2;j NUM$ = $1;)|exprlexprl: exprl OR expr2 $ = ($1) ? 1: ($3); | expr2expr2 : expr2 AND expr3 $ = ($1)? ($3): 0; | exprSFexpr3 : NOT expr3 $ = ($2) ? 0 :1;| TRUE $ = 1;| FALSE ($ = 0;%int mainQt yyparseQ;return 0;Makefile 文件:ex23.exe: ex23.tab.o lex.yy.ogcc o ex23 ex23.tab.o lex.yy.o ly lex.yy.o: lex.yyx ex23.tab.hgcc -c lex.yy.cex23.tab.o: ex23.tab.cgcc c cx23.tab.clex.yy.c: ex23.lflex ex23.lex23.tab.c ex23.ybison -dv ex23.yex23.tab.h
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 分租合約租房合同范例
- 公司采購空調(diào)合同范例
- 2024城市智能交通信號(hào)控制系統(tǒng)集成合同
- 04年大數(shù)據(jù)分析服務(wù)合同
- 2024年國(guó)際貿(mào)易與環(huán)境保護(hù)合同
- 2024年創(chuàng)意產(chǎn)業(yè)展覽場(chǎng)地租賃合同
- 產(chǎn)廢企業(yè)聯(lián)合處置固廢合同
- 智慧礦山平臺(tái)系統(tǒng)技術(shù)協(xié)議
- 2024年8智能家居系統(tǒng)研發(fā)與銷售合同
- 2024年家具設(shè)計(jì)采購協(xié)議
- 2024新人教版初中英語單詞表匯總(七-九年級(jí))中考復(fù)習(xí)必背
- 郵政快遞員勞務(wù)合同范本
- 建筑工程質(zhì)量通病防治手冊(cè)樣本
- 2024軟件代碼自主率測(cè)評(píng)方法
- 小學(xué)一年級(jí)簡(jiǎn)單的語文閱讀理解(八篇)
- 2024年貴州省職業(yè)院校技能大賽中職組《導(dǎo)游服務(wù)》賽項(xiàng)備考試題庫(含答案)
- 2024年云南黃金礦業(yè)集團(tuán)股份有限公司招聘筆試參考題庫含答案解析
- 2024年1月浙江麗水市人才引進(jìn)面試題及參考答案
- (完整word版)結(jié)婚證(英文翻譯模板)
- 《圖書館設(shè)計(jì)案例》課件
- 2024年江蘇省鐵路集團(tuán)有限公司招聘筆試參考題庫附帶答案詳解
評(píng)論
0/150
提交評(píng)論