久久99精品久久久久久琪琪,久久人人爽人人爽人人片亞洲,熟妇人妻无码中文字幕,亚洲精品无码久久久久久久

編譯原理各章小結(jié)

時間:2019-05-13 10:08:23下載本文作者:會員上傳
簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《編譯原理各章小結(jié)》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《編譯原理各章小結(jié)》。

第一篇:編譯原理各章小結(jié)

1.編譯程序是一個翻譯程序,將高級語言的源程序翻譯成低級語言的程序。

2.整個編譯過程可以劃分為五個階段以及編譯各階段的任務(wù);另外還有兩個處理過程。

3.不會有很多人會從事設(shè)計和編寫編譯程序的工作的,但編譯技術(shù)會應(yīng)用在很多領(lǐng)域。

1.已知文法G,判斷VN=?,VT=?,判斷某個符號串是否為該文法描述的句子。

2.已知文法G,寫出它定義的語言描述;

3.已知文法G,給出其句子的各種形式的推導(dǎo),會畫出語法樹;

4.文法二義性的判斷——利用語法樹:在文法G中去尋找某一個句子,能夠給它畫出兩個不同的語法樹。

1.詞法分析的任務(wù)。

2.單詞的概念與單詞的分類以及輸出方式。

3.弄懂一些重要的概念:

正規(guī)文法G、正規(guī)式r和確定有限自動機DFA和不確定有限自動機NFA。

4.會畫出FA對應(yīng)的狀態(tài)轉(zhuǎn)換圖。

5.弄懂詞法分析器的自動生成原理:

1.語法分析的任務(wù);

2.確定的自頂向下語法分析方法的基本思想,存在的問題是:左遞歸和回溯;

3.分析方法:預(yù)測分析法。

1.自底向上語法分析方法的基本思想;

2.短語、直接短語和句柄底定義,以及如何利用語法樹來尋找某個句型的所有的短語、直接短語和句柄;

3.自底向上語法分析方法:

①算符優(yōu)先分析法:基本原理,識別句柄的方法,最左素短語。

②LR分析法:活前綴,LR(0)項目,LR(0)分析法,SLR(1)分析法。

語義分析與中間代碼生成的任務(wù)。

弄清屬性文法的概念。

弄清語法制導(dǎo)翻譯的概念。

掌握常用的中間代碼形式:逆波蘭式和四元式。

掌握一般語法成分,如賦值語句,條件語句,循環(huán)語句和簡單說明語句等結(jié)構(gòu)的翻譯。

數(shù)據(jù)空間的內(nèi)容;

數(shù)據(jù)空間的三種分配策略;

臨時變量的存儲分配。

優(yōu)化的分類;

常用的代碼優(yōu)化技術(shù);

局部優(yōu)化。

1.目標(biāo)代碼的形式 ;

2.目標(biāo)機的指令系統(tǒng);

3.代碼生成算法。

第二篇:機械原理各章小結(jié)

第二章小結(jié):

1.運動副及其分類,運動鏈,機構(gòu)。2.機構(gòu)運動簡圖繪制

3.(平面)機構(gòu)自由度的計算,計算自由度的三個注意事項,機構(gòu)具有確定運動的條件。

4.機構(gòu)的組成原理及結(jié)構(gòu)分類,基本桿組條件。

第三章小結(jié):

1.瞬心的確定,三心定理,用瞬心法對機構(gòu)速度分析。2.(矢量方程)圖解法對機構(gòu)速度和加速度分析:

(1)同一構(gòu)件上兩點速度關(guān)系及加速度關(guān)系(隨基點平動加繞基點轉(zhuǎn)動),速度多邊形,加速度多邊形。

已知同一構(gòu)件上的兩個點速度﹑加速度,其它點的速度和加速度可分別利用速度影像和加速度影像得到。

(2)兩個構(gòu)件重合點運動關(guān)系(絕對運動等于牽連運動加上相對運動),哥氏加速度大小及方向。

