



下載本文檔
版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、編譯原理實驗報告項目名稱pl/0語言的擴充學院計算機學院專業(yè)班級 09軟件工程1班學號 3109006291 姓名姚振威指導教師李小妹2011年12 月28 日 實驗一:增加單詞 一、實驗目的與要求在分析理解一個教學型編譯程序(如pl/0)的基礎上,對其詞法分析程序。二、實驗內容增加單詞:保留字else,for,to,downto,return運算符+=,-=,+,-,&,|,!實驗平臺(1)計算機及操作系統(tǒng):pc機,windows7(2)程序設計語言:c+builder(3)集成環(huán)境:c+builder(4)教學型編譯程序:pl/0三、設計方法首先要擴展symbol,在此基礎上再進行其它細節(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關鍵字加到kword和將相應的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);因為保留字增加了5個,所以令const norw = 19;symbol由原來的33個值擴展為目前的42個值,symout也由原來的33個元素擴展為目前的42個元素.我用個symmax來記錄symbo
9、l值的個數(shù),所以,在與單詞個數(shù)有關的函數(shù)中,用“symmax”替代“33”,即除了error函數(shù)中可能出現(xiàn)的作為參數(shù)的“33”不被替換為“42”外,其余的“33”均用“symmax”來替換。如:s=(symset)malloc(sizeof(int)*symmax);for (i=0; isymbol擴展完畢。對運算符+=,- =,+,-詞法分析增添: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()修改和添加。設計前感覺很簡單,但當自己動手去做后才發(fā)現(xiàn)挺多要注意的細節(jié)的東西。 實驗二:修改單詞 一、實驗目的與要求在分析理解一個教學型編譯程序(如pl/0)的基礎上,進一步對詞法分析程序理解,擴充。二、實驗內容修改單詞:不等號# 改為 (neq)實驗平臺(1)計算機及操作系統(tǒng):pc機,windows7(2)程序設計語言:c+builder(3)集成環(huán)境:c+builder(4)教學型編譯程序:p
11、l/0三、設計方法只要修改getsym()函數(shù)。當編譯器檢測到當前字符為“”時,接著檢測下一個字符,如果是“”,則使sym=neq。代碼修改如下:if (ch=getch();if (ch=) sym=leq; getch(); elseif(ch=) sym=neq; getch(); elsesym=lss;同時ssym#=neq;用不上可刪除。四、測試 五、心得體會 有實驗一的基礎,本實驗相對來說很簡單,只要像實驗一一樣在getsym()里面修改一下就可以了。 實驗三::增加條件語句的else子句 一、實驗目的與要求在前兩個實驗的基礎上,實現(xiàn)else語句的語法語義擴充。二、實驗內容增加條
12、件語句的else子句,要求:寫出相關文法,語法圖,語義規(guī)則。實驗平臺(1)計算機及操作系統(tǒng):pc機,windows7(2)程序設計語言:c+builder(3)集成環(huán)境:c+builder(4)教學型編譯程序:pl/0三、設計方法該條件語法描述圖如下:只要在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í)行完真語句之后無條件跳轉co
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小學生編織手工課件圖片
- 廠房建設項目施工、設備安裝及調試合同
- 財務合規(guī)審核勞動合同
- 場監(jiān)督管理局行政執(zhí)法權委托執(zhí)行協(xié)議
- 電力與工業(yè)作業(yè)安全知識考核試卷及答案要點
- 2024-2025學年江蘇省宿遷市沭陽縣高一下學期期中歷史試題及答案
- 養(yǎng)小雞教學課件
- 危險化學品儲存環(huán)節(jié)事故統(tǒng)計分析考核試卷
- 農藥制劑穩(wěn)定性與生物安全性研究考核試卷
- 人力資源市場調研與企業(yè)人才梯隊建設的關系考核試卷
- 全國中小學生學籍信息管理系統(tǒng)學生基本信息采集表(2022修訂版)
- CJT 211-2005 聚合物基復合材料檢查井蓋
- 云南省曲靖市2023-2024學年八年級下學期期末語文試題
- DZ∕T 0212.4-2020 礦產地質勘查規(guī)范 鹽類 第4部分:深藏鹵水鹽類(正式版)
- JT-T 1495-2024 公路水運危險性較大工程專項施工方案編制審查規(guī)程
- 第一目擊者理論考試題題庫110題
- 借款利息確認書
- 蘇州交通報告
- 廣東省廣州市花都區(qū)2022-2023學年三年級下學期語文期末試卷
- 焊條烘烤操作規(guī)程
- 人工智能倫理導論- 課件 第3、4章 人工智能倫理、人工智能風險
評論
0/150
提交評論