語(yǔ)法制導(dǎo)把表達(dá)式翻譯成逆波蘭式.docx_第1頁(yè)
語(yǔ)法制導(dǎo)把表達(dá)式翻譯成逆波蘭式.docx_第2頁(yè)
語(yǔ)法制導(dǎo)把表達(dá)式翻譯成逆波蘭式.docx_第3頁(yè)
語(yǔ)法制導(dǎo)把表達(dá)式翻譯成逆波蘭式.docx_第4頁(yè)
語(yǔ)法制導(dǎo)把表達(dá)式翻譯成逆波蘭式.docx_第5頁(yè)
免費(fèi)預(yù)覽已結(jié)束,剩余1頁(yè)可下載查看

下載本文檔

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

文檔簡(jiǎn)介

1、實(shí)驗(yàn)報(bào)告成績(jī):指導(dǎo)教師審核(簽名) :年月日預(yù)習(xí)報(bào)告實(shí)驗(yàn)報(bào)告語(yǔ)法制導(dǎo)把表達(dá)式翻譯成逆波蘭式( 一) 實(shí)驗(yàn)?zāi)康倪M(jìn)一步掌握語(yǔ)法制導(dǎo)翻譯的概念,理解中間語(yǔ)言,設(shè)計(jì)出錯(cuò)處理程序方法,掌握把表達(dá)式翻譯成中間語(yǔ)言的算法。( 二) 實(shí)驗(yàn)內(nèi)容1從左到右掃描中綴表達(dá)式, 經(jīng)語(yǔ)法分析找出中綴表達(dá)式出現(xiàn)的錯(cuò)誤并給出錯(cuò)誤的具體位置和類型。一個(gè)運(yùn)算符棧存放暫時(shí)不能出現(xiàn)的運(yùn)算符,逆波蘭區(qū)存放逆波蘭表達(dá)式。2測(cè)試所編程序,給出正確和錯(cuò)誤的結(jié)果。( 三) 實(shí)驗(yàn)要求1學(xué)生課前要認(rèn)真閱讀實(shí)驗(yàn)指導(dǎo),理解實(shí)驗(yàn)內(nèi)容與相關(guān)理論知識(shí)的關(guān)系,并完成預(yù)習(xí)報(bào)告2用 C語(yǔ)言或其它高級(jí)語(yǔ)言編寫(xiě)程序3寫(xiě)出實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)報(bào)告成績(jī):指導(dǎo)教師審核(簽名) :

2、年月日預(yù)習(xí)報(bào)告實(shí)驗(yàn)報(bào)告語(yǔ)法制導(dǎo)把表達(dá)式翻譯成逆波蘭式( 一) 實(shí)驗(yàn)?zāi)康耐ㄟ^(guò)上機(jī)實(shí)習(xí)加深對(duì)語(yǔ)法指導(dǎo)翻譯原理的理解,掌握運(yùn)算符優(yōu)先權(quán)的算法,將語(yǔ)法分析所識(shí)別的表達(dá)式變換成中間代碼的翻譯方法。( 二) 實(shí)驗(yàn)內(nèi)容同預(yù)習(xí)報(bào)告( 三) 實(shí)驗(yàn)要求1. 學(xué)生課前要認(rèn)真閱讀實(shí)驗(yàn)指導(dǎo),理解實(shí)驗(yàn)內(nèi)容與相關(guān)理論知識(shí)的關(guān)系,并完成預(yù)習(xí)報(bào)告2用 C語(yǔ)言或其它高級(jí)語(yǔ)言編寫(xiě)程序3寫(xiě)出實(shí)驗(yàn)報(bào)告( 四) 實(shí)驗(yàn)設(shè)計(jì)思路1)表達(dá)式生成逆波蘭式的算法1、初始化送到運(yùn)算符棧。2、掃描左括號(hào)“(”,把送到運(yùn)算符棧。3、掃描到變量,把它送到逆波蘭區(qū)。4、掃描到運(yùn)算符( 1) 棧內(nèi)運(yùn)算符比較a. 棧內(nèi)運(yùn)算符 =棧外運(yùn)算符,把棧內(nèi)運(yùn)算符送到逆波

3、蘭區(qū)。b. 棧內(nèi)運(yùn)算符 棧外運(yùn)算符,把棧外運(yùn)算符入棧。( 2 )棧內(nèi)是把運(yùn)算符入棧。5、掃描右括號(hào)“) ”。( 1 )棧內(nèi)是運(yùn)算符,把棧內(nèi)運(yùn)算符送到逆波蘭區(qū)。( 2 )棧內(nèi)是則退棧,讀入下一個(gè)字符。6、掃描到 #(結(jié)束符)( 1 )棧內(nèi)是運(yùn)算符,把棧內(nèi)運(yùn)算符送到逆波蘭區(qū)。( 2 )棧內(nèi)是結(jié)束,否則繼續(xù)分析。( 五) 程序流程圖開(kāi)始初始化運(yùn)算符棧stack初始化逆波蘭區(qū)exp初始化表達(dá)式區(qū)str將表達(dá)式送入表達(dá)式區(qū)str 中從表達(dá)式區(qū)中取一個(gè)字符Y #NY操作數(shù)送操作數(shù)逆波蘭區(qū)NY(“(”入棧NYY運(yùn)算符棧內(nèi)運(yùn)算符棧外運(yùn)算符棧內(nèi)運(yùn)算符送逆波蘭區(qū)N棧外運(yùn)算符入棧)棧內(nèi)元素送逆波蘭區(qū)N棧內(nèi)元素送逆波

