欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      (黑龍江大學)編譯原理讀書工程(推薦閱讀)

      時間:2019-05-14 02:12:16下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《(黑龍江大學)編譯原理讀書工程》,但愿對你工作學習有幫助,當然你在寫寫幫文庫還可以找到更多《(黑龍江大學)編譯原理讀書工程》。

      第一篇:(黑龍江大學)編譯原理讀書工程

      黑龍江大學

      “編譯原理課程設(shè)計”讀書報告

      學院 年級 專業(yè) 學號 姓名 報告日期 成績

      計算機科學與技術(shù)學院 2011級

      計算機科學技術(shù)專業(yè) 20114872 李軍 2013.07.05

      黑龍江大學計算機科學技術(shù)學院

      一、開發(fā)環(huán)境簡介

      “編譯原理”課程是計算機專業(yè)中一門重要的專業(yè)理論課,是一門理論性和實踐性都很強的課程。為配合《編譯原理》課程的教學,培養(yǎng)學生的實際工作能力,加深對課堂教學內(nèi)容的理解,通過設(shè)計一個小型編譯器,更深刻地領(lǐng)會其基本概念、基本工作原理和實現(xiàn)方法,從而具有初步開發(fā)系統(tǒng)軟件和應用軟件的實際能力,特開設(shè)此課程設(shè)計。

      通過小型編譯器的設(shè)計與實現(xiàn),使學生系統(tǒng)地掌握編譯程序的總體結(jié)構(gòu)以及詞法分析程序、語法分析程序、語義分析程序、代碼生成程序;掌握結(jié)構(gòu)化設(shè)計方法;了解大型軟件的設(shè)計技術(shù)。開發(fā)環(huán)境:visual c++6.0 開發(fā)語言:c語言 開發(fā)人:李軍

      指導教師:付立平老師

      二、基本理論闡述、當前理論或?qū)嵺`應用現(xiàn)狀

      編譯器: 高級計算機語言便于人編寫,閱讀,維護。低階機器語言是計算機能直接解讀、運行的。編譯器將源程序(Source program)作為輸入,翻譯產(chǎn)生使用目標語言(Target language)的等價程序。源代碼一般為高級語言(High-level language),如Pascal、C、C++、C#、Java等,而目標語言則是匯編語言或目標機器的目標代碼(Object code),有時也稱作機器代碼(Machine code)。

      工作原理: 編譯是從源代碼(通常為高級語言)到能直接被計算機或虛擬機執(zhí)行的目標代碼(通常為低級語言或機器語言)的翻譯過程。然而,也存在從低級語言到高級語言的編譯器,這類編譯器中用來從由高級語言生成的低級語言代碼重新生成高級語言代碼的又被叫做反編譯器。也有從一種高級語言生成另一種高級語言的編譯器,或者生成一種需要進一步處理的的中間代碼的編譯器(又叫級聯(lián))。

      典型的編譯器輸出是由包含入口點的名字和地址,以及外部調(diào)用(到不在這個目標文件中的函數(shù)調(diào)用)的機器代碼所組成的目標文件。一組目標文件,不必是同一編譯器產(chǎn)生,但使用的編譯器必需采用同樣的輸出格式,可以鏈接在一起并生成可以由用戶直接執(zhí)行的EXE, 所以我們電腦上的文件都是經(jīng)過編譯后的文件。高級語言程序處理過程:

      三、小型編譯器系統(tǒng)架構(gòu)

      它是一個編譯器的架構(gòu).通俗的來說,它實現(xiàn)了一個庫,在這個庫上,可以很容易的實現(xiàn)不同的編譯相關(guān)的程序,當然,編譯器自然是其中最重要的一個.當然其他像編譯時間的代碼分析也是很容易實現(xiàn)的。構(gòu)造識別符號串的自動機、詞法分析程序的構(gòu)造、語法分析程序的構(gòu)造、中間語言的生成程序、編譯程序的代碼生成。

      四、小型編譯器主要功能模塊與實現(xiàn)

      (1)功能介紹 用戶提供源代碼,使用編譯器進行編譯,先用詞法分析程序構(gòu)造出符號表,然后利用語法分析程序分析橘子的語法,接著根據(jù)文法分析程序分法,在語法制導翻譯和中間代碼生成中,采用逆波蘭式生成四元式再轉(zhuǎn)化為匯編代碼。詞法分析:

      定義:

      詞法分析器的功能輸入源程序,按照構(gòu)詞規(guī)則分解成一系列單詞符號。單詞是語言中具有獨立意義的最小單位,包括關(guān)鍵字、標識符、運算符、界符和常量等(1)關(guān)鍵字 是由程序語言定義的具有固定意義的標識符。例如,Pascal 中的begin,end,if,while都是保留字。這些字通常不用作一般標識符。(2)標識符 用來表示各種名字,如變量名,數(shù)組名,過程名等等。(3)常數(shù) 常數(shù)的類型一般有整型、實型、布爾型、文字型等。(4)運算符 如+、-、*、/等等。(5)界符 如逗號、分號、括號、等等。輸出:

      詞法分析器所輸出單詞符號常常表示成如下的二元式:(單詞種別,單詞符號的屬性值)單詞種別通常用整數(shù)編碼。標識符一般統(tǒng)歸為一種。常數(shù)則宜按類型(整、實、布爾等)分種。關(guān)鍵字可將其全體視為一種。運算符可采用一符一種的方法。界符一般用一符一種的方法。對于每個單詞符號,除了給出了種別編碼之外,還應給出有關(guān)單詞符號的屬性信息。單詞符號的屬性是指單詞符號的特性或特征。示例:

      比如如下的代碼段: while(i>=j)i--經(jīng)詞法分析器處理后,它將被轉(zhuǎn)為如下的單詞符號序列: <(, _> <>=, _> <), _> <--, _> <;, _>

      詞法分析分析器作為一個獨立子程序

      詞法分析是編譯過程中的一個階段,在語法分析前進行。詞法分析作為一遍,可以簡化設(shè)計,改進編譯效率,增加編譯系統(tǒng)的可移植性。也可以和語法分析結(jié)合在一起作為一遍,由語法分析程序調(diào)用詞法分析程序來獲得當前單詞供語法分析使用。

      語法分析:

      對任何輸入串w試圖從文法的開始符號出發(fā),按與最左推導對應的順序,構(gòu)造w的語法分析樹

      如果構(gòu)造成功,則w為相應文法的一個句子;否則w就不是文法句子

      文法分析:

      (3)算法描述 ①詞法分析:

      根據(jù)輸入的句子從頭開始掃描,獨到一個字符后,判斷它的類型,并更改相應的狀態(tài),下一次讀入時,根據(jù)當前的狀態(tài)和輸入的字符的類型進行狀態(tài)的轉(zhuǎn)換和對次的添加。狀態(tài)機在一定程度上反映了此法的一些規(guī)則,如不能一數(shù)字開頭命名變量。

      全局變量:

      ch---字符變量:存放當前讀進的源程序字符 token---字符數(shù)組:存放構(gòu)成單詞符號的字符串 調(diào)用函數(shù)

      getch()---讀字符函數(shù):每調(diào)用一次從輸入緩沖區(qū)中讀進源程序的下一個字符放在ch中,并把讀字符指針指向下一個字符

      getbc()---讀空白字符:每次調(diào)用時,檢查ch中的字符是否為空白字符;若是空白字符,則反復調(diào)用getbc(),直至ch中進入一個非空白字符為止 concat()---字符串連接函數(shù):把當前ch中的字符與token中的字符串連接。letter(ch)---字母字符判定函數(shù):判定 ch 中的字符是否為字母,并返回true 或 false。

      degit(ch)---數(shù)字字符判定函數(shù):判定 ch 中的字符是否為數(shù)字,返回true 或 false。

      reserve()---關(guān)鍵字判斷函數(shù):對token中的字符串查關(guān)鍵字表;若它是一個關(guān)鍵字, 則回送它的編碼;否則,回送標識符的種別碼。

      語法分析:

      算符優(yōu)先文法的描述: 只規(guī)定算符之間的優(yōu)先關(guān)系,也就是說只考慮終結(jié)符之間的優(yōu)先關(guān)系。由于算富有先分析不考慮非終結(jié)符之間的優(yōu)先關(guān)系,在規(guī)約過程中只要找到最左素短語就可以規(guī)約。

      如給定一個文法G[S]:

      S->#E# E->E+T E->T T->T*F T->F F->P/F F->P P->(E)P->i

      利用算符優(yōu)先文法分析過程處理如下:

      1)計算給定文法中任意兩個終結(jié)符對(a,b)之間的優(yōu)先關(guān)系,首先計算兩個集合FIRSTVT(B)={b|B->b?或B->Cb?} LASTVT(B)={a|B->?a或B->?aC}

      語法制導翻譯和中間代碼生成: 定義語義函數(shù)和語義變量 語義函數(shù)emit 格式:emit(T=arg1 OP arg2)功能:生成一個三地址語句,并送到輸出文件中 語義函數(shù)newtemp 格式:newtemp()

      功能:產(chǎn)生一個新的臨時變量名字,如T1、T2等,并回送新的臨時變量名的整數(shù)碼

      注意:對臨時變量有兩種不同的處理方法(1)送到符號表(2)不進符號表,臨時變量單詞值部分用整數(shù)碼表示 語義過程Lookup 格式:Lookup(i.name)功能:審查i.name是否出現(xiàn)在符號表。如在,則返回其指針;否則,返回NULL 語義變量:E.place 存放非終結(jié)符E值的變量名在符號表中的入口地址或臨時變量名的整數(shù)碼(4)程序流程圖 詞法分析:

      語法分析: ‘#’’S’入棧,當前終結(jié)符送a上托棧頂符號放入X若產(chǎn)生式為X->x1x2x3..xn,按逆序入棧YNX inVT?YYX=a?讀入下一符號M[X,a]是產(chǎn)生式嗎NX=’#’?YN出錯出錯X=a?Y結(jié)束

      預測分析程序框圖

      文法分析:

      語法制導翻譯和中間代碼生成: 開始讀入字符輸入表達式進行掃描分詞判斷是字母還是數(shù)字還是運算符判斷語句是否合法運算符,判斷運算符的種類若為雙目運算符則入符號棧,單目則出棧,修改狀態(tài)位,若為(直接入棧,為)則一直出棧直到(為止根據(jù)變量在符號表中的位置來判斷它的屬性和值如果當前字符為 0-9的數(shù)字,則將其添加到結(jié)果(后綴表達式)串中。再次掃描輸入串如果當前我字符為 +,-,*,/中的任何一個,如果當前字符的優(yōu)先級高于棧頂運算符的優(yōu)先級,則直接 將其壓入棧中。當前字符的優(yōu)先級小于等于棧頂運算符的優(yōu)先級,則將棧中所有優(yōu)先級大于等于 當前運算符的運算符彈棧,并添加到結(jié)果串中,然后將當前運算符壓入棧中.結(jié)束(5)測試用例與實驗結(jié)果 02

      0

      311 04

      0

      5五、讀書工程心得總結(jié)

      這是我這學期收獲最大的一門課,在付老師的帶領(lǐng)下,我完整地了解了編譯器的整個流程和架構(gòu)!通過老師的幫助和自身的努力,以上便是我對這門課的答卷,我深知,自己能力有限,不可能達到完美!但至少我知道,我努力的方向,并且為此不懈奮斗者!希望這段程序,能成為我大學最美好的回憶!

      六、參考文獻

      1.張素琴,呂映芝等.編譯原理(第二版)[M].清華大學出版社,2012,11: 2.Kenneth C.Louden 著,馮博琴 馮嵐等譯。編譯原理及實踐[M].機械工業(yè)出版社。2009,04.

      第二篇:《編譯原理課程設(shè)計》讀書工程方案

      “編譯原理課程設(shè)計”讀書工程環(huán)節(jié)方案

      一、目的與要求

      “編譯原理”是計算機科學技術(shù)專業(yè)與軟件工程專業(yè)的必修課程,是一門理論性和實踐性都很強的課程。為了配合《編譯原理》課程的教學更全面的理解理論知識,提高實踐能力,計算機科學與技術(shù)專業(yè)以及軟件工程專業(yè)開設(shè)了實踐類必修課程-“編譯原理課程設(shè)計”。通過設(shè)計一個小型編譯器,更深刻地領(lǐng)會編譯程序的基本概念、基本原理和實現(xiàn)方法,培養(yǎng)學生的實際工作能力,加深對課堂教學內(nèi)容的理解,從而具有初步開發(fā)系統(tǒng)軟件和應用軟件的實際能力。將讀書環(huán)節(jié)融入教學內(nèi)容的設(shè)計中,做好理論教學、實踐教學、讀書環(huán)節(jié)三者有機結(jié)合,可使學生進一步了解課程理論知識,拓寬視野,加深對本專業(yè)相關(guān)課程的理解。在讀書工程環(huán)節(jié),學生可以通過閱讀相關(guān)的參考書目,對課程設(shè)計的五個主要部分:構(gòu)造識別符號串的自動機、詞法分析程序的構(gòu)造、語法分析程序的構(gòu)造、中間語言的生成程序、編譯程序的代碼生成程序中的任意一個題目進行深入的分析探討和總結(jié),并提交相應的讀書工程報告。

      二、考核方式

      通過提交讀書報告進行考核,該部分成績要占課程總成績的15%。字數(shù)不少于5000字。

      三、參考書目

      書目名稱:編譯原理(第2版)作 者:張素琴 呂映芝 出 版 社:清華大學出版社 出版時間:2005年02月

      內(nèi)容提要:本書介紹編譯系統(tǒng)的一般構(gòu)造原理、基本實現(xiàn)技術(shù)和一些自動構(gòu)造工具。主要由語言基礎(chǔ)知識、詞法分析、語法分析、中間代碼生成、代碼優(yōu)化、目標代碼生成、符號表的構(gòu)造和運行時存儲空間的組織等部分組成。

      書中在介紹編譯程序構(gòu)造基本原理的同時引入“PL/0語言的編譯程序”結(jié)構(gòu)及文本,還引入了LEX、YACC使用方法與實例。

      本書是高等院校計算機科學與技術(shù)專業(yè)的本科生教材,也可作為教師、研究生軟件工程技術(shù)人員的參考書。書目名稱:編譯原理(第2版)原書名: Compilers:Principles,Techniques,and Tools 原出版社: Pearson Education 作者: [美]Alfred V.Aho,Ravi Sethi,Jeffrey D.Ullman 譯者: 李建中 姜守旭 出版社:機械工業(yè)出版社 出版日期:2003 年9月

      內(nèi)容提要:本書深入討論了編譯器設(shè)計的重要主題,包括詞法分析、語法分析、語法制導分析、類型檢查、運行環(huán)境、中間代碼生成、代碼生成、代碼優(yōu)化等,并在最后兩章中討論了實現(xiàn)編譯器的一些編程問題和幾個編譯器實例,每章都提供了大量的練習和參考文獻。本書從介紹編譯的原理性概念開始,然后通過構(gòu)建一個簡單的一遍編譯器來逐一解釋這些概念。本書是編譯原理課程的經(jīng)典教材,作者曾多次使用本書的內(nèi)容在貝爾實驗室、哥倫比亞大學、普林斯頓大學和斯坦福大學向本科生和研究生講授初等及高等編譯課程。本書作者alfred v.a(chǎn)ho、ravi sethi和jeffrey d.ullman是世界著名的計算機 科學家,他們在計算機科學理論、數(shù)據(jù)庫等很多領(lǐng)域都做出了杰出貢獻。本書 是編譯領(lǐng)域無可替代的經(jīng)典著作,被廣大計算機專業(yè)人士譽為“龍書”。本書一 直被世界各地的著名高等院校和科研機構(gòu)(如貝爾實驗室、哥倫比亞大學、普 林斯頓大學和斯坦福大學等)廣泛用作本科生和研究生編譯原理與技術(shù)課程的 教材,本書對我國計算機教育界也具有重大影響。書中深入討論了編譯器設(shè)計的重要主題,包括詞法分析、語法分析、語法制 導分析、類型檢查、運行環(huán)境、中間代碼生成、代碼生成、代碼優(yōu)化等,并在 最后兩章中討論了實現(xiàn)編譯器的一些編程問題和幾個編譯器實例,而且每章都 提供了大量的練習和參考文獻。書目名稱:編譯原理及實踐

      作者:(美)Kenneth C.Louden著,馮博琴,馮嵐等譯 出版社:機械工業(yè)出版社 版次:2000年3月第1版

      內(nèi)容提要:本書結(jié)合對現(xiàn)代編譯器設(shè)計理論的詳細研究,完整描述了一個可運行的小規(guī)模語言編譯器(包括源代碼)。本書反映了作者的這樣一些觀點:不掌握理論就不會理解實際的編譯器設(shè)計;而對大學生來說,看不到理論在實際中的應用就不會真正地理解理論。把本書討論的概念統(tǒng)一起來,就是一個完整的可運行的編譯器,它使用每一章所討論的技術(shù)進行開發(fā),用C語言寫成。每章最后有大量的練習,使學生的注意力集中在編程問題上。書目名稱:編譯程序構(gòu)造原理和實現(xiàn)技術(shù) 作者:金成植

      出版社:高等教育出版社

      出版時間:2000年7月第1版 2004年4月第6次印刷

      內(nèi)容提要:本書經(jīng)教育部高等學校計算機教學指導委員會推薦,列入“九五”國家級重點教材建設(shè)項目和“面向21世紀課程教材”。

      本書是作者在其編著的《編譯原理與實現(xiàn)》基礎(chǔ)上編寫的,結(jié)合了多年的教學經(jīng)驗,是一本比較成功的教材。它主要以Pascal類語言為模型,介紹過程式語言的編譯程序構(gòu)造原理和實現(xiàn)技術(shù)。本書共分十章,主要包括詞法分析和語法分析的理論與技術(shù),語義分析原理與技術(shù),運行時的存儲分配原則,動作文法和屬性文法技術(shù),中間代碼生成、中間代碼優(yōu)化和目標代碼生成的原理與技術(shù)等。本書的特點是概念清晰,層次分明,循序漸進,整體性強,便于教學,并反映當前的實用技術(shù)。

      書目名稱:編譯原理(第2版)作者:(美)阿霍等著,趙建華等譯 出版社:機械工業(yè)出版社 出版時間:2009-1-1 內(nèi)容提要:本書是編譯領(lǐng)域無可替代的經(jīng)典著作,被廣大計算機專業(yè)人士譽為“龍書”。本書上一版自1986年出版以來,被世界各地的著名高等院校和研究機構(gòu)(包括美國哥倫比亞大學、斯坦福大學、哈佛大學、普林斯頓大學、貝爾實驗室)作為本科生和研究生的編譯原理課程的教材。該書對我國高等計算機教育領(lǐng)域也產(chǎn)生了重大影響。第2版對每一章都進行了全面的修訂,以反映自上一版出版20多年來軟件工程。程序設(shè)計語言和計算機體系結(jié)構(gòu)方面的發(fā)展對編譯技術(shù)的影響。本書全面介紹了編譯器的設(shè)計,深入地探討了編譯器設(shè)計方面的重要主題,包括詞法分析、語法分析、語法制導定義和語法制導翻譯、運行時刻環(huán)境、目標代碼生成、代碼優(yōu)化技術(shù)、并行性檢測以及過程間分析技術(shù),并強調(diào)編譯技術(shù)在軟件設(shè)計和開發(fā)中的廣泛應用。每章中都包含大量的習題和豐富的參考文獻。并在相關(guān)章節(jié)中給出大量的實例。書目名稱:編譯原理課程設(shè)計 作 者: 王雷、劉志成、周晶 出 版 社: 機械工業(yè)出版社 出版時間: 2005-3-1 內(nèi)容提要:編譯理論和技術(shù)作為計算機科學研究和工程應用的基礎(chǔ),受到了廣泛的重視。編譯原理也是大學計算機專業(yè)的必修課程。本書使用優(yōu)秀的開源java編譯器gjc作為編譯教學的基礎(chǔ)平臺,通過分析一個真正實用的現(xiàn)代編譯系統(tǒng),把編譯理論應用到實際的工程實踐中。全書不僅包括對編譯器源代碼的分析、對實例的講解,還在最后給出3個具體的課程設(shè)計實驗,介紹如何用書本上的編譯理論實現(xiàn)一個真正的編譯器。使用優(yōu)秀的開源編譯器作為教學平臺,系統(tǒng)規(guī)模不大,且源程序有著很好的注釋。通過詳盡的源代碼剖析和實例講解,循序漸進地啟發(fā)學生完成課程設(shè)計。結(jié)合實際應用的要求,使課程設(shè)計既覆蓋知識點,又接近工程實踐需要。是一本注重應用的實驗教程,因此可以和講授編譯理論的教材配合使用。編譯原理是大學計算機專業(yè)的必修課程。本書使用優(yōu)秀的開源java編譯器gjc作為編譯教學的基礎(chǔ)平臺,通過分析一個真正實用的現(xiàn)代編譯系統(tǒng),把編譯理論應用到實際的工程實踐中。全書不僅包括對編譯器源代碼的分析、對實例的講解,還在最后給出3個具體的課程設(shè)計實驗,介紹如何用書本上的編譯理論實現(xiàn)一個真正的編譯器。本書適合作為大專院校編譯原理課程設(shè)計的指導用書,相關(guān)的從業(yè)人員和研究人員也可以從中獲得有益的參考。

      書目名稱:《現(xiàn)代編譯程序?qū)崿F(xiàn)—Java語言》(第二版,英文影印版)原書名: Modern Compiler Implementation in Java,Second Edition 原出版社: Cambridge University Press 作 者:(美)A A.W.Appel等 出 版 社:電子工業(yè)出版社 出版時間:2004 年9月 內(nèi)容提要:,本書是一本編譯技術(shù)的教程,其特點是注重實現(xiàn)。從學習編譯器的結(jié)構(gòu)來掌握理論,并通過編程技術(shù)將編譯理論融合于實踐中。本書介紹了編譯器的各個方面,包括詞法分析,語法分析,抽象語法,語義行為,中間表示,通過樹匹配選擇指令,數(shù)據(jù)流分析,用色圖法實現(xiàn)寄存器分配,運行時間系統(tǒng)。本書還講述了通用的編譯器實現(xiàn)技術(shù),包括代碼生成、寄存器分配以及大多數(shù)書籍未涉及的函數(shù)式編程語言和面向?qū)ο笳Z言,并用實際的Java類詳細說明了編譯器各模塊間的接口。本書的第一部分——編譯器基礎(chǔ),適合作為第一學期編譯器設(shè)計的入門課程。本書的第二部分ˉ一高級課題,包括面向?qū)ο笳Z言和函數(shù)式語言的編譯技術(shù),無用信息收集,循環(huán)優(yōu)化,靜態(tài)單賦值表,指令調(diào)度以及高速緩沖存儲器的分級優(yōu)化,則適合作為第二學期的課程。本書第二版新增了關(guān)于Java和面向?qū)ο缶幊痰雀拍?,例如訪問模型。本書的一大特色是利用Java子集重新實現(xiàn)了一個編譯器項目。該項目包括前端和后端階段,因此學生可以在一個學期內(nèi)實現(xiàn)一個完整的編譯器。

      本書可作為高等院校編譯技術(shù)課程的教材、教師參考書以及編譯技術(shù)研究人員的參考資料。

      書目名稱:《程序設(shè)計語言編譯原理》(第3版)作 者: 陳火旺 劉春林 譚慶平趙克佳 劉越 出 版 社:國防工業(yè)出版社 出版時間:2000年02月

      內(nèi)容提要:本書是在陳火旺、錢家驊、孫永強三位教授編寫的《程序設(shè)計語言編譯原理》的基礎(chǔ)上,結(jié)合編譯技術(shù)的最新研究成果和作者多年的教學經(jīng)驗編寫而成的。

      本書比較全面、系統(tǒng)地介紹了編譯程序構(gòu)造的一般原理和基本實現(xiàn)方法,內(nèi)容包括詞法分析、語法分析、屬性文法與語法制導翻譯、語義分析與中間代碼產(chǎn)生、符號表與運行時存儲空間組織、優(yōu)化與目標代碼生成、并行編譯技術(shù)。與原教材相比,本書將編譯技術(shù)的最新發(fā)展,例如屬性文法、面向?qū)ο笳Z言的編譯技術(shù)、并行編譯技術(shù)、編譯程序自動構(gòu)造工具等內(nèi)容系統(tǒng)地融合到教材中;在語言背景方面,以C,Pascal替代原教材中的FORTRAN和Algol;并在一些重要的章節(jié)中增加了必要的例題,以幫助讀者理解和自學。本書可作為高等(理、工)院校計算機科學(或工程)專業(yè)的教材,或作為教師、研究生、高年級學生或軟件工程技術(shù)人員的參考書。書目名稱:編譯原理 技術(shù)與工具(第二版)(英文版)原書名: Compilers: Principles, Techniques, and Tools(2nd Edition)原出版社: Addison Wesley 作 者:(美)Alfred V.Aho Monica S.Lam Ravi Sethi Jeffrey D.Ullman 出 版 社:人民郵電出版社 出版時間:2008 年2月

      內(nèi)容提要:作為編譯器設(shè)計的教程,本書重點主要放在解決設(shè)計語言翻澤器過程中普遍需要面對的一些問題上,而并不考慮源語言或者目標機器。本書共 12章。第一章是一些關(guān)于學習動機的資料,同時也給出了一些關(guān)于計算機體系結(jié)構(gòu)和程序設(shè)計語言原理的背景知識。第二章開發(fā)了一個縮微的編譯器,并介紹了很多重要的概念,這些概念將在后面的各個章節(jié)中深入介紹。這個編譯器本身在附錄中給出。第三章討論了詞法分析、正則表達式、有窮狀態(tài)自動機和詞法分析器的生成工具,這些內(nèi)容是各種正文處理的基礎(chǔ)。第四章討論了主流的語法分析方法,包括自頂向下方法(遞歸下降法,ll技術(shù))和自底向上方法(lr技術(shù)和它的變體)。第五章介紹了語法制導定義和語法制導翻譯的基本思想。第六章介紹了如何使用第五章中的理論為一個典型的程序設(shè)計語言生成中間代碼。第七章討論了運行時刻環(huán)境,主要是運行時刻棧的管理和垃圾收集機制。第八章介紹了關(guān)于目標代碼生成的內(nèi)容,主要討論了基本塊的構(gòu)造,從表達式和基本塊生成代碼的方法,以及寄存器分配技術(shù)。第九章介紹了代碼優(yōu)化技術(shù),包括流圖、數(shù)據(jù)流分析框架以及求解這些框架的迭代算法。第十章討論了指令級優(yōu)化。該章的重點是從小段指令代碼中抽取并行性,并在那些可以同時做多件事情的單處理器上調(diào)度這些指令。第十一章講的是大規(guī)模并行的檢測和利用。這章的重點是數(shù)值計算代碼,這些代碼具有對多維數(shù)組進行遍歷的緊致循環(huán)。第十二章介紹的是關(guān)于過程間分析技術(shù)的內(nèi)容,討論了指針分析、別名和數(shù)據(jù)流分析,這些分析中都考慮了到達代碼中某個給定點時的過程調(diào)用序列。

      本書可作為高校計算機專業(yè)本科和研究生編譯原理的教科書,也可供從事計算機軟件開發(fā)的人員參考。

      四、讀書報告范例

      黑龍江大學

      “編譯原理課程設(shè)計”讀書報告

      學院 年級 專業(yè) 學號 姓名 報告日期 成績

      黑龍江大學計算機科學技術(shù)學院

      黑龍江大學軟件學院

      一、開發(fā)環(huán)境簡介

      二、基本理論闡述、當前理論或?qū)嵺`應用現(xiàn)狀

      三、小型編譯器系統(tǒng)架構(gòu)

      四、小型編譯器主要功能模塊與實現(xiàn)(1)功能介紹(2)相關(guān)理論(3)算法描述(4)程序流程圖

      (5)測試用例與實驗結(jié)果

      五、讀書工程心得總結(jié)

      六、參考文獻

      1.秦明,李波.計算機操作系統(tǒng)實驗與實踐:基于Windows與Linux[M].中國電力出版社,2004,4:第13-15頁,第36-54頁 2.

      第三篇:編譯原理 學習心得

      國際學院 0802 楊良燕 200819100227

      《編譯原理》課程學習心得

      《編譯原理》是計算機專業(yè)的一門重要課程,正如教材

      第一章的引論所述,“編譯程序是現(xiàn)代計算機系統(tǒng)的基本組成部分之一”?!耙粋€編譯程序就是一個語言翻譯程序,語言翻譯程序把一種語言(源語言)書寫的程序翻譯成另一種語言(目標語言)的等價程序”。

      通過這一學期的學習,我覺得編譯原理是一門理論性很強的課程,從文法和語言的概念到LL(1)文法和LR(0)文法的分析,幾乎都是對具體問題的抽象。因而,我們需要更多的時間來理解、掌握相關(guān)的知識,當然在這一過程中也存在很多問題,比如我們后期學習具體文法的分析方法時,對于文法的概念不夠清晰,影響了上課的效率,知道老師再次給我們講解了文法等基礎(chǔ)的知識點,我們才慢慢掌握后面所學的LL(1)文法等,也發(fā)現(xiàn)了知識點之間的關(guān)聯(lián)。此外,這門課程的課時被安排得很少,一周只有一次,這樣很不利于我們對這門重要課程的理解和掌握。但是我覺得我們很幸運,因為老師在有限的課程中盡量將知識點以比較容易接受的方式給我們講解,教我們用簡單的方法理解記憶不同的知識,對于我們提出的問題,無論課上或是課外,老師一直是不厭其煩,甚至利用課余時間為我們講解重要的難題。

      編譯原理這門課程不僅僅在于其本身的理論價值,更在于為我們解決問題提供的思維方式和方法。從LL(1)到LR(0),問題不斷被解決的同時,又有一個個新的問題提了出來。對計算機語言世界的知識積累,像滾雪球一樣越滾越大。這個逐漸遞進,逐漸解決問題的過程對我來說是收獲很大的。整個過程好像踏著前人研究編譯理論的路線,不斷感覺他們遇到的問題,更重要的是他們解決問題的思路。編譯原理的課程帶給我的不只是如何去編譯程序這樣的理論知識,相信更重要的是一種如何“自動計算”的思路。通過對相關(guān)編譯問題的具體分析,讓我體會最深的是一種“自動計算”的思想,同時完成編譯試驗后,更是感到了一種“自動計算”的快樂?!比欢颐靼鬃约弘m然對編譯有了一定的了解,我懂得了文法的分析,學會了構(gòu)造確定和非確定有限自動機,學會了LL(1)文法和LR(0)文法等,但是并沒有完全掌握,對于這些知識點的實質(zhì)性和其他方面,更是認識不深。作為一名學習計算機科學與技術(shù)的學生,我明白編譯原理是軟件工程的基礎(chǔ),課程的結(jié)束并不意味著學習的結(jié)束,只有通過以后的學習,才能更深入地了解編譯原理。

      第四篇:編譯原理實驗報告

      編譯原理實驗報告

      報告完成日期 2018.5.30

      一. 組內(nèi)分工與貢獻介紹

      二. 系統(tǒng)功能概述;

      我們使用了自動生成系統(tǒng)來完成我們的實驗內(nèi)容。我們設(shè)計的系統(tǒng)在完成了實驗基本要求的前提下,進行了一部分的擴展。增加了聲明變量類型、類型賦值判定和聲明的變量被引用時作用域的判斷。從而使得我們的實驗結(jié)果呈現(xiàn)的更加清晰和易懂。

      三. 分系統(tǒng)報告;

      一、詞法分析子系統(tǒng)

      詞法的正規(guī)式:

      標識符

      <字母>(<字母>|<數(shù)字字符>)* 十進制整數(shù)

      0 |(1|2|3|4|5|6|7|8|9)(0|1|2|3|4|5|6|7|8|9)* 八進制整數(shù) 0(1|2|3|4|5|6|7)(0|1|2|3|4|5|6|7)* 十六進制整數(shù) 0x(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)* 運算符和分隔符 +| * | / | > | < | = |(|)| <=|>=|==; 對于標識符和關(guān)鍵字: A5—〉 B5C5 B5—〉a | b |??| y | z C5—〉(a | b |??| y | z |0|1|2|3|4|5|6|7|8|9)C5|ε 綜上正規(guī)文法為: S—〉I1|I2|I3|A4|A5 I1—〉0|A1 A1—〉B1C1|ε C1—〉E1D1|ε D1—〉E1C1|ε

      E1—〉0|1|2|3|4|5|6|7|8|9 B1—〉1|2|3|4|5|6|7|8|9 I2—〉0A2 A2—〉0|B2 B2—〉C2D2 D2—〉F2E2|ε E2—〉F2D2|ε

      C2—〉1|2|3|4|5|6|7 F2—〉0|1|2|3|4|5|6|7 I3—〉0xA3 A3—〉B3C3 B3—〉0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f C3—〉(0|1|2|3|4|5|6|7|8|9|a|b|c|d|e|f)|C3|ε

      A4—〉+ |-| * | / | > | < | = |(|)| <=|>=|==; A5—〉 B5C5 B5—〉a | b |??| y | z C5—〉(a | b |??| y | z |0|1|2|3|4|5|6|7|8|9)C5|ε

      狀態(tài)圖

      流程圖:

      詞法分析程序的主要數(shù)據(jù)結(jié)構(gòu)與算法

      考慮到報告的整潔性和整體觀感,此處我們僅展示主要的程序代碼和算法,具體的全部代碼將在整體的壓縮包中一并呈現(xiàn)

      另外我們考慮到后續(xù)實驗中,如果在bison語法樹生成的時候推不出目標的產(chǎn)生式時,我們設(shè)計了報錯提示,在這個詞的位置出現(xiàn)錯誤提示,將記錄切割出來的詞在code.txt中保存,并記錄他們的位置。

      以下是我們的主要代碼:

      進制的識別:

      結(jié)果展示:

      二、語法分析子系統(tǒng)

      根據(jù)選擇的語法分析方法進行描述

      我們使用了遞歸子程序發(fā),并且對原有的產(chǎn)生式進行了改寫,改寫后的結(jié)果如下: P→LP1|L L→S

      S→id=E|{P}|if C then S | if C then S

      1else S2 | while C do S1 C→E1C’

      C’→>E2|

      E→int8E’| int10E’| int16E’| idE’|T E’→+T|-T||+TE’|-TE’

      T→int8T’| int10T’| int16T’| idT’|F T’→*F|/F|*FT’|/FT’

      F→(E)|int8|int10|int16|id

      簡化的語法圖: S的語法圖:

      C的語法圖:

      E的語法圖:

      T的語法圖:

      F的語法圖:

      流程圖:

      語法分析子系統(tǒng)的主要數(shù)據(jù)結(jié)構(gòu)與算法

      我們采用了自動生成技術(shù),同樣在這里也是展示主要的核心功能代碼,全部的代碼展示在壓縮包中:

      我們在設(shè)計時,實現(xiàn)了產(chǎn)生式對應的字符串同時標識產(chǎn)生式定義的int值 輔助程序:

      生成語法樹的程序:

      1.樹節(jié)點:

      2.創(chuàng)建新節(jié)點

      3.創(chuàng)建實數(shù)類型新節(jié)點

      4.創(chuàng)建標識符類型新節(jié)點

      5.輸出語法樹 三、三地址碼生成器

      算法的基本思想:

      我們增加了聲明變量類型、類型賦值判定和聲明的變量被引用時作用域的判斷。從而使得我們的實驗結(jié)果呈現(xiàn)的更加清晰和易懂。

      在報錯的時候,我們會呈現(xiàn)類型、作用域和賦值三種的問題的報錯信息。

      流程圖:

      算法展示:

      四、實驗體會

      這次實驗其實總的來說是讓我們更加清晰的理解到了我們所學的內(nèi)容。有時候我們上課聽講,課下復習寫作業(yè)的時候,其實看似掌握了所學內(nèi)容,但實際上并沒有親身體會的操作很難讓我們深刻的理解其中的相關(guān)意義。通過這次實驗,我們能夠從根源處了解到了我們所學的內(nèi)容,并且基于我們理解之后的輸出。比如詞法分析不能采用空格來區(qū)分單詞,因為存在加減乘除等運算符和分隔符,使用空格來區(qū)分可能會造成錯誤的分解。又比如我們再在程序設(shè)計中,常常體會到效率的重要性。影響詞法分析的效率的主要因素是各個狀態(tài)的分支如何規(guī)劃。如果每個進來的單詞都能在最短的時間和最少的匹配次數(shù)內(nèi)找到其入口,則效率將得到很大程度上的提高。所以由此我們產(chǎn)生了聲明變量類型、賦值和作用域的想法,將其放在最后來進行判斷,這樣可以提高整體的執(zhí)行效率。

      另外,這次小組成員彼此不在一個班級,這樣從某一方面來說,也加強了我們互相快速熟識并團結(jié)協(xié)作的能力,有了這種體驗,我想我們在今后的生活中,面對這種情況的時候,將會變得更加有經(jīng)驗。

      五、源程序

      詞法分析器: 輸入結(jié)果:

      輸出結(jié)果:

      語義分析結(jié)果:

      輸入:

      第二組數(shù)據(jù)的輸入:

      輸出:

      三地址碼的輸入:

      第二組數(shù)據(jù)的輸入:

      輸出:

      第五篇:編譯原理課程設(shè)計

      課 程 設(shè) 計 報 告

      設(shè)計題目:一個簡單文法的編譯器前端的設(shè)計與實現(xiàn)

      級: 計算機1206 組長學號:201239 組長姓名:閆智宣 指導教師:李曉華 設(shè)計時間:2014年12月

      [在此處鍵入]

      設(shè)計分工

      組長學號及姓名: 20123974

      閆智宣

      分工:

      語法分析,四元式生成,目標代碼優(yōu)化及生成 組員1學號及姓名:20123977

      廖峭 分工:

      詞法分析,錯誤處理 組員2學號及姓名:20123959

      郭天龍

      分工:

      符號表生成,語義動作插入,操作界面[在此處鍵入]

      摘要

      編譯原理課程設(shè)計是通過C語言編譯器相關(guān)子系統(tǒng)的設(shè)計,進一步加深對編譯器構(gòu)造的理解;第一部分詞法分析,設(shè)計各單詞的狀態(tài)轉(zhuǎn)換圖,并為不同的單詞設(shè)計種別碼,制作掃描器識別一個個單詞,返回值為識別碼的序號,返回Token序列。將詞法分析器設(shè)計成供語法分析器調(diào)用的子程序。詞法分析器具備預處理功能。將不翻譯的注釋等符號先濾掉,只保留要翻譯的符號串,即要求設(shè)計一個供詞法分析調(diào)用的預處理子程序;第二部分,語法分析,用遞歸下降法,實現(xiàn)對表達式、各種說明語句、控制語句進行語法分析。若語法正確,則用語法制導翻譯法進行語義翻譯;生成并打印出語法樹;若語法錯誤,要求指出出錯性質(zhì)和出錯位置(行號)。

      我們還做了附加功能,即編譯后端,有中間代碼優(yōu)化,生成目標代碼匯編語言。通過此次課程設(shè)計,提高了我們的獨立分析問題、解決問題的能力,以及系統(tǒng)軟件設(shè)計的能力; 提高程序設(shè)計能力、程序調(diào)試能力,團結(jié)協(xié)作能力

      關(guān)鍵詞:詞法分析,語法分析,四元式生成,錯誤處理,符號表生成,語義動作插入,中間代碼優(yōu)化,生成目標代碼 [在此處鍵入]

      目錄

      摘要

      1.概述

      2.課程設(shè)計任務及要求

      2.1 設(shè)計任務

      2.2 設(shè)計要求

      3.算法及數(shù)據(jù)結(jié)構(gòu)

      3.1算法的總體思想(流程)

      3.2 詞法分析模塊

      3.2.1 功能

      3.2.2 數(shù)據(jù)結(jié)構(gòu)

      3.2.3 算法

      3.3 語法分析模塊

      3.3.1功能

      3.3.2 數(shù)據(jù)結(jié)構(gòu)

      3.3.3算法

      3.4 符號表模塊

      3.4.1功能

      3.4.2 數(shù)據(jù)結(jié)構(gòu)

      3.4.3算法

      3.5 四元式模塊

      3.5.1功能

      [在此處鍵入]

      3.5.2 數(shù)據(jù)結(jié)構(gòu)

      3.5.3算法

      3.6 語義動作分析模塊

      3.6.1功能 3.6.2 數(shù)據(jù)結(jié)構(gòu)

      3.6.3算法

      3.7 錯誤處理模塊

      3.7.1功能

      3.7.2 數(shù)據(jù)結(jié)構(gòu)

      3.7.3算法

      3.8 目標代碼模塊

      3.8.1功能

      3.8.2 數(shù)據(jù)結(jié)構(gòu)

      3.8.3算法

      4.程序設(shè)計與實現(xiàn)

      4.1 程序流程圖

      4.2 程序說明

      4.3 實驗結(jié)果

      5.結(jié)論 6.參考文獻。7.收獲、體會和建議。

      [在此處鍵入]

      1.概述

      編譯器是將C語言翻譯為匯編語言代碼的計算機程序。編譯器將源程序(source language)編寫的程序作為輸入,翻譯產(chǎn)生目標語言(target language)機器代碼的等價程序。通常地,源程序為高級語言(high-level language),C語言程序,而目標則是 機器語言的目標代碼(object code),也就是可以在計算機硬件中運行的機器代碼軟件程序。這一過程可以表示為:

      源程序→編譯器 →目標機器代碼程序

      2.課程設(shè)計任務及要求

      2.1設(shè)計任務

      學生在學習《編譯原理》課程過程中,結(jié)合各章節(jié)的構(gòu)造編譯程序的基本理論,要求用C#語言描述及上機調(diào)試,實現(xiàn)一個 C編譯程序(包括詞法分析,語法分析等重要子程序),使學生將理論與實際應用結(jié)合起來,受到軟件設(shè)計等開發(fā)過程的全面訓練,從而提高學生軟件開發(fā)的能力。

      2.2設(shè)計要求 要求:

      (1)設(shè)計詞法分析器

      設(shè)計各單詞的狀態(tài)轉(zhuǎn)換圖,并為不同的單詞設(shè)計種別碼。將詞法分析器設(shè)計成供語法分析器調(diào)用的子程序。功能包括:

      a.具備預處理功能。將不翻譯的注釋等符號先濾掉,只保留要翻譯的符號串,即要求設(shè)計一個供詞法分析調(diào)用的預處理子程序;

      b.能夠拼出語言中的各個單詞; [在此處鍵入]

      c.返回(種別碼,屬性值,行號)。

      (2)語法分析

      要求用學習過的自底向上或自頂向下的分析方法等,實現(xiàn)對表達式、各種說明語句、控制語句進行語法分析。若語法正確,則用語法制導翻譯法進行語義翻譯;生成并打印出語法樹;若語法錯誤,要求指出出錯性質(zhì)和出錯位置(行號)。

      3.算法及數(shù)據(jù)結(jié)構(gòu)

      3.1算法的總體思想(流程)

      本節(jié)主要分析程序的代碼結(jié)構(gòu)和代碼工程文件的劃分。(程序由幾個類組成: Token類和Variable類SymbolTable類ObjectCode類Lexical類Grammar類Four_Yuan類Action類ErrorItem類,分別為詞法分析和語法分析類。工程分為幾個文件:Form1.cs,Token.cs,Variable.cs,SymbolTable.cs,ObjectCode.cs,Lexical.cs,Grammar.cs,Four_Yuan,cs,Action.cs,ErrorItem.cs分別對應Token類和Variable類SymbolTable類ObjectCode類Lexical類Grammar類Four_Yuan類Action類ErrorItem類的聲明和實現(xiàn)文件)。本程序采用C#語言以面向?qū)ο蟮乃枷刖帉?,程序分為幾部分:詞法分析(Lexical),語法分析(Grammer),目標代碼生成(ObjectCode)。Lexical類主要的工作是詞法分析獲取Token。Grammer類的主要工作是根據(jù)Lexical類詞法分析之后的Token進行語法分析,生成語法樹,最后并輸出語法樹。在處理過程中,Token類的對象作為Lexical類的一個成員變量,配合Grammer類進行語法分析。

      工程文件總體上是按照九個類的格局分為十個文件,分別是九個類的聲明文件和實現(xiàn)文件。十個文件為Form1.cs,Token.cs,Variable.cs,SymbolTable.cs,ObjectCode.cs,Lexical.cs,Grammar.cs,Four_Yuan,cs,Action.cs,ErrorItem.cs,他們分別是Lexical類聲明文件、Lexical類實現(xiàn)文件、Grammer類聲明文件、Grammer類實現(xiàn)文件。[在此處鍵入]

      程序流程

      在程序中,Lexical類的對象(Token)作為Grammer類中的一個成員變量,配合Grammer類進行語法分析。它們的關(guān)系是這樣的:Grammer類的一個成員變量temp首先對源程序刪除注釋,然后進行詞法分析獲取所有Token,并將獲取的Token存儲在Token對象的tokenList(List類型)中。然后Grammer類的語法分析程序就根據(jù)tokenList中的Token進行語法分析,生成語法樹,最后打印語法樹。同時,這也是程序的流程。[在此處鍵入]

      3.2 詞法分析模塊 3.2.1功能

      Lexical類主要的工作是詞法分析獲取Token序列。

      3.2.2數(shù)據(jù)結(jié)構(gòu)

      詞法分析階段的代碼被封裝成一個類——Lexical,Token中主要是Lexical類的聲明代碼,Lexical.cs中主要是Lexical類的實現(xiàn)代碼。Lexical類對外提供的函數(shù)主要有:

      static public int RecogId(string str, int i),static public int RecogDig(string str,int i),static public int RecogOperator(string str, int i),static public int RecogBound(string str, int i),以上幾個函數(shù)構(gòu)成了詞法分析的骨架,在Lexical類中還有其他成員變量和函數(shù),主要作為這三個函數(shù)處理過程的中間步驟,為這三個函數(shù)服務。Lexical類的代碼結(jié)構(gòu)和主要的成員變量和函數(shù)及其含義如下圖所示:

      3.2.3算法

      算法的基本任務是從字符串表示的源程序中識別出具有獨立意義的單詞符號,其基本思想是[在此處鍵入]

      根據(jù)掃描到單詞符號的第一個字符的種類,拼出相應的單詞符號。

      主程序示意圖:

      主程序示意圖如圖3-1所示。

      ⑴ 關(guān)鍵字表的初值。

      關(guān)鍵字作為特殊標識符處理,把它們預先安排在一張表格中(稱為關(guān)鍵字表),當掃描程序識別出標識符時,查關(guān)鍵字表。如能查到匹配的單詞,則該單詞為關(guān)鍵字,否則為一般標識符。

      (2)程序中需要用到的主要變量為type和number 掃描子程序的算法思想:

      首先設(shè)置3個變量: [在此處鍵入]

      ①token用來存放構(gòu)成單詞符號的字符串; ②number用來整型單詞;

      ③type用來存放單詞符號的種別碼。

      Token定義

      Token定義:

      Token類型(TokenType):

      3.3 語法分析模塊

      3.3.1功能

      語法分析是編譯過程的一個邏輯階段。語法分析的功能是在詞法分析的基礎(chǔ)上將單詞序列組合成各類語法短語,如“程序”,“語句”,“表達式”等等.語法分析程序判斷源程序在結(jié)構(gòu)上是否正確.源程序的結(jié)構(gòu)由上下文無關(guān)文法描述.3.3.2 數(shù)據(jù)結(jié)構(gòu)

      下圖為實現(xiàn)語法分析的類Grammar,屬性與方法的作用都已說明 在此處鍵入]

      3.3.3算法

      1.文法

      下面終結(jié)符與非終結(jié)符意義

      B程序開始

      Z 數(shù)據(jù)類型,如int,char,float等

      V 標識符

      S 語句

      P 語句塊

      E 加減算術(shù)表達式

      D 逗號表達式

      T 乘除算術(shù)表達式

      C 關(guān)系表達式

      L 邏輯表達式

      Q 標識符或圓括號

      e 表示空

      i 表示標識符 a)函數(shù)文法

      B----ZV()S

      [

      [在此處鍵入]

      b)語句塊文法

      P----SP|e

      S----{P} c)語句文法

      表達式語句文法

      S----V=E

      goto語句文法

      S----i:S

      S----goto i

      if語句文法

      S----if(E)S[else S]

      while語句文法

      S----while(E)S

      聲明語句文法

      S----ZVD

      D----,VD|=ED|e d)表達式文法

      E----T|E+T|E-T

      T----F|T*F|T/F

      C----C|CL|C==C|C<= L|C>=L

      L----Q|L&&Q|L||Q

      Q----i|(E)|!Q

      2.遞歸下降程序流程圖

      對應于每個文法編寫如下遞歸下降子程序

      主程序(B)[在此處鍵入] [在此處鍵入]

      3.4 符號表模塊

      3.4.1功能

      進行符號表的儲存,添加,更新,查找,保存標識符活躍信息以及輸出。3.4.2 數(shù)據(jù)結(jié)構(gòu)

      在此處鍵入]

      3.4.3算法

      3.5 四元式模塊

      3.5.1功能

      四元式為中間代碼,編譯程序進行完語義分析后,先生成中間代碼作為過渡,此時中間代碼與目標代碼已經(jīng)比較相似

      3.5.2 數(shù)據(jù)結(jié)構(gòu)

      [ 在此處鍵入]

      3.5.3算法

      3.6語義動作分析模塊

      3.6.1功能

      在語法分析中嵌入相應的語義動作,生成四元式 3.6.2 數(shù)據(jù)結(jié)構(gòu)

      [

      [在此處鍵入]

      3.6.3算法 GEQ(+)(-)(*)(/)

      (+,i1,i2,t)PUSH(i)ASSI(=)

      (=,t,_,POP)LABER(i)

      (lb,_,_,i)GOTO(i)

      (gt,_,_,i)IF(if)

      (if,a,_,_)EL(el)

      (el,_,_,_)IE(ie)

      (ie,_,_,_)WH()

      (wh,_,_,_)DO()

      (do,a,_,_)WE(we)

      (we,_,_,_)

      3.7 錯誤處理模塊

      3.7.1功能 保存運行時發(fā)現(xiàn)的錯誤,儲存行號已經(jīng)詳細信息并輸出。

      3.7.2 數(shù)據(jù)結(jié)構(gòu)

      3.7.3算法 [在此處鍵入]

      public static void AddErrorMessage(int lineno,string content)函數(shù)用作在發(fā)現(xiàn)錯誤時保存錯誤信息以及行號。

      public static string PrintErrorList()把所有發(fā)現(xiàn)的錯誤格式化后統(tǒng)一輸出。

      錯誤信息在語法分析,語義分析,符號表檢錯中添加。3.8 目標代碼模塊

      3.8.1功能

      目標代碼生成把優(yōu)化后的中間代碼變換成目標代碼,此處的目標代碼為匯編代碼,采用單寄存器生成目標代碼 3.8.2 數(shù)據(jù)結(jié)構(gòu)[在此處鍵入]

      3.8.3算法

      對于一個基本塊有如下流程圖

      W:操作符,B:第一操作數(shù),C:第二操作數(shù),R:寄存器

      5.結(jié)論

      網(wǎng)上找一段話抄上 [在此處鍵入]

      6.測試

      測試打開文件

      測試保存文件

      如果沒打開文件,直接敲代碼,點保存時會彈出另存為窗口[在此處鍵入]

      測試錯誤檢測,程序缺少main函數(shù)的類型,錯誤列表中顯示第一行函數(shù)缺少錯誤類型。

      測試錯誤檢測,程序缺少分號,錯誤列表中顯示該行缺少語句結(jié)束標志';' 單擊錯誤列表,會自動選定錯誤行

      編譯成功,生成并顯示token串、符號表、四元式與目標代碼 [在此處鍵入]

      測試if與while語句,而且while嵌套在if當中

      測試goto語句,結(jié)果正確。[在此處鍵入]

      測試優(yōu)化,輸入課件中的代碼,結(jié)果與課件一樣

      6.參考文獻。

      1、陳火旺.《程序設(shè)計語言編譯原理》(第3版).北京:國防工業(yè)出版社.2000.2、美 Alfred V.Aho Ravi Sethi Jeffrey D.Ullman著.李建中,姜守旭譯.《編譯原理》.24 [在此處鍵入]

      北京:機械工業(yè)出版社.2003.3、美 Kenneth C.Louden著.馮博琴等譯.《編譯原理及實踐》.北京:機械工業(yè)出版社.2002.4、金成植著.《編譯程序構(gòu)造原理和實現(xiàn)技術(shù)》.北京:高等教育出版社.2002.7.收獲、體會和建議。

      直接拷貝好歹也檢查一下錯誤

      對于編譯原理的這次課程設(shè)計,自己經(jīng)歷了從剛開始的不懂?明白任務的要求和內(nèi)容?理論知識的了解?開始著手寫代碼?完成基本功能?根據(jù)DFA及自頂向下等理論修改完善代碼等這些過程。

      自己著手寫詞法分析的時候還不清楚詞法分析的任務內(nèi)容,還不知道詞法分析的結(jié)果是什么,詞法分析出錯的情況和類型有哪些,也總是將詞法分析和語法分析混在一起,不明白哪些錯誤在詞法分析中報,哪些錯誤在語法分析中判斷,后來經(jīng)過查書、網(wǎng)上資料、請教同學等途徑逐步清晰了詞法分析的工作內(nèi)容是從源代碼文件中獲取出Token,供語法分析使用。在充分了解了語法分析需要哪些信息時,我才真正了解了詞法分析的工作內(nèi)容和目標,才知道詞法分析需要完成哪些任務獲取到哪些信息。充分了解了詞法分析的任務之后,就開始理論知識的學習。經(jīng)過揣摩書上的例子,自己理解和掌握了怎么設(shè)計過濾注釋和分析程序中Token的DFA,于是開始根據(jù)設(shè)計好的DFA進行編碼,最后經(jīng)過調(diào)試已經(jīng)可以正確地完成詞法階段的任務了。這只是詞法分析的原始代碼,在之后還進行了兩次徹底的改動。雖然之前寫的詞法分析的代碼已經(jīng)完成了詞法分析的需求,也是根據(jù)DFA的原理編寫的,但是在代碼結(jié)構(gòu)上卻難以體現(xiàn),在對書上的根據(jù)已知DFA寫代碼的例子進行了詳細的研究之后,發(fā)現(xiàn)自己的代碼并沒有像書上那樣完全按照所依據(jù)的DFA各狀態(tài)轉(zhuǎn)移的關(guān)系進行編寫,所以對代碼進行了重寫,像書上一樣嚴格按照狀態(tài)之間轉(zhuǎn)移的方式進行編寫,將狀態(tài)劃分成11個狀態(tài),狀態(tài)分別按1~11進行標注,程序也按照DFA來編寫,也實現(xiàn)了詞法分析的功能。再后來寫報告的時候,發(fā)現(xiàn)分析出Token的那個DFA并不是最簡的,有很多多余的狀態(tài),完全可以用一個flag標志來標識,從而簡化代碼結(jié)構(gòu),于是又重寫了一次詞法分析函數(shù)scan()的代碼,將狀態(tài)縮減為5個,且不再用1-5來表示,而是像書上那樣分別取了名字(START、INNUM、INID、INDBSYM、DONE),同時為了簡化代碼將輸出Token到文件的部分從scan()中剝離開來,而在Lexical類中加了一個printToken()的函數(shù),使scan()函數(shù)邏輯更加清晰,使讀者能夠容易地將代碼與DFA進行查看比照。

      在寫語法分析的時候,已經(jīng)對編譯器的語法分析的內(nèi)容有了一定的了解,所以直接進行了理論的學習。首先自己對遞歸向下分析法進行了學習,將書上的幾個遞歸向下分析的偽代碼看過之后,自己對遞歸向下的分析方法的原理有了初步的認識,大概知道了根據(jù)文法怎么分析,但是對于如何編寫代碼卻還在此處鍵入]

      是難以下手,于是就對照TINY語言的文法看了幾遍書后面的TINY語言的遞歸向下分析的語法分析程序,這樣就基本知道了C-語言的語法分析程序怎么寫。由于C-語言給出的文法有左遞歸存在,于是自己將存在左遞歸的文法改寫成EBNF的形式,并據(jù)此進行代碼編寫。由于在編寫代碼的過程中需要確定分析是否正確或選擇多個文法中的某一個文法進行分析,有時必須探測需要的或下一個Token的類型,在這種情況下需要求First集合,在推導中若存在empty,又需要求Follow集合,所以這樣又需要我了解First集合和Follow集合,自己在程序中也根據(jù)求出的First集合和Follow集合進行判斷,以確定程序的走向。在編寫過程中,還有一類問題,就是存在公共左因子,如文法expression→ var = expression | simple-expression,左因子為ID,在分析過程中,由于已經(jīng)取出了一個ID的Token,且生成了一個IdK的節(jié)點,但是在當前狀態(tài)無法確定是哪一個推導,然而IdK節(jié)點已經(jīng)生成,又無法回退,并且是使用自頂向下的分析方法,已經(jīng)生成的IdK在程序上方無法使用,自己通過查閱資料等途徑的學習確定了在這種情形下的處理方式:將已經(jīng)生成的IdK節(jié)點傳到下方的處理程序,所以TreeNode * simple_expression(TreeNode * k)、TreeNode * additive_expression(TreeNode * k)等函數(shù)都被設(shè)計成有節(jié)點類型參數(shù)的函數(shù),目的就是將已經(jīng)生成的節(jié)點傳到下面的分析函數(shù)中去。

      通過這次的編譯原理課程的學習和實踐,自己獲益良多。首先最基本的成果是完成了課程設(shè)計的任務,實現(xiàn)了編譯器的詞法分析和語法分析階段的功能,詞法分析主要能過濾注釋、分析出語法分析階段需要的Token并滿足語法階段的所有要求,能夠判別詞法分析階段是否出錯和出錯類型和位置。語法分析主要能根據(jù)遞歸向下的分析思想和C-文法對詞法分析獲取的Token進行語法分析,能夠構(gòu)造出語法樹,能夠判別語法分析過程中是否出錯以及出錯位置和錯誤類型。

      由于在編寫程序過程中,涉及到了正則表達式、DFA、提取公共左因子、消除左遞歸、EBNF、求First集合和Follow集合、遞歸向下分析方法以及編程語言方面的知識,所以,通過本次的課程設(shè)計的實踐,使得自己對編譯原理這門課的許多知識點有了更加深刻和具體的理解,而不再只限制于做題。此外,對以前那些已掌握的知識有了溫習和動手鍛煉的機會。如:以前在編譯原理課上雖然知道First集合和Follow集合怎么求的,卻不知道First集合和Follow集合到底是干什么的,通過編寫程序自己明白了他們的實際作用,使得自己不僅知其然還知其所以然,從而使得自己加深了對知識點的理解和掌握。由于以前編寫代碼都是使用JAVA語言,所以C/C++很多內(nèi)容都忘記了,通過本次的實踐,自己又重新拾起了以前的知識。此外,由于在做報告的時候,需要描繪DFA和程序流程圖,使得自己初步掌握了使用visio和word畫圖的能力。此外,對于文檔的編寫和美化自己也獲得了許多有用的經(jīng)驗。[

      下載(黑龍江大學)編譯原理讀書工程(推薦閱讀)word格式文檔
      下載(黑龍江大學)編譯原理讀書工程(推薦閱讀).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔相關(guān)法律責任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實,本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        編譯原理教學大綱(范文模版)

        編譯原理教學大綱 一、課程的性質(zhì)、地位 本課程是計算機專業(yè)的重要專業(yè)課之一,是一門理論性和實踐性較強的課程。主要介紹程序設(shè)計語言編譯程序構(gòu)造的基本原理和基本實現(xiàn)方法......

        編譯原理論文

        編譯原理心得體會 編譯原理是計算機專業(yè)的一門重要專業(yè)課,旨在介紹編譯程序構(gòu)造的一般原理和基本方法,在計算機本科教學中占有十分重要的地位。 該課程理論性與實踐性都很強,我......

        編譯原理課程設(shè)計報告

        武 漢 紡 織 大 學 編譯原理課程設(shè)計實驗報告學院:數(shù)學與計算機 專業(yè):計算機 姓名: 班級: 學號:1 編譯原理 編譯原理課設(shè)報告 一、 實驗目的 加強對編譯程序的整體認識和了解,鞏......

        編譯原理試題(2009-2010-1)

        《編譯原理》試題A 1.名詞解釋 短語 LL(1)文法 語法分析 無環(huán)路有向圖(DAG) 語法制導翻譯 2. Pascal語言無符號數(shù)的正規(guī)定義如下: num ? digit+ (.digit+)? (E(+|-)? digit+)?......

        編譯原理學習論文(推薦)

        編譯原理學習論文 班級:09應用(2)班姓名:彭文陽學號:2009081215 大學課程為什么要開設(shè)編譯原理呢?這門課程關(guān)注的是編譯器方面的產(chǎn)生原理和技術(shù)問題,似乎和計算機的基礎(chǔ)領(lǐng)域不沾邊,......

        編譯原理課程設(shè)計設(shè)計任務書

        編譯原理課程設(shè)計任務書 1、目的 學生在學習《程序設(shè)計語言編譯原理》課程過程中,結(jié)合各章節(jié)的構(gòu)造編譯程序的基本理論,總共用10個課時完成課程設(shè)計。在基本實驗完成的基礎(chǔ)上,......

        編譯原理課程設(shè)計心得體會

        經(jīng)過一個星期的編譯原理課程設(shè)計,本人在劉貞老師的指導下,順利完成該課程設(shè)計。通過該課程設(shè)計,收獲頗多。一、對實驗原理有更深的理解通過該課程設(shè)計,掌握了什么是編譯程序,編譯......

        編譯原理語法分析實驗報告

        實驗2:語法分析 1. 實驗題目和要求 題目:語法分析程序的設(shè)計與實現(xiàn)。 實驗內(nèi)容:編寫語法分析程序,實現(xiàn)對算術(shù)表達式的語法分析。要求所分析算術(shù)表達式由如下的文法產(chǎn)生。 E?E?T|E?T......