編譯原理結(jié)課論文_第1頁
編譯原理結(jié)課論文_第2頁
編譯原理結(jié)課論文_第3頁
編譯原理結(jié)課論文_第4頁
編譯原理結(jié)課論文_第5頁
已閱讀5頁,還剩10頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、目錄1.緒論11.1概述11.2設(shè)計目的11.3設(shè)計題目及要求12.背景知識22.1語法制導(dǎo)翻譯方法22.2屬性文法22.3幾種常見的中間語言32.4四元式的簡介33.設(shè)計過程43.1設(shè)計思路43.2實現(xiàn)54.上機調(diào)試運行54.1代碼調(diào)試界面及結(jié)果64.2執(zhí)行及結(jié)果65.注意事項76.總結(jié)8參考文獻9附錄101. 緒論1.1概述“編譯原理”是一門研究設(shè)計和構(gòu)造編譯程序原理課程,是計算機各專業(yè)的一門重要的專業(yè)課。編譯原理這門課程蘊含著計算機學(xué)科中解決問題的思路和解決問題的方法,對應(yīng)用軟件和系統(tǒng)軟件的設(shè)計與開發(fā)有一定的啟發(fā)和指導(dǎo)作用?!熬幾g原理”是一門實踐性很強的課程,要掌握這門課程中的思想,就必

2、須要把所學(xué)到的知識應(yīng)用于實踐當(dāng)中。而課程設(shè)計是將理論與實踐相互聯(lián)系的一種重要方式。1.2設(shè)計目的課程設(shè)計是對學(xué)生的一種全面綜合素質(zhì)訓(xùn)練,是與課堂聽講、自學(xué)和練習(xí)相輔相成的必不可少的一個教學(xué)環(huán)節(jié)。通常,設(shè)計題中的問題比平時的練習(xí)題要復(fù)雜很多,但也更接近實際。編譯原理這門課程安排的課程設(shè)計的目的是旨在要求學(xué)生進一步鞏固課堂上所學(xué)的理論知識,深化理解和靈活掌握教學(xué)內(nèi)容,選擇合適的數(shù)據(jù)邏輯結(jié)構(gòu)解決問題,然后編制算法和程序完成設(shè)計要求,從而進一步培養(yǎng)學(xué)生獨立思考問題、分析問題、解決實際問題的能力。1.3設(shè)計題目及要求基于這個學(xué)期所學(xué)習(xí)的內(nèi)容以及自己所掌握到的知識,本次我所要設(shè)計的題目是賦值語句的四元式生

3、成。要求: (1)設(shè)計語法制導(dǎo)生成賦值語句的四元式的算法;(2)編寫代碼并上機調(diào)試運行通過;(3)輸入一賦值語句;(4)輸出相應(yīng)的表達式的四元式;2.背景知識2.1語法制導(dǎo)翻譯方法 語法制導(dǎo)翻譯的方法就是為每個產(chǎn)生式配上一個翻譯子程序(稱語義動作或語義子程序),并在語法分析的同時執(zhí)行這些子程序。語義動作是為產(chǎn)生式賦予具體意義的手段,它一方面指出了一個產(chǎn)生式所產(chǎn)生的符號串的意義,另一方面又按照這種意義規(guī)定了生成某種中間代碼應(yīng)做哪些基本動作。在語法分析的過程中,當(dāng)一個產(chǎn)生式獲得匹配(對于自頂向下分析)或用于規(guī)約(對于自底向上分析)時,此產(chǎn)生式相應(yīng)的語義子程序就進入工作,完成既定的翻譯任務(wù)。語法制導(dǎo)