注意點:矢量有大小和方向,矢量方程可解兩個未知量;牽連運動有轉(zhuǎn)動角速度時,哥氏加速度一般不為零(即哥氏加速度存在);當(dāng)兩構(gòu)件組成移動副且兩構(gòu)件均為運動構(gòu)件時,兩構(gòu)件角速度相等。

3.利用解析法求位置﹑速度﹑加速度,各種解析法的共同點及不同點。矢量方程及坐標(biāo)分解

第四章小結(jié):

1.機構(gòu)力分析的目的,何謂靜力分析和動態(tài)靜力分析? 慣性力的確定方法,動代換和靜代換的條件。

2.移動副中當(dāng)量摩擦系數(shù)和當(dāng)量摩擦角的概念,及其在螺旋副中的應(yīng)用;轉(zhuǎn)動副中摩擦圓的概念,及其在考慮摩擦?xí)r機構(gòu)力分析中應(yīng)用。

3.構(gòu)件桿組靜定條件;機構(gòu)動態(tài)靜力分析圖解法的步驟即:運動分析﹑ 確定慣性力﹑ 確定首解桿組(首解副)﹑逐一列桿組的矢量方程(包括力和力矩方程)﹑逐一用力多邊形求解。4.不同解析法中的共同點和不同點。5.僅考慮摩擦?xí)r的(靜)力分析

第五章小結(jié):

1.利用功﹑ 功率﹑ 力矩﹑ 力表達機械效率方式;串聯(lián)﹑并聯(lián) ﹑ 混聯(lián)機組的機械效率計算。

2.何謂自鎖? 自鎖條件的幾種求解方法。自鎖在工程中的應(yīng)用舉例。3.螺旋機構(gòu)的上升和下降效率﹑自鎖條件。

第六章小結(jié):

1.靜平衡和動平衡的條件及計算,適用場合。

2.機構(gòu)平衡的條件,機構(gòu)平衡的實質(zhì),機構(gòu)平衡的不同方法(完全平衡和部分平衡中利用附加機構(gòu)平衡和利用平衡質(zhì)量平衡)

第七章小結(jié):

1.本章的目的解決兩個主要問題是什么?

2.利用動能原理,列出機械運動方程的一般表達式;等效構(gòu)件的含義,等效轉(zhuǎn)動構(gòu)件的等效轉(zhuǎn)動慣量﹑等效力矩的等效條件,等效移動構(gòu)件的等效質(zhì)量﹑等效力的等效條件;等效構(gòu)件的運動方程式。

3.周期性和非周期性速度波動的調(diào)節(jié)方法,飛輪的幾種作用,為什么飛輪放在高速軸上?為什么飛輪只能減小而不能消除周期性速度波動?

4.最大盈虧功和飛輪轉(zhuǎn)動慣量的計算。

第八章小結(jié):

1.鉸鏈四桿機構(gòu)三種基本形式,幾何條件;含一個移動副四桿機構(gòu)的四種形式;含兩個移動副四桿機構(gòu)的三種形式。極位夾角,擺角,急回作用,死點,傳動角,壓力角等概念。2.連桿機構(gòu)演化方法

3.利用圖解法,按連桿預(yù)定的位置、兩連架桿預(yù)定的對應(yīng)位置、行程速比系數(shù)設(shè)計四桿機構(gòu)(鉸鏈四桿機構(gòu)、含一個移動副四桿機構(gòu)),反轉(zhuǎn)法。

4.解析法設(shè)計四桿機構(gòu)的基本原理和思路 5.多桿機構(gòu)的功用

第九章小結(jié):

1.了解凸輪機構(gòu)優(yōu)缺點及分類。

2.一些概念(升程、回程、停程(遠休及近休)、工作行程、基圓、理論廓線、實際廓線、壓力角等)。

3.運動規(guī)律的動力特點及曲線畫法。什么是剛性沖擊,什么是柔性沖擊?

4.凸輪輪廓的設(shè)計的圖解法(相對運動原理或反轉(zhuǎn)法),解析法求解凸輪廓線。

5.設(shè)計凸輪注意事項(基圓半徑、結(jié)構(gòu)尺寸、壓力角、受力、廓線變尖交叉運動失真之間關(guān)系)。

