版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
條件語(yǔ)句的翻譯程序設(shè)計(jì)
(遞歸下降法、輸出四元式)1、 系統(tǒng)描述(問(wèn)題域描述)程序設(shè)計(jì)的功能利用遞歸下降法完成條件語(yǔ)句IF-THEN-ELSE的語(yǔ)法及語(yǔ)義分析程序。輸出的中間代碼選用四元式。程序開(kāi)發(fā)程序開(kāi)發(fā)工具Windows環(huán)境下的VisualC++條件控制的布爾式翻譯出現(xiàn)在條件語(yǔ)句ifEthenS1elseS2中的布爾表達(dá)式E,它的作用僅在于控制對(duì)S]和S2的選擇。作為轉(zhuǎn)移條件的布爾式E,我們可以賦予它兩種“出口”,一是“真”的出口,出向S];—是“假”出口,出向S2。1.3程序界面本程序是使用VisualC++語(yǔ)言編輯,由于布爾表達(dá)式關(guān)系多,使程序分析過(guò)程太多,本程序只實(shí)現(xiàn)很簡(jiǎn)單的布爾表達(dá)式的判斷,和簡(jiǎn)單的賦值語(yǔ)句處理。所以用戶界面簡(jiǎn)明。2、 文法及屬性文法的描述2.1、文法的描述終結(jié)符終結(jié)符VT二{if、<、:二、then、else、id}非終結(jié)符非終結(jié)符VN={S,E}開(kāi)始符號(hào)開(kāi)始符號(hào)S={S}產(chǎn)生式產(chǎn)生式如下:S->id=id|ifEthenSelseSE->id<id2.2、屬性文法的描述2.2.1條件語(yǔ)句的屬性文法產(chǎn)生式語(yǔ)義規(guī)則S->ifEthenSielseS2E.true:二newlabel;E.false:二newlabel;S].next:二S.next;S2.next:二S.next;S.code:二E.cod||gen(E.true )||Si.code||gen(‘goto'S.next)||gen(E.false )||S2.code2.2.2條件語(yǔ)句的翻譯在翻譯if-then-else語(yǔ)句S->ifEthenS1elseS2時(shí),布爾表達(dá)式E的代碼中有這樣的轉(zhuǎn)移指令:若E為真則轉(zhuǎn)移到Si的第一條指令,若E為假則轉(zhuǎn)移到S2的第一條指令。繼承屬性S.next給出了緊接著S的代碼之后將被執(zhí)行的三地址指令的標(biāo)號(hào)。在S1的代碼之后有一條明顯的轉(zhuǎn)移指令gotoS.next,但S2之后沒(méi)有。3、語(yǔ)法分析方法及中間代碼形式的描述本程序采用語(yǔ)法制導(dǎo)翻譯法,在語(yǔ)法分析的過(guò)程中輸出中間代碼。四元代碼采用結(jié)構(gòu)體存放,它是一個(gè)帶有五個(gè)域的記錄結(jié)構(gòu),這五個(gè)域分別稱為label、op、argi、arg2及result和阿address的聯(lián)合體。域label用于存放每一個(gè)四元式前面的標(biāo)號(hào),域op包括一個(gè)代表運(yùn)算符的內(nèi)部碼,是一個(gè)枚舉類型,argi代表第一個(gè)運(yùn)算符,arg2代表第二個(gè)運(yùn)算符,result或address代表輸出結(jié)果。4、簡(jiǎn)要分析與概要設(shè)計(jì)本程序?qū)υ~法分析進(jìn)行了簡(jiǎn)化,只能輸入IF,ELSE,THEN,〉,=,a-z且是從文件輸入。作為條件語(yǔ)句只能是id>id,作為賦值語(yǔ)句只能是id二id,其中id可以是從a到z的任意小寫字母。程序可以分成兩大塊。首先是詞法分析(由函數(shù)cifa()完成),將輸入轉(zhuǎn)換成一個(gè)個(gè)單詞存放在一個(gè)Token數(shù)組里面。Token結(jié)構(gòu)有兩個(gè)域組成,type代表單詞的種別編碼,是一個(gè)整數(shù),ch代表單詞的字符屬性(只對(duì)id和〉,二有效)。其次是語(yǔ)法分析和四元式輸出模塊,該模塊由兩個(gè)遞歸調(diào)用的函數(shù)E()和S()組成,分別對(duì)應(yīng)非終結(jié)符號(hào)E和S。函數(shù)S有兩個(gè)參數(shù),第一個(gè)參數(shù)lab代表S的第一個(gè)四元式前面的標(biāo)號(hào),第二個(gè)參數(shù)next代表S結(jié)束后的第一個(gè)四元式的標(biāo)號(hào),這兩個(gè)參數(shù)都由主函數(shù)傳入。函數(shù)E有3個(gè)參數(shù),第一個(gè)參數(shù)lab代表E的第一個(gè)四元式前面的標(biāo)號(hào),第二個(gè)參數(shù)etrue和第三個(gè)參數(shù)efalse分別代表E的真出口和假出口的標(biāo)號(hào)。主要算法如下:S(intlab,intnext){if(match(ID)){Chara,ba=ch;nexttoken()match(‘=')nexttoken()match(ID)b=ch;輸出四元式“l(fā)ab:=,b,-,a“輸出四元式“ J,-,-,next”nexttoken();}elseif(match(“IF”)){nexttoken()intetrue=newlabel();intefalse=newlabel();E(lab,etrue,efalse);if(match(THEN)){nexttoken()S(etrue,next);Match(“ELSE”)S(efalse,next);}ElseERROR();}elseERROR();}voidE(intlab,intetrue,intefalse){if(match(ID)){chara,b;a=ch;nexttoken()match(“>”)nexttoken()match(ID)b=cur.ch;
輸出四元式"lab:j>,a,b,etrue”輸出四元式”J,-,-,efalse”Nexttoken();}elseERROR("E()");}主函數(shù)調(diào)用S(-,10000)即可。10000表示最后一條語(yǔ)句的標(biāo)號(hào),-表示沒(méi)有標(biāo)號(hào)5、軟件的測(cè)試方法和測(cè)試結(jié)果程序運(yùn)行后提示輸入待處理的文件名:輸入文件名1.txt,文件1.txt類容如下:IFa>bTHENx=aELSEx=b這是一個(gè)不帶有嵌套結(jié)構(gòu)的簡(jiǎn)單if語(yǔ)句,輸出結(jié)果如下:命令提示符所使用的產(chǎn)生式:S->iFEthenSeIseSE->a>bS—>x=aG->x=b匹元式二J>,a,b,Ll&&TOC\o"1-5"\h\zJ LI91L100:= XJ LI000L101:= xJ -,L1&&&L1000:-,-,-L=、課程設(shè)計(jì)、條件語(yǔ)句-何松華>將文件1.txt的類容換成下面的較復(fù)雜的嵌套的IF語(yǔ)句:IFa>bTHEN
IFc>dTHENx=fELSEx=tELSEIFb>yTHENx=yELSEx=r再次運(yùn)行程序,輸出結(jié)果如下:齡令提示符所核用的產(chǎn)生式:E->lfEthenSelseSE->a>bE->lfEthenSelseSE->c>dE->x=fE->x=tE->ifEthen£&lseSE->b>yE->x=yE->x=r因元式;J>,a,b,LiaaJ-,L101J,-,-,L103:=,f,xJ,-,-,L1000:=,t,xJ,-,-,L1000L101:J>,b,y,L104J,-,-,L10511104:=,y,xJ,-,-,L1000L105:=,r,x6設(shè)計(jì)評(píng)價(jià)設(shè)計(jì)的不足此程序基本上實(shí)現(xiàn)了對(duì)條件語(yǔ)句的跳轉(zhuǎn)邏輯的翻譯功能,但是能力有限,只能處理if和else配套使用的情況。另外本程序的錯(cuò)誤處理做的不是很好,有待改善。收獲與體會(huì)編譯原理是一門理論性很強(qiáng)的課程,要想設(shè)計(jì)一個(gè)好的編譯
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度電商合同電子數(shù)據(jù)證據(jù)收集與保全操作規(guī)范3篇
- 2025-2031年中國(guó)網(wǎng)絡(luò)購(gòu)物行業(yè)市場(chǎng)深度研究及投資策略研究報(bào)告
- 2025年度智慧城市安防系統(tǒng)承包清工勞務(wù)合同4篇
- 2025年中國(guó)醫(yī)用空氣凈化器行業(yè)發(fā)展監(jiān)測(cè)及投資規(guī)劃建議報(bào)告
- 2025年度教育資源共享平臺(tái)建設(shè)與運(yùn)營(yíng)合同范本4篇
- 2025年度個(gè)人二手房交易合同模板物業(yè)費(fèi)繳納優(yōu)化版4篇
- 2025年貴州仁懷市供銷社股金公司招聘筆試參考題庫(kù)含答案解析
- 2025年江西有為生物技術(shù)有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年四川宇客旅游開(kāi)發(fā)有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年江西贛州市會(huì)昌縣發(fā)展集團(tuán)招聘筆試參考題庫(kù)含答案解析
- 《請(qǐng)柬及邀請(qǐng)函》課件
- 中小銀行上云趨勢(shì)研究分析報(bào)告
- 機(jī)電安裝工程安全培訓(xùn)
- 遼寧省普通高中2024-2025學(xué)年高一上學(xué)期12月聯(lián)合考試語(yǔ)文試題(含答案)
- 青海原子城的課程設(shè)計(jì)
- 常州大學(xué)《新媒體文案創(chuàng)作與傳播》2023-2024學(xué)年第一學(xué)期期末試卷
- 麻醉蘇醒期躁動(dòng)患者護(hù)理
- 英語(yǔ)雅思8000詞匯表
- 小學(xué)好詞好句好段摘抄(8篇)
- JT-T-1059.1-2016交通一卡通移動(dòng)支付技術(shù)規(guī)范第1部分:總則
- 《茶藝文化初探》(教學(xué)設(shè)計(jì))-六年級(jí)勞動(dòng)北師大版
評(píng)論
0/150
提交評(píng)論