編譯原理結課論文_第1頁
編譯原理結課論文_第2頁
編譯原理結課論文_第3頁
編譯原理結課論文_第4頁
編譯原理結課論文_第5頁
已閱讀5頁,還剩8頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

..>目錄1.緒論2概述2設計目的2設計題目及要求22.背景知識3語法制導翻譯方法3屬性文法3幾種常見的中間語言3四元式的簡介33.設計過程3設計思路3實現34.上機調試運行3代碼調試界面及結果3執行及結果35.本卷須知36.總結3參考文獻3附錄3緒論概述"編譯原理〞是一門研究設計和構造編譯程序原理課程,是計算機各專業的一門重要的專業課。編譯原理這門課程蘊含著計算機學科中解決問題的思路和解決問題的方法,對應用軟件和系統軟件的設計與開發有一定的啟發和指導作用。"編譯原理〞是一門實踐性很強的課程,要掌握這門課程中的思想,就必須要把所學到的知識應用于實踐當中。而課程設計是將理論與實踐相互聯系的一種重要方式。設計目的課程設計是對學生的一種全面綜合素質訓練,是與課堂聽講、自學和練習相輔相成的必不可少的一個教學環節。通常,設計題中的問題比平時的練習題要復雜很多,但也更接近實際。編譯原理這門課程安排的課程設計的目的是旨在要求學生進一步穩固課堂上所學的理論知識,深化理解和靈活掌握教學內容,選擇適宜的數據邏輯構造解決問題,然后編制算法和程序完成設計要求,從而進一步培養學生獨立思考問題、分析問題、解決實際問題的能力。設計題目及要求基于這個學期所學習的內容以及自己所掌握到的知識,本次我所要設計的題目是賦值語句的四元式生成。要求:〔1〕設計語法制導生成賦值語句的四元式的算法;〔2〕編寫代碼并上機調試運行通過;〔3〕輸入一賦值語句;〔4〕輸出相應的表達式的四元式;2.背景知識語法制導翻譯方法語法制導翻譯的方法就是為每個產生式配上一個翻譯子程序〔稱語義動作或語義子程序〕,并在語法分析的同時執行這些子程序。語義動作是為產生式賦予具體意義的手段,它一方面指出了一個產生式所產生的符號串的意義,另一方面又按照這種意義規定了生成*種中間代碼應做哪些根本動作。在語法分析的過程中,當一個產生式獲得匹配〔對于自頂向下分析〕或用于規約〔對于自底向上分析〕時,此產生式相應的語義子程序就進入工作,完成既定的翻譯任務。語法制導翻譯分為自底向上語法制導翻譯和自頂向下語法制導翻譯。屬性文法屬性文法是編譯技術中用來說明程序語言語義的工具,也是當前實際應用中比較流行的一種語義描述方法。屬性是指與文法符號的類型和值等有關的一些信息,在編譯中用屬性描述處理對象的特征。屬性文法是一種適用于定義語義的特殊文法,即在語言的文法中增加了屬性的文法,它將文法符號的語義以"屬性〞的形式附加到各個文法的符號上,再根據產生式所包含的含義,給出每個文法符號屬性的求值規則,從而形成一種帶有語義屬性的上下文無關文法,即屬性文法。屬性文法也是一種翻譯文法,屬性有助于更詳細的指定文法中的代碼生成動作。幾種常見的中間語言〔1〕抽象語法樹〔2〕逆波蘭表示法〔3〕三地址代碼在編譯程序中,三地址代碼語言的具體實現通常有三種表示方法:四元式、三元式和間接三元式。四元式的簡介四元式是具有四個域的記錄〔即構造體〕構造,這四個域為:〔op,arg1,arg2,result〕其中,op為運算符,arg1、arg2及result為指針,他們可指向有關名字在符號表中的登記項或一臨時變量〔也可空缺〕。常用的三地址語句與相應的四元式對應如下:*=yopz對應〔op,y,z,*〕*=-y對應〔uminus,y,_,*〕*=y對應〔=,y,_,*〕Par*1對應〔par,*1,_,_〕Callp對應〔call,_,_,p〕GotoL對應〔j,_,_,L〕If*ropygotoL對應〔jrop,*,y,L〕注意規則:如果op是一個算術或邏輯運算符,則result總是一個新引進的臨時變量,它用來存放運算結果。四元式出現的順序與表達式計值的順序是一致的,四元式之間的聯系是通過臨時變量實現的。四元式由于其表示更接近程序設計的習慣而成為一種普遍采用的中間代碼形式。3.設計過程設計思路〔1〕定義局部:定義常量、變量、數據構造?!?〕初始化:設立算符優先分析表、初始化變量空間〔包括堆棧、構造體、數組、臨時變量等〔3〕控制局部:從鍵盤輸入一個表達式符號串;〔4〕利用算符優先分析算法進展表達式處理:根據算符優先分析表對表達式符號串進展堆?!不蚱渌巢僮鳎敵龇治鼋Y果,如果遇到錯誤則顯示錯誤信息。實現本設計主要通過C語言來實現。C語言的語法構造類型很多,從實習的角度可分為以下六類:明語句。如各種數據類型說明〔整型、實型、布爾型、字符型、復型、雙精度型、枚舉、子界、數組、集合、文件、記錄、指針等〕,各種數據空間特性說明〔如公用語句,共名語句,等價語句等〕,初值語句。實習重點是內存空間的分配方法。序構造語句。典型代表是各類表達式〔如算術表達式、布爾表達式、字符表達式、位表達〕及相應的賦值語句。實習重點是算術表達式的翻譯方法。制構造語句。常見的有轉移語句、條件語句和各種分叉語句。實習重點是拉鏈返填的方法。子程序構造。指子程序、函數、過程這類構造的定義和調用。實習重點是啞實結合的方法。環構造。如計數循環、條件循環等。實習重點是循環化簡的方法。式語句。主要指輸入輸出語句的格式加工。4.上機調試運行在VC++中c語言環境下調試運行代碼調試界面及結果執行及結果輸入一語句:a=((b+c)*2-3)/d對應的輸出應該為:〔1〕〔+,b,c,A〕〔2〕〔*,2,A,B〕〔3〕〔-,3,B,C〕〔4〕〔/,C,d,D〕〔5〕〔=,C,_,a〕圖如下所示:5.本卷須知〔1〕表達式中允許使用運算符〔+-*/〕、分割符〔括號〕、字符i,完畢符#;〔2〕如果遇到錯誤的表達式,應輸出錯誤提示信息〔該信息越詳細越好〕;〔3〕測試用的表達式事先放在文本文件中,一行存放一個表達式,同時以分號分割。同時將預期的輸出結果寫在另一個文本文件中,以便和輸出進展對照6.總結實踐是檢驗真理的唯一標準,當然也是檢驗學習成果的標準。在經過一段時間的學習之后,我們需要了解自己的所學應該如何應用在實踐中,因為任何知識都源于實踐,歸于實踐,所以要將所學的知識在實踐中來檢驗。在做設計寫論文期間,我遇到了好多問題,比方:程序總是出現錯誤,執行不了等等。但是在周圍同學的幫助下,這些問題都得到了解決。由于對知識的不了解,許多地方不是很懂,需要通過其他同學和教師的指點才能明白。感謝周圍同學的大力幫助還有教師的諄諄教導,才使我完成此次的結課論文。通過這次的設計,我得到了許多珍貴的經歷。經歷如下:思想上,學會了用堅持不懈的精神去解決問題,很多事情看起來很簡單,但實際做起來會發現有許多很困難。中間有許多你想不到的東西。學習上,使自已在大學所以的知識在這次得到實踐,學到一些書本上無法學到的經歷,對編譯原理有了進一步的認識。同時,也明白了知識是需要實踐的,很多你能說出來的東西,但是在實際應用的時候,并不是則順利。所以以后,我們要注重理論與實踐的結合。這次設計考察了我們這一學期的知識,熟練的話可以很容易的做出來,不熟練的需要翻書擦能得到解決,在這次四元式的設計中,充分應用了教師上課所講的知識,是我對此有了更深的了解。并且通過此次設計,對之前掌握不太好的現在也能熟練運用了。參考文獻【1】"編譯原理教程"〔第四版〕主編:胡元義【M】西安電子科技大學出版社【2】"編譯原理"胡倫俊、徐蘭芳、駱婷【M】電子工業出版社附錄#include<stdio.h>#include<stdlib.h>#defineMA*100voidSET_Mul_Div(inti,intm);voidSET_Add_Sub(intj,intm);voidprint();intm=0;intcount=0;chartempvar='A';inttemp;charstring[MA*];//用于存放表達式intmain(){intp[MA*];charch;intc=-1,q=0;printf("請輸入賦值語句:\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);//從左括號處理到又括號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;}}/*****調用生成四元式的函數********/print();/*********判斷是否成功**********/if(count==0)printf("Successful!\n");elseprintf("Wrong!");printf("\n");system("pause");}voidSET_Mul_Div(inti,intm)//處理乘除運算{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)//處理加減運算{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++)//處理乘除運算{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. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論