第十章小結(jié): 本章小結(jié) 直齒圓柱齒輪五圓兩角一中心矩五個基本參數(shù);斜齒圓柱齒輪五圓兩角一中心距計算(在端面上的公式形式與直齒圓柱齒輪一樣)。概念:(1)嚙合基本定律;(2)漸開線的5條特性、漸開線函數(shù)、漸開線齒廓嚙合特點;(3)各種齒輪傳動的正確嚙合條件;(4)各種齒輪中哪個面內(nèi)的模數(shù)和壓力角為標(biāo)準(zhǔn)值;(5)標(biāo)準(zhǔn)齒輪標(biāo)準(zhǔn)安裝和非標(biāo)準(zhǔn)安裝時分度圓與節(jié)圓、壓力角與嚙合角關(guān)系;(6)重合度的含義(連續(xù)運動的條件)及實際嚙合線端點B1和B2的確定;(7)根切的原因、危害、避免方法、變位目的、變位類型、變位齒輪尺寸和中心距變化(表10-4)、變位齒輪的正確結(jié)合條件和重合度;(8)當(dāng)量齒輪含義及當(dāng)量齒數(shù)(最小根切齒數(shù));(9)為什么蝸桿傳動的傳動比大而效率低?為什么規(guī)定蝸桿直徑系列?

第十一章小結(jié):

1.定軸輪系、周轉(zhuǎn)輪系、復(fù)合輪系傳動比及轉(zhuǎn)速計算。

計算周轉(zhuǎn)輪系傳動比要借助于轉(zhuǎn)化輪系計算;計算復(fù)合輪系傳動比的步驟,復(fù)合輪系正確劃分關(guān)鍵在于找行星輪;注意計算中的正負號。

輪系的串聯(lián),輪系的并聯(lián)(封閉式行星輪系)。2.輪系的7條功用。

3.行星輪系效率的理論基礎(chǔ):轉(zhuǎn)化輪系法,摩擦損失功率

。負號機構(gòu)效率比正號機構(gòu)效率高。4。行星輪系選擇考慮4點(傳動比范圍、效率、封閉功率流、及尺寸重量);行星輪系各輪齒數(shù)滿足的4個條件(傳動比條件、同心條件、均布條件、鄰接條件);浮動裝置。

第十二章小結(jié):

1.本章能夠?qū)崿F(xiàn)間歇運動的機構(gòu),他們的運動和動力特性及應(yīng)用場合;除本章外,還有哪些機構(gòu)能夠?qū)崿F(xiàn)間歇運動。

2.槽輪機構(gòu)的運動系數(shù)、運動時間、停歇時間、圓銷盤轉(zhuǎn)速之間關(guān)系。

3.雙萬向聯(lián)軸節(jié)輸入輸出軸等速條件;復(fù)式螺旋機構(gòu)調(diào)微。4.組合機構(gòu)的組合方式,何謂封閉式傳動機構(gòu)?組合機構(gòu)類型。5.舉例說明變轉(zhuǎn)動為直動的機構(gòu),注意運動形式轉(zhuǎn)換時機構(gòu)的選型。

第三篇:編譯原理 學(xué)習(xí)心得

國際學(xué)院 0802 楊良燕 200819100227

《編譯原理》課程學(xué)習(xí)心得

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

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

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

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

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

編譯原理實驗報告

報告完成日期 2018.5.30

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

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

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

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

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

詞法的正規(guī)式:

標(biāo)識符