4、翻譯分為自底向上語法制導(dǎo)翻譯和自頂向下語法制導(dǎo)翻譯。2.2屬性文法屬性文法是編譯技術(shù)中用來說明程序語言語義的工具,也是當(dāng)前實際應(yīng)用中比較流行的一種語義描述方法。屬性是指與文法符號的類型和值等有關(guān)的一些信息,在編譯中用屬性描述處理對象的特征。屬性文法是一種適用于定義語義的特殊文法,即在語言的文法中增加了屬性的文法,它將文法符號的語義以“屬性”的形式附加到各個文法的符號上,再根據(jù)產(chǎn)生式所包含的含義,給出每個文法符號屬性的求值規(guī)則,從而形成一種帶有語義屬性的上下文無關(guān)文法,即屬性文法。屬性文法也是一種翻譯文法,屬性有助于更詳細的指定文法中的代碼生成動作。2.3幾種常見的中間語言 (1)抽象語法樹(2

5、)逆波蘭表示法(3)三地址代碼在編譯程序中,三地址代碼語言的具體實現(xiàn)通常有三種表示方法:四元式、三元式和間接三元式。2.4四元式的簡介四元式是具有四個域的記錄(即結(jié)構(gòu)體)結(jié)構(gòu),這四個域為:(op,arg1,arg2,result)其中,op為運算符,arg1、arg2及result為指針,他們可指向有關(guān)名字在符號表中的登記項或一臨時變量(也可空缺)。常用的三地址語句與相應(yīng)的四元式對應(yīng)如下:X=y op z 對應(yīng)(op,y,z,x)X=-y 對應(yīng)(uminus,y,_,x)X=y 對應(yīng)(=,y,_,x)Par x1 對應(yīng)(par,x1,_,_)Call p 對應(yīng)(call,_,_,p)Goto

6、L 對應(yīng)(j,_,_,L)If x rop y goto L 對應(yīng)(jrop,x,y,L)注意規(guī)則: 如果op是一個算術(shù)或邏輯運算符,則result總是一個新引進的臨時變量,它用來存放運算結(jié)果。四元式出現(xiàn)的順序與表達式計值的順序是一致的,四元式之間的聯(lián)系是通過臨時變量實現(xiàn)的。四元式由于其表示更接近程序設(shè)計的習(xí)慣而成為一種普遍采用的中間代碼形式。3.設(shè)計過程3.1設(shè)計思路(1)定義部分:定義常量、變量、數(shù)據(jù)結(jié)構(gòu)。 (2)初始化:設(shè)立算符優(yōu)先分析表、初始化變量空間(包括堆棧、結(jié)構(gòu)體、數(shù)組、臨時變量等(3)控制部分:從鍵盤輸入一個表達式符號串; (4)利用算符優(yōu)先分析算法進行表達式處理:根據(jù)算符優(yōu)先

7、分析表對表達式符號串進行堆棧(或其他)操作,輸出分析結(jié)果,如果遇到錯誤則顯示錯誤信息。3.2實現(xiàn)本設(shè)計主要通過C語言來實現(xiàn)。C語言的語法結(jié)構(gòu)類型很多,從實習(xí)的角度可分為以下六類:1 明語句。如各種數(shù)據(jù)類型說明(整型、實型、布爾型、字符型、復(fù)型、雙精度型、枚舉、子界、數(shù)組、集合、文件、記錄、指針等),各種數(shù)據(jù)空間特性說明(如公用語句,共名語句,等價語句等),初值語句。實習(xí)重點是內(nèi)存空間的分配方法。2 序結(jié)構(gòu)語句。典型代表是各類表達式(如算術(shù)表達式、布爾表達式、字符表達式、位表達)及相應(yīng)的賦值語句。實習(xí)重點是算術(shù)表達式的翻譯方法。3 制結(jié)構(gòu)語句。常見的有轉(zhuǎn)移語句、條件語句和各種分叉語句。實習(xí)重點是

8、拉鏈返填的方法。 4 子程序結(jié)構(gòu)。指子程序、函數(shù)、過程這類結(jié)構(gòu)的定義和調(diào)用。實習(xí)重點是啞實結(jié)合的方法。5 環(huán)結(jié)構(gòu)。如計數(shù)循環(huán)、條件循環(huán)等。實習(xí)重點是循環(huán)化簡的方法。6 式語句。主要指輸入輸出語句的格式加工。4.上機調(diào)試運行 在VC+中c語言環(huán)境下調(diào)試運行4.1代碼調(diào)試界面及結(jié)果4.2執(zhí)行及結(jié)果輸入一語句:a=(b+c)*2-3)/d對應(yīng)的輸出應(yīng)該為:(1)(+,b,c,A)(2)(*,2,A,B)(3)(-,3,B,C)(4)(/,C,d,D)(5)(=,C,_,a)圖如下所示:5.注意事項(1)表達式中允許使用運算符(+-*/)、分割符(括號)、字符i,結(jié)束符#; (2)如果遇到錯誤的表達式

