編譯原理實(shí)驗(yàn)報(bào)告_第1頁
編譯原理實(shí)驗(yàn)報(bào)告_第2頁
編譯原理實(shí)驗(yàn)報(bào)告_第3頁
編譯原理實(shí)驗(yàn)報(bào)告_第4頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、編譯原理實(shí)驗(yàn)報(bào)告項(xiàng)目名稱pl/0語言的擴(kuò)充學(xué)院計(jì)算機(jī)學(xué)院專業(yè)班級 09軟件工程1班學(xué)號 3109006291 姓名姚振威指導(dǎo)教師李小妹2011年12 月28 日 實(shí)驗(yàn)一:增加單詞 一、實(shí)驗(yàn)?zāi)康呐c要求在分析理解一個教學(xué)型編譯程序(如pl/0)的基礎(chǔ)上,對其詞法分析程序。二、實(shí)驗(yàn)內(nèi)容增加單詞:保留字else,for,to,downto,return運(yùn)算符+=,-=,+,-,&,|,!實(shí)驗(yàn)平臺(1)計(jì)算機(jī)及操作系統(tǒng):pc機(jī),windows7(2)程序設(shè)計(jì)語言:c+builder(3)集成環(huán)境:c+builder(4)教學(xué)型編譯程序:pl/0三、設(shè)計(jì)方法首先要擴(kuò)展symbol,在此基礎(chǔ)上再進(jìn)行其它細(xì)節(jié)

2、的修改。要添加的symbol為:typedef enum nul, ident, number, plus, minus, times,slash, oddsym, eql, neq, lss, leq, gtr, geq,lparen, rparen, comma, semicolon, period,becomes, beginsym, endsym, ifsym, thensym,whilesym, writesym, readsym, dosym, callsym,constsym, varsym, procsym, progsym, , elsesym,forsym, tosym,

3、downtosym, returnsym, plusbecomes,minusbecomes, dplus, dminus,and,or,not symbol;char *symout = nul, ident, number, plus, minus, times, slash, oddsym, eql, neq, lss, leq, gtr, geq,lparen, rparen, comma, semicolon, period,becomes, beginsym, endsym, ifsym, thensym,whilesym, writesym, readsym, dosym, ca

4、llsym,constsym, varsym, procsym, progsym,elsesym,forsym, tosym, downtosym, returnsym,plusbecomes,minusbecomes, dplus, dminus ,and,or,not;其中紅斜體為新加入的symbol。再將elsesym,forsym, tosym, downtosym, returnsym, plusbecomes,minusbecomes, dplus, dminus關(guān)鍵字加到kword和將相應(yīng)的sym 加到wsym,按字母順序排列。以及修改neq后如下for (ch= ; chstr

5、cpy(kword 1,begin); strcpy(kword 2,call);strcpy(kword 3,const); strcpy(kword 4,do);strcpy(kword 5,downto); strcpy(kword 6,else);strcpy(kword 7,end); strcpy(kword 8,for);strcpy(kword 9,if); strcpy(kword10,odd);strcpy(kword11,procedure);strcpy(kword12,program);strcpy(kword13,read); strcpy(kword14,retu

6、rn); strcpy(kword15,then); strcpy(kword16,to); strcpy(kword17,var); strcpy(kword18,while);strcpy(kword19,write);wsym 1=beginsym; wsym 2=callsym;wsym 3=constsym; wsym 4=dosym;wsym 5=downtosym; wsym 6=elsesym;wsym 7=endsym; wsym 8=forsym;wsym 9=ifsym; wsym10=oddsym;wsym11=procsym; wsym12=progsym;wsym1

7、3=readsym; wsym14=returnsym;wsym15=thensym; wsym16=tosym;wsym17=varsym; wsym18=whilesym;wsym19=writesym;ssym+=plus; ssym-=minus; /用于sym=ssymch;ssym*=times; ssym/=slash;ssym(=lparen; ssym)=rparen;ssym=eql; ssym,=comma;ssym.=period; /ssym#=neq; /不等號#改為,#用不上刪除ssym;=semicolon;ssym&=and; ssym|=or; ssym!=

8、not;strcpy(mnemoniclit,lit); strcpy(mnemonicopr,opr);strcpy(mnemoniclod,lod); strcpy(mnemonicsto,sto);strcpy(mnemoniccal,cal); strcpy(mnemonicini,ini);strcpy(mnemonicjmp,jmp); strcpy(mnemonicjpc,jpc);因?yàn)楸A糇衷黾恿?個,所以令const norw = 19;symbol由原來的33個值擴(kuò)展為目前的42個值,symout也由原來的33個元素?cái)U(kuò)展為目前的42個元素.我用個symmax來記錄symbo

