(完整word版)編譯原理實(shí)驗(yàn)報(bào)告5_第1頁
(完整word版)編譯原理實(shí)驗(yàn)報(bào)告5_第2頁
免費(fèi)預(yù)覽已結(jié)束,剩余7頁可下載查看

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論