4、蘭區(qū)結(jié)束( 五) 程序代碼/ zty2.cpp :定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。/#include #include #defineLEN 50intmain()char stackLEN;char expLEN;char strLEN;char ch;inti=-1,j=0,top=0,flag=0;printf( 請(qǐng)輸入表達(dá)式以 #號(hào)結(jié)束 :n );scanf( %s,str);lab:i+;ch=stri;if (ch= # ) goto lab1;elseif (ch= 0 &ch=a&ch=z )expj=ch;j+;goto lab;elseif (ch= (|ch= )top+;s

5、tacktop=ch;goto lab;elseif (ch= + |ch= -)while (top!=0&stacktop!= ()expj=stacktop;top-;j+;top+;stacktop=ch;goto lab;elseif (ch= *|ch= /)while (stacktop=*|stacktop=/)expj=stacktop;top-;j+;top+;stacktop=ch;goto lab;elseif (ch= )while (stacktop!=()expj=stacktop;j+;top-;top-;goto lab;elseprintf( 出錯(cuò)字符是:

6、%cn ,stri);printf( 出錯(cuò)位置是: %dn,i+1);flag=1;lab1: while (!flag&top!=0)expj=stacktop;j+;top-;top=j;if (!flag)j=0;printf( 逆波蘭式為: n );while (jtop+1)printf(%c,expj);j+;return0;( 六) 程序運(yùn)行結(jié)果測(cè)試測(cè)試結(jié)如下圖,測(cè)試結(jié)果符合實(shí)驗(yàn)要求。表達(dá)式轉(zhuǎn)化為逆波蘭式的算法和對(duì)語(yǔ)法制導(dǎo)翻譯原理結(jié)果如下圖:輸入: a+(b*(c-de)+f)/m#時(shí),輸出正確的逆波蘭式。輸入: a+23*5#時(shí),輸出輸出錯(cuò)誤的位置和字符。( 七) 調(diào)試程序出現(xiàn)的問(wèn)題及解決的方法實(shí)驗(yàn)中編程基本沒(méi)什么問(wèn)題,數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)時(shí)曾做過(guò)逆波蘭式的實(shí)驗(yàn),所以比較能理解,但是對(duì)實(shí)驗(yàn)的理解沒(méi)有吃透,對(duì)語(yǔ)法制導(dǎo)翻譯的原理理解不太清楚,所以,碰到了一些難度。( 八) 實(shí)驗(yàn)心得體會(huì)通過(guò)本次試驗(yàn),掌握了表達(dá)式轉(zhuǎn)化為逆波蘭式的算法,并對(duì)語(yǔ)法制導(dǎo)翻譯原理有了進(jìn)一步的理解。讓我知道了我們編寫(xiě)程序的編譯器是怎么編譯程序和怎么工作的,也對(duì)編譯課的理論知識(shí)有了

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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)論