版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年產(chǎn)00萬噸鋼鐵生產(chǎn)線建設(shè)合同
- 2024正式版車輛轉(zhuǎn)讓合同標(biāo)準(zhǔn)范本
- 土建承包合同范本2024年
- 2024幼兒園合作合同范文
- 上海買房合同書
- 2024個人店鋪出租合同范本
- 2024華碩電腦經(jīng)銷商訂貨單合同大客戶
- 商鋪合作經(jīng)營協(xié)議
- 2024臨時工合同協(xié)議書版臨時工合同范本
- 2024新媒體主播合同
- 部編版語文二年級上冊《語文園地三我喜歡的玩具》(教案)
- 軟件開發(fā)項(xiàng)目驗(yàn)收方案
- 崗位整合整治與人員優(yōu)化配置實(shí)施細(xì)則
- 康復(fù)治療技術(shù)的職業(yè)規(guī)劃課件
- 蜜雪冰城營銷案例分析總結(jié)
- 交換機(jī)CPU使用率過高的原因分析及探討
- 易制毒化學(xué)品安全管理崗位責(zé)任分工制度
- 住宿服務(wù)免責(zé)聲明
- 2023年醫(yī)療機(jī)構(gòu)消毒技術(shù)規(guī)范醫(yī)療機(jī)構(gòu)消毒技術(shù)規(guī)范
- MOOC 家庭與社區(qū)教育-南京師范大學(xué) 中國大學(xué)慕課答案
- 構(gòu)造法與數(shù)列課件高三數(shù)學(xué)二輪復(fù)習(xí)
評論
0/150
提交評論