9、l值的個數(shù),所以,在與單詞個數(shù)有關(guān)的函數(shù)中,用“symmax”替代“33”,即除了error函數(shù)中可能出現(xiàn)的作為參數(shù)的“33”不被替換為“42”外,其余的“33”均用“symmax”來替換。如:s=(symset)malloc(sizeof(int)*symmax);for (i=0; isymbol擴(kuò)展完畢。對運(yùn)算符+=,- =,+,-詞法分析增添:if(ch=+) getch();if(ch=) sym=pluseq; getch(); elseif(ch=+) sym=plussf; getch(); else sym=plus; else if(ch=-) getch();if(ch=

10、) sym=minuseq; getch(); elseif(ch=-) sym=minussf; getch(); else sym=minus;四、心得體會熟悉了pl0的詞法分析,即getch()修改和添加。設(shè)計(jì)前感覺很簡單,但當(dāng)自己動手去做后才發(fā)現(xiàn)挺多要注意的細(xì)節(jié)的東西。 實(shí)驗(yàn)二:修改單詞 一、實(shí)驗(yàn)?zāi)康呐c要求在分析理解一個教學(xué)型編譯程序(如pl/0)的基礎(chǔ)上,進(jìn)一步對詞法分析程序理解,擴(kuò)充。二、實(shí)驗(yàn)內(nèi)容修改單詞:不等號# 改為 (neq)實(shí)驗(yàn)平臺(1)計(jì)算機(jī)及操作系統(tǒng):pc機(jī),windows7(2)程序設(shè)計(jì)語言:c+builder(3)集成環(huán)境:c+builder(4)教學(xué)型編譯程序:p

11、l/0三、設(shè)計(jì)方法只要修改getsym()函數(shù)。當(dāng)編譯器檢測到當(dāng)前字符為“”時,接著檢測下一個字符,如果是“”,則使sym=neq。代碼修改如下:if (ch=getch();if (ch=) sym=leq; getch(); elseif(ch=) sym=neq; getch(); elsesym=lss;同時ssym#=neq;用不上可刪除。四、測試 五、心得體會 有實(shí)驗(yàn)一的基礎(chǔ),本實(shí)驗(yàn)相對來說很簡單,只要像實(shí)驗(yàn)一一樣在getsym()里面修改一下就可以了。 實(shí)驗(yàn)三::增加條件語句的else子句 一、實(shí)驗(yàn)?zāi)康呐c要求在前兩個實(shí)驗(yàn)的基礎(chǔ)上,實(shí)現(xiàn)else語句的語法語義擴(kuò)充。二、實(shí)驗(yàn)內(nèi)容增加條

12、件語句的else子句,要求:寫出相關(guān)文法,語法圖,語義規(guī)則。實(shí)驗(yàn)平臺(1)計(jì)算機(jī)及操作系統(tǒng):pc機(jī),windows7(2)程序設(shè)計(jì)語言:c+builder(3)集成環(huán)境:c+builder(4)教學(xué)型編譯程序:pl/0三、設(shè)計(jì)方法該條件語法描述圖如下:只要在statement修改如下代碼:case ifsym:getsym();condition(symsetunion(symsetnew(thensym,dosym),fsys),lev,tx);if (sym=thensym) getsym();else error(16);cx1=cx; gen(jpc,0,0);sta tement(symsetunion(symsetnew(elsesym,dosym),fsys),lev,tx);codecx1.a=cx; /沒有else時候cx1的回填if (sym=elsesym)getsym();cx2=cx; gen(jmp,0,0);/執(zhí)行完真語句之后無條件跳轉(zhuǎn)co

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論