




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
/目錄1. 緒論 11.1概述 11.2設(shè)計(jì)目的 11.3設(shè)計(jì)題目及要求 12.背景知識(shí) 22.1語(yǔ)法制導(dǎo)翻譯方法 22.2屬性文法 22.3幾種常見(jiàn)的中間語(yǔ)言 32.4四元式的簡(jiǎn)介 33.設(shè)計(jì)過(guò)程 43.1設(shè)計(jì)思路 43.2實(shí)現(xiàn) 54.上機(jī)調(diào)試運(yùn)行 54.1代碼調(diào)試界面及結(jié)果 64.2執(zhí)行及結(jié)果 65.注意事項(xiàng) 76.總結(jié) 8參考文獻(xiàn) 9附錄 10緒論1.1概述“編譯原理”是一門(mén)研究設(shè)計(jì)和構(gòu)造編譯程序原理課程,是計(jì)算機(jī)各專業(yè)的一門(mén)重要的專業(yè)課。編譯原理這門(mén)課程蘊(yùn)含著計(jì)算機(jī)學(xué)科中解決問(wèn)題的思路和解決問(wèn)題的方法,對(duì)應(yīng)用軟件和系統(tǒng)軟件的設(shè)計(jì)與開(kāi)發(fā)有一定的啟發(fā)和指導(dǎo)作用?!熬幾g原理”是一門(mén)實(shí)踐性很強(qiáng)的課程,要掌握這門(mén)課程中的思想,就必須要把所學(xué)到的知識(shí)應(yīng)用于實(shí)踐當(dāng)中。而課程設(shè)計(jì)是將理論與實(shí)踐相互聯(lián)系的一種重要方式。1.2設(shè)計(jì)目的課程設(shè)計(jì)是對(duì)學(xué)生的一種全面綜合素質(zhì)訓(xùn)練,是與課堂聽(tīng)講、自學(xué)和練習(xí)相輔相成的必不可少的一個(gè)教學(xué)環(huán)節(jié)。通常,設(shè)計(jì)題中的問(wèn)題比平時(shí)的練習(xí)題要復(fù)雜很多,但也更接近實(shí)際。編譯原理這門(mén)課程安排的課程設(shè)計(jì)的目的是旨在要求學(xué)生進(jìn)一步鞏固課堂上所學(xué)的理論知識(shí),深化理解和靈活掌握教學(xué)內(nèi)容,選擇合適的數(shù)據(jù)邏輯結(jié)構(gòu)解決問(wèn)題,然后編制算法和程序完成設(shè)計(jì)要求,從而進(jìn)一步培養(yǎng)學(xué)生獨(dú)立思考問(wèn)題、分析問(wèn)題、解決實(shí)際問(wèn)題的能力。1.3設(shè)計(jì)題目及要求基于這個(gè)學(xué)期所學(xué)習(xí)的內(nèi)容以及自己所掌握到的知識(shí),本次我所要設(shè)計(jì)的題目是賦值語(yǔ)句的四元式生成。要求:(1)設(shè)計(jì)語(yǔ)法制導(dǎo)生成賦值語(yǔ)句的四元式的算法;(2)編寫(xiě)代碼并上機(jī)調(diào)試運(yùn)行通過(guò);(3)輸入一賦值語(yǔ)句;(4)輸出相應(yīng)的表達(dá)式的四元式;2.背景知識(shí)2.1語(yǔ)法制導(dǎo)翻譯方法語(yǔ)法制導(dǎo)翻譯的方法就是為每個(gè)產(chǎn)生式配上一個(gè)翻譯子程序(稱語(yǔ)義動(dòng)作或語(yǔ)義子程序),并在語(yǔ)法分析的同時(shí)執(zhí)行這些子程序。語(yǔ)義動(dòng)作是為產(chǎn)生式賦予具體意義的手段,它一方面指出了一個(gè)產(chǎn)生式所產(chǎn)生的符號(hào)串的意義,另一方面又按照這種意義規(guī)定了生成某種中間代碼應(yīng)做哪些基本動(dòng)作。在語(yǔ)法分析的過(guò)程中,當(dāng)一個(gè)產(chǎn)生式獲得匹配(對(duì)于自頂向下分析)或用于規(guī)約(對(duì)于自底向上分析)時(shí),此產(chǎn)生式相應(yīng)的語(yǔ)義子程序就進(jìn)入工作,完成既定的翻譯任務(wù)。語(yǔ)法制導(dǎo)翻譯分為自底向上語(yǔ)法制導(dǎo)翻譯和自頂向下語(yǔ)法制導(dǎo)翻譯。2.2屬性文法屬性文法是編譯技術(shù)中用來(lái)說(shuō)明程序語(yǔ)言語(yǔ)義的工具,也是當(dāng)前實(shí)際應(yīng)用中比較流行的一種語(yǔ)義描述方法。屬性是指與文法符號(hào)的類型和值等有關(guān)的一些信息,在編譯中用屬性描述處理對(duì)象的特征。屬性文法是一種適用于定義語(yǔ)義的特殊文法,即在語(yǔ)言的文法中增加了屬性的文法,它將文法符號(hào)的語(yǔ)義以“屬性”的形式附加到各個(gè)文法的符號(hào)上,再根據(jù)產(chǎn)生式所包含的含義,給出每個(gè)文法符號(hào)屬性的求值規(guī)則,從而形成一種帶有語(yǔ)義屬性的上下文無(wú)關(guān)文法,即屬性文法。屬性文法也是一種翻譯文法,屬性有助于更詳細(xì)的指定文法中的代碼生成動(dòng)作。2.3幾種常見(jiàn)的中間語(yǔ)言(1)抽象語(yǔ)法樹(shù)(2)逆波蘭表示法(3)三地址代碼在編譯程序中,三地址代碼語(yǔ)言的具體實(shí)現(xiàn)通常有三種表示方法:四元式、三元式和間接三元式。2.4四元式的簡(jiǎn)介四元式是具有四個(gè)域的記錄(即結(jié)構(gòu)體)結(jié)構(gòu),這四個(gè)域?yàn)椋海╫p,arg1,arg2,result)其中,op為運(yùn)算符,arg1、arg2及result為指針,他們可指向有關(guān)名字在符號(hào)表中的登記項(xiàng)或一臨時(shí)變量(也可空缺)。常用的三地址語(yǔ)句與相應(yīng)的四元式對(duì)應(yīng)如下:X=yopz對(duì)應(yīng)(op,y,z,x)X=-y對(duì)應(yīng)(uminus,y,_,x)X=y對(duì)應(yīng)(=,y,_,x)Parx1對(duì)應(yīng)(par,x1,_,_)Callp對(duì)應(yīng)(call,_,_,p)GotoL對(duì)應(yīng)(j,_,_,L)IfxropygotoL對(duì)應(yīng)(jrop,x,y,L)注意規(guī)則:如果op是一個(gè)算術(shù)或邏輯運(yùn)算符,則result總是一個(gè)新引進(jìn)的臨時(shí)變量,它用來(lái)存放運(yùn)算結(jié)果。四元式出現(xiàn)的順序與表達(dá)式計(jì)值的順序是一致的,四元式之間的聯(lián)系是通過(guò)臨時(shí)變量實(shí)現(xiàn)的。四元式由于其表示更接近程序設(shè)計(jì)的習(xí)慣而成為一種普遍采用的中間代碼形式。3.設(shè)計(jì)過(guò)程3.1設(shè)計(jì)思路(1)定義部分:定義常量、變量、數(shù)據(jù)結(jié)構(gòu)。(2)初始化:設(shè)立算符優(yōu)先分析表、初始化變量空間(包括堆棧、結(jié)構(gòu)體、數(shù)組、臨時(shí)變量等(3)控制部分:從鍵盤(pán)輸入一個(gè)表達(dá)式符號(hào)串;(4)利用算符優(yōu)先分析算法進(jìn)行表達(dá)式處理:根據(jù)算符優(yōu)先分析表對(duì)表達(dá)式符號(hào)串進(jìn)行堆棧(或其他)操作,輸出分析結(jié)果,如果遇到錯(cuò)誤則顯示錯(cuò)誤信息。3.2實(shí)現(xiàn)本設(shè)計(jì)主要通過(guò)C語(yǔ)言來(lái)實(shí)現(xiàn)。C語(yǔ)言的語(yǔ)法結(jié)構(gòu)類型很多,從實(shí)習(xí)的角度可分為以下六類:明語(yǔ)句。如各種數(shù)據(jù)類型說(shuō)明(整型、實(shí)型、布爾型、字符型、復(fù)型、雙精度型、枚舉、子界、數(shù)組、集合、文件、記錄、指針等),各種數(shù)據(jù)空間特性說(shuō)明(如公用語(yǔ)句,共名語(yǔ)句,等價(jià)語(yǔ)句等),初值語(yǔ)句。實(shí)習(xí)重點(diǎn)是內(nèi)存空間的分配方法。序結(jié)構(gòu)語(yǔ)句。典型代表是各類表達(dá)式(如算術(shù)表達(dá)式、布爾表達(dá)式、字符表達(dá)式、位表達(dá))及相應(yīng)的賦值語(yǔ)句。實(shí)習(xí)重點(diǎn)是算術(shù)表達(dá)式的翻譯方法。制結(jié)構(gòu)語(yǔ)句。常見(jiàn)的有轉(zhuǎn)移語(yǔ)句、條件語(yǔ)句和各種分叉語(yǔ)句。實(shí)習(xí)重點(diǎn)是拉鏈返填的方法。子程序結(jié)構(gòu)。指子程序、函數(shù)、過(guò)程這類結(jié)構(gòu)的定義和調(diào)用。實(shí)習(xí)重點(diǎn)是啞實(shí)結(jié)合的方法。環(huán)結(jié)構(gòu)。如計(jì)數(shù)循環(huán)、條件循環(huán)等。實(shí)習(xí)重點(diǎn)是循環(huán)化簡(jiǎn)的方法。式語(yǔ)句。主要指輸入輸出語(yǔ)句的格式加工。4.上機(jī)調(diào)試運(yùn)行在VC++中c語(yǔ)言環(huán)境下調(diào)試運(yùn)行4.1代碼調(diào)試界面及結(jié)果4.2執(zhí)行及結(jié)果輸入一語(yǔ)句:a=((b+c)*2-3)/d對(duì)應(yīng)的輸出應(yīng)該為:(1)(+,b,c,A)(2)(*,2,A,B)(3)(-,3,B,C)(4)(/,C,d,D)(5)(=,C,_,a)圖如下所示:5.注意事項(xiàng)(1)表達(dá)式中允許使用運(yùn)算符(+-*/)、分割符(括號(hào))、字符i,結(jié)束符#;(2)如果遇到錯(cuò)誤的表達(dá)式,應(yīng)輸出錯(cuò)誤提示信息(該信息越詳細(xì)越好);(3)測(cè)試用的表達(dá)式事先放在文本文件中,一行存放一個(gè)表達(dá)式,同時(shí)以分號(hào)分割。同時(shí)將預(yù)期的輸出結(jié)果寫(xiě)在另一個(gè)文本文件中,以便和輸出進(jìn)行對(duì)照6.總結(jié)實(shí)踐是檢驗(yàn)真理的唯一標(biāo)準(zhǔn),當(dāng)然也是檢驗(yàn)學(xué)習(xí)成果的標(biāo)準(zhǔn)。在經(jīng)過(guò)一段時(shí)間的學(xué)習(xí)之后,我們需要了解自己的所學(xué)應(yīng)該如何應(yīng)用在實(shí)踐中,因?yàn)槿魏沃R(shí)都源于實(shí)踐,歸于實(shí)踐,所以要將所學(xué)的知識(shí)在實(shí)踐中來(lái)檢驗(yàn)。在做設(shè)計(jì)寫(xiě)論文期間,我遇到了好多問(wèn)題,比如:程序總是出現(xiàn)錯(cuò)誤,執(zhí)行不了等等。但是在周圍同學(xué)的幫助下,這些問(wèn)題都得到了解決。由于對(duì)知識(shí)的不了解,許多地方不是很懂,需要通過(guò)其他同學(xué)和老師的指點(diǎn)才能明白。感謝周圍同學(xué)的大力幫助還有老師的諄諄教導(dǎo),才使我完成此次的結(jié)課論文。通過(guò)這次的設(shè)計(jì),我得到了許多寶貴的經(jīng)驗(yàn)。經(jīng)驗(yàn)如下:思想上,學(xué)會(huì)了用堅(jiān)持不懈的精神去解決問(wèn)題,很多事情看起來(lái)很簡(jiǎn)單,但實(shí)際做起來(lái)會(huì)發(fā)現(xiàn)有許多很困難。中間有許多你想不到的東西。學(xué)習(xí)上,使自已在大學(xué)所以的知識(shí)在這次得到實(shí)踐,學(xué)到一些書(shū)本上無(wú)法學(xué)到的經(jīng)驗(yàn),對(duì)編譯原理有了進(jìn)一步的認(rèn)識(shí)。同時(shí),也明白了知識(shí)是需要實(shí)踐的,很多你能說(shuō)出來(lái)的東西,但是在實(shí)際應(yīng)用的時(shí)候,并不是那么順利。所以以后,我們要注重理論與實(shí)踐的結(jié)合。這次設(shè)計(jì)考察了我們這一學(xué)期的知識(shí),熟練的話可以很容易的做出來(lái),不熟練的需要翻書(shū)擦能得到解決,在這次四元式的設(shè)計(jì)中,充分應(yīng)用了老師上課所講的知識(shí),是我對(duì)此有了更深的了解。并且通過(guò)此次設(shè)計(jì),對(duì)之前掌握不太好的現(xiàn)在也能熟練運(yùn)用了。參考文獻(xiàn)【1】《編譯原理教程》(第四版)主編:胡元義【M】西安電子科技大學(xué)出版社【2】《編譯原理》作者:胡倫俊、徐蘭芳、駱婷【M】電子工業(yè)出版社附錄#include<stdio.h>#include<stdlib.h>#defineMAX100voidSET_Mul_Div(inti,intm);voidSET_Add_Sub(intj,intm);voidprint();intm=0;intcount=0;chartempvar='A';inttemp;charstring[MAX];//用于存放表達(dá)式intmain(){intp[MAX];charch;intc=-1,q=0;printf("請(qǐng)輸入賦值語(yǔ)句:\n");while((ch=getchar())!='\n'){string[m++]=ch;if(ch=='='||ch=='+'||ch=='-'||ch=='*'||ch=='/')count++;elseif(ch=='('){p[++c]=m-1;}elseif(ch==')'){q=m-1;SET_Mul_Div(p[c],q);//從左括號(hào)處理到又括號(hào)SET_Add_Sub(p[c],q);temp=(int)tempvar-1;tempvar=(char)temp;string[p[c]]=string[m-1]=tempvar;c--;temp=(int)tempvar+1;tempvar=(char)temp;}}/*****調(diào)用生成四元式的函數(shù)********/print();/*********判斷是否成功**********/if(count==0)printf("Successful!\n");elseprintf("Wrong!");printf("\n");system("pause");}voidSET_Mul_Div(inti,intm)//處理乘除運(yùn)算{for(i++;i<=m-1;i++){if(string[i]=='*'||string[i]=='/'){printf("(%c%c%c%c)\n",string[i],string[i-1],string[i+1],tempvar);string[i-1]=string[i]=string[i+1]=tempvar;count--;temp=(int)tempvar+1;tempvar=(char)temp;}}}voidSET_Add_Sub(intj,intm)//處理加減運(yùn)算{j++;for(;j<=m-1;j++){if(string[j]=='+'||string[j]=='-'){printf("(%c%c%c%c)\n",string[j],string[j-1],string[j+1],tempvar);string[j-1]=string[j]=string[j+1]=tempvar;count--;temp=(int)tempvar+1;tempvar=(char)temp;}}}/*打印*/voidprint(){inti;for(i=0;i<=m-1;i++)//處理乘除運(yùn)算{if(string[i]=='*'||string[i]=='/'){printf("(%c%c%c%c)\n",string[i],string[i-1],string[i+1],tempvar);string[i-1]=string[i]=string[i+1]=tempvar;count--;temp=(int)tempvar+1;tempvar=(char)temp;}}intj;for(j=0;j<=m-1;j++)//處理加減運(yùn)算{if(string[j]=='+'||string[j]=='-
溫馨提示
- 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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 課題開(kāi)題報(bào)告:當(dāng)代電視娛樂(lè)欄目的價(jià)值取向研究
- 課題開(kāi)題報(bào)告:大學(xué)生生涯發(fā)展與專業(yè)教育的融合研究:使命感與生命意義的視角
- 課題開(kāi)題報(bào)告:川方言口傳文化的傳承普及與鄉(xiāng)土記憶重建研究
- 課題開(kāi)題報(bào)告:成渝地區(qū)雙城經(jīng)濟(jì)圈高等教育協(xié)同發(fā)展研究
- 課題開(kāi)題報(bào)告:不同學(xué)科背景下的資助育人對(duì)策研究
- 家具定制售后體驗(yàn)提升協(xié)議
- 錳礦綜合開(kāi)發(fā)利用企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略研究報(bào)告
- 棉企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 毛絨墊子企業(yè)ESG實(shí)踐與創(chuàng)新戰(zhàn)略研究報(bào)告
- 提花吊帶企業(yè)數(shù)字化轉(zhuǎn)型與智慧升級(jí)戰(zhàn)略研究報(bào)告
- 胸椎小關(guān)節(jié)紊亂診斷與治療-課件
- 四川省德陽(yáng)市各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會(huì)明細(xì)及行政區(qū)劃代碼
- Unit1Developingideaslittlewhitelies課件-高中英語(yǔ)外研版必修第三冊(cè)
- Unit 2 Listening and speaking 課件-高中英語(yǔ)人教版(2019)選擇性必修第二冊(cè)
- (參考)食品加工操作流程圖
- 員工面試登記表
- 鋼棧橋施工方案型鋼
- PySide學(xué)習(xí)教程
- 事業(yè)單位綜合基礎(chǔ)知識(shí)考試題庫(kù) 綜合基礎(chǔ)知識(shí)考試題庫(kù).doc
- 譯林初中英語(yǔ)教材目錄
- 物業(yè)交付后工程維修工作機(jī)制
評(píng)論
0/150
提交評(píng)論