<字母>(<字母>|<數(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)* 運算符和分隔符 +| * | / | > | < | = |(|)| <=|>=|==; 對于標(biāo)識符和關(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語法樹生成的時候推不出目標(biāo)的產(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)生式對應(yīng)的字符串同時標(biāo)識產(chǎn)生式定義的int值 輔助程序:

生成語法樹的程序:

1.樹節(jié)點:

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

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

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

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

算法的基本思想:

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

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

流程圖:

算法展示:

四、實驗體會

這次實驗其實總的來說是讓我們更加清晰的理解到了我們所學(xué)的內(nèi)容。有時候我們上課聽講,課下復(fù)習(xí)寫作業(yè)的時候,其實看似掌握了所學(xué)內(nèi)容,但實際上并沒有親身體會的操作很難讓我們深刻的理解其中的相關(guān)意義。通過這次實驗,我們能夠從根源處了解到了我們所學(xué)的內(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 組長學(xué)號:201239 組長姓名:閆智宣 指導(dǎo)教師:李曉華 設(shè)計時間:2014年12月

[在此處鍵入]

設(shè)計分工

組長學(xué)號及姓名: 20123974

閆智宣

分工:

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

廖峭 分工:

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

郭天龍

分工:

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

摘要

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

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

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

目錄

摘要

1.概述

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

2.1 設(shè)計任務(wù)

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 目標(biāo)代碼模塊

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)生目標(biāo)語言(target language)機器代碼的等價程序。通常地,源程序為高級語言(high-level language),C語言程序,而目標(biāo)則是 機器語言的目標(biāo)代碼(object code),也就是可以在計算機硬件中運行的機器代碼軟件程序。這一過程可以表示為:

源程序→編譯器 →目標(biāo)機器代碼程序

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

2.1設(shè)計任務(wù)

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

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

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

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

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

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

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

(2)語法分析

要求用學(xué)習(xí)過的自底向上或自頂向下的分析方法等,實現(xiàn)對表達式、各種說明語句、控制語句進行語法分析。若語法正確,則用語法制導(dǎo)翻譯法進行語義翻譯;生成并打印出語法樹;若語法錯誤,要求指出出錯性質(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分別對應(yīng)Token類和Variable類SymbolTable類ObjectCode類Lexical類Grammar類Four_Yuan類Action類ErrorItem類的聲明和實現(xiàn)文件)。本程序采用C#語言以面向?qū)ο蟮乃枷刖帉懀绦蚍譃閹撞糠郑涸~法分析(Lexical),語法分析(Grammer),目標(biāo)代碼生成(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ù)服務(wù)。Lexical類的代碼結(jié)構(gòu)和主要的成員變量和函數(shù)及其含義如下圖所示:

3.2.3算法

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

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

主程序示意圖:

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

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

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

(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 標(biāo)識符

S 語句

P 語句塊

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

D 逗號表達式

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

C 關(guān)系表達式

L 邏輯表達式

Q 標(biāo)識符或圓括號

e 表示空

i 表示標(biāo)識符 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.遞歸下降程序流程圖

對應(yīng)于每個文法編寫如下遞歸下降子程序

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

3.4 符號表模塊

3.4.1功能

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

在此處鍵入]

3.4.3算法

3.5 四元式模塊

3.5.1功能

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

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

[ 在此處鍵入]

3.5.3算法

3.6語義動作分析模塊

3.6.1功能

在語法分析中嵌入相應(yīng)的語義動作,生成四元式 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 目標(biāo)代碼模塊

3.8.1功能

目標(biāo)代碼生成把優(yōu)化后的中間代碼變換成目標(biāo)代碼,此處的目標(biāo)代碼為匯編代碼,采用單寄存器生成目標(biāo)代碼 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é)束標(biāo)志';' 單擊錯誤列表,會自動選定錯誤行

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

測試if與while語句,而且while嵌套在if當(dāng)中

測試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)歷了從剛開始的不懂?明白任務(wù)的要求和內(nèi)容?理論知識的了解?開始著手寫代碼?完成基本功能?根據(jù)DFA及自頂向下等理論修改完善代碼等這些過程。