9、,應(yīng)輸出錯誤提示信息(該信息越詳細越好); (3)測試用的表達式事先放在文本文件中,一行存放一個表達式,同時以分號分割。同時將預(yù)期的輸出結(jié)果寫在另一個文本文件中,以便和輸出進行對照6.總結(jié)實踐是檢驗真理的唯一標準,當(dāng)然也是檢驗學(xué)習(xí)成果的標準。在經(jīng)過一段時間的學(xué)習(xí)之后,我們需要了解自己的所學(xué)應(yīng)該如何應(yīng)用在實踐中,因為任何知識都源于實踐,歸于實踐,所以要將所學(xué)的知識在實踐中來檢驗。在做設(shè)計寫論文期間,我遇到了好多問題,比如:程序總是出現(xiàn)錯誤,執(zhí)行不了等等。但是在周圍同學(xué)的幫助下,這些問題都得到了解決。由于對知識的不了解,許多地方不是很懂,需要通過其他同學(xué)和老師的指點才能明白。感謝周圍同學(xué)的大力幫助

10、還有老師的諄諄教導(dǎo),才使我完成此次的結(jié)課論文。通過這次的設(shè)計,我得到了許多寶貴的經(jīng)驗。經(jīng)驗如下:思想上,學(xué)會了用堅持不懈的精神去解決問題,很多事情看起來很簡單,但實際做起來會發(fā)現(xiàn)有許多很困難。中間有許多你想不到的東西。學(xué)習(xí)上,使自已在大學(xué)所以的知識在這次得到實踐,學(xué)到一些書本上無法學(xué)到的經(jīng)驗,對編譯原理有了進一步的認識。同時,也明白了知識是需要實踐的,很多你能說出來的東西,但是在實際應(yīng)用的時候,并不是那么順利。所以以后,我們要注重理論與實踐的結(jié)合。 這次設(shè)計考察了我們這一學(xué)期的知識,熟練的話可以很容易的做出來,不熟練的需要翻書擦能得到解決,在這次四元式的設(shè)計中,充分應(yīng)用了老師上課所講的知識,是

11、我對此有了更深的了解。并且通過此次設(shè)計,對之前掌握不太好的現(xiàn)在也能熟練運用了。參考文獻【1】編譯原理教程(第四版)主編:胡元義【M】西安電子科技大學(xué)出版社【2】編譯原理作者:胡倫俊、徐蘭芳、駱婷【M】電子工業(yè)出版社附錄#include<stdio.h> #include<stdlib.h> #define MAX 100 void SET_Mul_Div(int i,int m); void SET_Add_Sub(int j,int m); void print(); int m=0;int count=0;char tempvar='A'int te

12、mp;char stringMAX; /用于存放表達式 int main() int pMAX; char ch; int c=-1,q=0; printf("請輸入賦值語句:n"); while(ch = getchar()!='n') stringm+=ch; if(ch='='|ch='+'|ch='-'|ch='*'|ch='/') count+; else if(ch='(') p+c=m-1; else if(ch=')') q=m-1

13、; SET_Mul_Div(pc,q); /從左括號處理到又括號 SET_Add_Sub(pc,q); temp=(int)tempvar-1; tempvar=(char)temp; stringpc=stringm-1=tempvar; c-; temp=(int)tempvar+1; tempvar=(char)temp; /*調(diào)用生成四元式的函數(shù)*/ print(); /*判斷是否成功*/ if(count=0) printf("Successful!n"); else printf("Wrong!"); printf("n"

14、); system("pause"); void SET_Mul_Div(int i,int m) /處理乘除運算 for(i+;i<=m-1;i+) if(stringi='*'|stringi='/') printf("(%c %c %c %c)n",stringi,stringi-1,stringi+1, tempvar); stringi-1=stringi=stringi+1=tempvar; count-; temp=(int)tempvar+1; tempvar=(char)temp; void SET

15、_Add_Sub(int j,int m) /處理加減運算 j+; for(;j<=m-1;j+) if(stringj='+'|stringj='-') printf("(%c %c %c %c)n",stringj,stringj-1,stringj+1,tempvar); stringj-1=stringj=stringj+1=tempvar; count-; temp=(int)tempvar+1; tempvar=(char)temp; /*打印*/ void print() int i; for(i=0;i<=m-1;

16、i+)/處理乘除運算 if(stringi='*'|stringi='/') printf("(%c %c %c %c)n",stringi,stringi-1,stringi+1,tempvar); stringi-1=stringi=stringi+1=tempvar; count-; temp=(int)tempvar+1; tempvar=(char)temp; int j; for(j=0;j<=m-1;j+)/處理加減運算 if(stringj='+'|stringj='-') printf("(%c %c %c %c)n",stringj,stringj-1,stringj+1,tempvar); stringj-1=stringj=stringj+1=

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論