自己著手寫詞法分析的時候還不清楚詞法分析的任務(wù)內(nèi)容,還不知道詞法分析的結(jié)果是什么,詞法分析出錯的情況和類型有哪些,也總是將詞法分析和語法分析混在一起,不明白哪些錯誤在詞法分析中報,哪些錯誤在語法分析中判斷,后來經(jīng)過查書、網(wǎng)上資料、請教同學(xué)等途徑逐步清晰了詞法分析的工作內(nèi)容是從源代碼文件中獲取出Token,供語法分析使用。在充分了解了語法分析需要哪些信息時,我才真正了解了詞法分析的工作內(nèi)容和目標(biāo),才知道詞法分析需要完成哪些任務(wù)獲取到哪些信息。充分了解了詞法分析的任務(wù)之后,就開始理論知識的學(xué)習(xí)。經(jīng)過揣摩書上的例子,自己理解和掌握了怎么設(shè)計過濾注釋和分析程序中Token的DFA,于是開始根據(jù)設(shè)計好的DFA進行編碼,最后經(jīng)過調(diào)試已經(jīng)可以正確地完成詞法階段的任務(wù)了。這只是詞法分析的原始代碼,在之后還進行了兩次徹底的改動。雖然之前寫的詞法分析的代碼已經(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進行標(biāo)注,程序也按照DFA來編寫,也實現(xiàn)了詞法分析的功能。再后來寫報告的時候,發(fā)現(xiàn)分析出Token的那個DFA并不是最簡的,有很多多余的狀態(tài),完全可以用一個flag標(biāo)志來標(biāo)識,從而簡化代碼結(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)容有了一定的了解,所以直接進行了理論的學(xué)習(xí)。首先自己對遞歸向下分析法進行了學(xué)習(xí),將書上的幾個遞歸向下分析的偽代碼看過之后,自己對遞歸向下的分析方法的原理有了初步的認識,大概知道了根據(jù)文法怎么分析,但是對于如何編寫代碼卻還在此處鍵入]

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

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

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

下載編譯原理各章小結(jié)word格式文檔
下載編譯原理各章小結(jié).doc
將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
點此處下載文檔

文檔為doc格式


聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(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)范文推薦

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

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

    編譯原理論文

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

    編譯原理5、6、7章解題小結(jié)

    第5、6、7章小結(jié) 幾種語法分析方法 ? 自上而下 – 遞歸下降分析法 – 預(yù)測(LL)分析法 ? 自下而上 – 算符優(yōu)先分析法 – LR分析法:LR(0)、 SLR、 LR、 LALR 一、......

    微機原理各章知識要點、小結(jié)五篇

    各章知識要點、小結(jié) 第一章 微型計算機系統(tǒng)概述 本章知識要點: ? 微型計算機的發(fā)展。 ? 微型計算機的特點。 ? 微型計算機系統(tǒng)的組成。 ? 微型計算機的主要性能指標(biāo)。 本章小結(jié):本......

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

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

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

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

    編譯原理學(xué)習(xí)論文(推薦)

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

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

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

主站蜘蛛池模板: 在线无码av一区二区三区| 国产乱子伦视频大全亚瑟影院| 国产av一区二区三区无码野战| 亚洲综合熟女久久久30p| 日本成熟少妇激情视频免费看| 亚洲亚洲人成综合网站图片| 强插女教师av在线| 国产欧美日本亚洲精品一5区| 亚洲乱码av中文一区二区软件| 亚洲精品色婷婷在线影院| 边添小泬边狠狠躁视频| 国产欧美熟妇另类久久久| 用舌头去添高潮无码视频| 成年无码av片在线| 97久久超碰国产精品…| 午夜性开放午夜性爽爽| 国产欧美在线一区二区三| 国产精品99久久久久久董美香| 午夜精品无人区乱码1区2区| 色94色欧美sute亚洲线路二| 久久久久国产综合av天堂| 国产极品美女到高潮| 欧美成人亚洲高清在线观看| 国产三级精品三级在线专区1| 成人精品| 亚洲丰满熟女一区二区哦| 亚洲啪啪综合av一区| 日韩激情无码免费毛片| 激情毛片无码专区| 亚洲国产无套无码av电影| 国产成人无码av一区二区在线观看| 日韩国产成人无码av毛片| 成年女人黄小视频| 7878成人国产在线观看| 情侣黄网站免费看| 人妻无码中文专区久久五月婷| 欧美亚洲日韩国产综合电影| 亚洲精品无码久久久久牙蜜区| 四虎国产精品永久在线国在线| 人妻少妇-嫩草影院| 午夜毛片不卡免费观看视频|