版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p> 課 程 設(shè) 計(jì) 報(bào) 告</p><p> 設(shè)計(jì)題目:一個(gè)簡(jiǎn)單文法的編譯器前端的設(shè)計(jì)與實(shí)現(xiàn)</p><p><b> 摘 要</b></p><p> 編譯原理課程設(shè)計(jì)是通過C語言編譯器相關(guān)子系統(tǒng)的設(shè)計(jì),進(jìn)一步加深對(duì)編譯器構(gòu)造的理解;第一部分詞法分析,設(shè)計(jì)各單詞的狀態(tài)轉(zhuǎn)換圖,并為不同的單詞設(shè)計(jì)種別碼,制作掃描器識(shí)別一
2、個(gè)個(gè)單詞,返回值為識(shí)別碼的序號(hào),返回Token序列。將詞法分析器設(shè)計(jì)成供語法分析器調(diào)用的子程序。詞法分析器具備預(yù)處理功能。將不翻譯的注釋等符號(hào)先濾掉,只保留要翻譯的符號(hào)串,即要求設(shè)計(jì)一個(gè)供詞法分析調(diào)用的預(yù)處理子程序;第二部分,語法分析,用遞歸下降法,實(shí)現(xiàn)對(duì)表達(dá)式、各種說明語句、控制語句進(jìn)行語法分析。若語法正確,則用語法制導(dǎo)翻譯法進(jìn)行語義翻譯;生成并打印出語法樹;若語法錯(cuò)誤,要求指出出錯(cuò)性質(zhì)和出錯(cuò)位置(行號(hào))。</p>&l
3、t;p> 我們還做了附加功能,即編譯后端,有中間代碼優(yōu)化,生成目標(biāo)代碼匯編語言。通過此次課程設(shè)計(jì),提高了我們的獨(dú)立分析問題、解決問題的能力,以及系統(tǒng)軟件設(shè)計(jì)的能力; 提高程序設(shè)計(jì)能力、程序調(diào)試能力,團(tuán)結(jié)協(xié)作能力</p><p> 關(guān)鍵詞:詞法分析,語法分析,四元式生成,錯(cuò)誤處理,符號(hào)表生成,語義動(dòng)作插入,中間代碼優(yōu)化,生成目標(biāo)代碼</p><p><b> 目錄<
4、;/b></p><p><b> 摘要 </b></p><p><b> 1. 概述 </b></p><p> 2. 課程設(shè)計(jì)任務(wù)及要求</p><p><b> 2.1 設(shè)計(jì)任務(wù)</b></p><p><b> 2.2
5、 設(shè)計(jì)要求</b></p><p> 3. 算法及數(shù)據(jù)結(jié)構(gòu)</p><p> 3.1算法的總體思想(流程)</p><p> 3.2 詞法分析模塊</p><p><b> 3.2.1 功能</b></p><p> 3.2.2 數(shù)據(jù)結(jié)構(gòu)</p><p&g
6、t;<b> 3.2.3 算法</b></p><p> 3.3 語法分析模塊</p><p><b> 3.3.1功能</b></p><p> 3.3.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.3.3算法</b></p><p><
7、b> 3.4 符號(hào)表模塊</b></p><p><b> 3.4.1功能</b></p><p> 3.4.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.4.3算法</b></p><p><b> 3.5 四元式模塊</b></p>
8、<p><b> 3.5.1功能</b></p><p> 3.5.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.5.3算法</b></p><p> 3.6 語義動(dòng)作分析模塊</p><p><b> 3.6.1功能</b></p><p
9、> 3.6.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.6.3算法</b></p><p> 3.7 錯(cuò)誤處理模塊</p><p><b> 3.7.1功能</b></p><p> 3.7.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.7.3算法&
10、lt;/b></p><p> 3.8 目標(biāo)代碼模塊</p><p><b> 3.8.1功能</b></p><p> 3.8.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.8.3算法</b></p><p> 4. 程序設(shè)計(jì)與實(shí)現(xiàn)</p>&l
11、t;p><b> 4.1 程序流程圖</b></p><p><b> 4.2 程序說明</b></p><p><b> 4.3 實(shí)驗(yàn)結(jié)果</b></p><p><b> 5. 結(jié)論</b></p><p><b> 6. 參
12、考文獻(xiàn)。</b></p><p> 7. 收獲、體會(huì)和建議。</p><p><b> 1.概述</b></p><p> 編譯器是將C語言翻譯為匯編語言代碼的計(jì)算機(jī)程序。編譯器將源程序(source language) 編寫的程序作為輸入,翻譯產(chǎn)生目標(biāo)語言(target language )機(jī)器代碼的等價(jià)程序。通常地,源程序
13、為高級(jí)語言(high-level language ),C語言程序,而目標(biāo)則是 機(jī)器語言的目標(biāo)代碼 (object code),也就是可以在計(jì)算機(jī)硬件中運(yùn)行的機(jī)器代碼軟件程序。這一過程可以表示為:</p><p> 源程序→編譯器 →目標(biāo)機(jī)器代碼程序</p><p> 2.課程設(shè)計(jì)任務(wù)及要求</p><p><b> 2.1設(shè)計(jì)任務(wù)</b&
14、gt;</p><p> 學(xué)生在學(xué)習(xí)《編譯原理》課程過程中,結(jié)合各章節(jié)的構(gòu)造編譯程序的基本理論,要求用C#語言描述及上機(jī)調(diào)試,實(shí)現(xiàn)一個(gè) C編譯程序(包括詞法分析,語法分析等重要子程序),使學(xué)生將理論與實(shí)際應(yīng)用結(jié)合起來,受到軟件設(shè)計(jì)等開發(fā)過程的全面訓(xùn)練,從而提高學(xué)生軟件開發(fā)的能力。 </p><p><b> 2.2設(shè)計(jì)要求</b></p><p
15、><b> 要求:</b></p><p> ?。?)設(shè)計(jì)詞法分析器</p><p> 設(shè)計(jì)各單詞的狀態(tài)轉(zhuǎn)換圖,并為不同的單詞設(shè)計(jì)種別碼。將詞法分析器設(shè)計(jì)成供語法分析器調(diào)用的子程序。功能包括:</p><p> a. 具備預(yù)處理功能。將不翻譯的注釋等符號(hào)先濾掉,只保留要翻譯的符號(hào)串,即要求設(shè)計(jì)一個(gè)供詞法分析調(diào)用的預(yù)處理子程序;&l
16、t;/p><p> b. 能夠拼出語言中的各個(gè)單詞;</p><p> c. 返回(種別碼, 屬性值,行號(hào))。</p><p><b> ?。?)語法分析</b></p><p> 要求用學(xué)習(xí)過的自底向上或自頂向下的分析方法等,實(shí)現(xiàn)對(duì)表達(dá)式、各種說明語句、控制語句進(jìn)行語法分析。若語法正確,則用語法制導(dǎo)翻譯法進(jìn)行語義
17、翻譯;生成并打印出語法樹;若語法錯(cuò)誤,要求指出出錯(cuò)性質(zhì)和出錯(cuò)位置(行號(hào))。</p><p> 3. 算法及數(shù)據(jù)結(jié)構(gòu)</p><p> 3.1算法的總體思想(流程)</p><p> 本節(jié)主要分析程序的代碼結(jié)構(gòu)和代碼工程文件的劃分。(程序由幾個(gè)類組成: Token類和Variable類SymbolTable類ObjectCode類Lexical類Grammar類
18、Four_Yuan類Action類ErrorItem類,分別為詞法分析和語法分析類。工程分為幾個(gè)文件:Form1.cs,Token.cs,Variable.cs,SymbolTable.cs,ObjectCode.cs,Lexical.cs,Grammar.cs,Four_Yuan,cs,Action.cs,ErrorItem.cs分別對(duì)應(yīng)Token類和Variable類SymbolTable類ObjectCode類Lexical類Gr
19、ammar類Four_Yuan類Action類ErrorItem類的聲明和實(shí)現(xiàn)文件)。</p><p> 本程序采用C#語言以面向?qū)ο蟮乃枷刖帉?,程序分為幾部分:詞法分析(Lexical),語法分析(Grammer),目標(biāo)代碼生成(ObjectCode)。Lexical類主要的工作是詞法分析獲取Token。Grammer類的主要工作是根據(jù)Lexical類詞法分析之后的Token進(jìn)行語法分析,生成語法樹,最后并輸
20、出語法樹。在處理過程中,Token類的對(duì)象作為L(zhǎng)exical類的一個(gè)成員變量,配合Grammer類進(jìn)行語法分析。</p><p> 工程文件總體上是按照九個(gè)類的格局分為十個(gè)文件,分別是九個(gè)類的聲明文件和實(shí)現(xiàn)文件。十個(gè)文件為Form1.cs,Token.cs,Variable.cs,SymbolTable.cs,ObjectCode.cs,Lexical.cs,Grammar.cs,Four_Yuan,cs,Ac
21、tion.cs,ErrorItem.cs,他們分別是Lexical類聲明文件、Lexical類實(shí)現(xiàn)文件、Grammer類聲明文件、Grammer類實(shí)現(xiàn)文件。</p><p><b> 程序流程</b></p><p> 在程序中,Lexical類的對(duì)象(Token)作為Grammer類中的一個(gè)成員變量,配合Grammer類進(jìn)行語法分析。它們的關(guān)系是這樣的:Gram
22、mer類的一個(gè)成員變量temp首先對(duì)源程序刪除注釋,然后進(jìn)行詞法分析獲取所有Token,并將獲取的Token存儲(chǔ)在Token對(duì)象的tokenList(List類型)中。然后Grammer類的語法分析程序就根據(jù)tokenList中的Token進(jìn)行語法分析,生成語法樹,最后打印語法樹。同時(shí),這也是程序的流程。</p><p> 3.2 詞法分析模塊</p><p><b> 3.
23、2.1功能</b></p><p> Lexical類主要的工作是詞法分析獲取Token序列。 </p><p><b> 3.2.2數(shù)據(jù)結(jié)構(gòu)</b></p><p> 詞法分析階段的代碼被封裝成一個(gè)類——Lexical,Token中主要是Lexical類的聲明代碼,Lexical.cs中主要是Lexical類的實(shí)現(xiàn)代碼。Le
24、xical類對(duì)外提供的函數(shù)主要有:</p><p> static public int RecogId(string str, int i),</p><p> static public int RecogDig(string str,int i),</p><p> static public int RecogOperator(string str,
25、int i),</p><p> static public int RecogBound(string str, int i),</p><p> 以上幾個(gè)函數(shù)構(gòu)成了詞法分析的骨架,在Lexical類中還有其他成員變量和函數(shù),主要作為這三個(gè)函數(shù)處理過程的中間步驟,為這三個(gè)函數(shù)服務(wù)。Lexical類的代碼結(jié)構(gòu)和主要的成員變量和函數(shù)及其含義如下圖所示:</p><p&
26、gt;<b> 3.2.3算法</b></p><p> 算法的基本任務(wù)是從字符串表示的源程序中識(shí)別出具有獨(dú)立意義的單詞符號(hào),其基本思想是根據(jù)掃描到單詞符號(hào)的第一個(gè)字符的種類,拼出相應(yīng)的單詞符號(hào)。</p><p><b> 主程序示意圖:</b></p><p> 主程序示意圖如圖3-1所示。</p>
27、<p> ⑴ 關(guān)鍵字表的初值。</p><p> 關(guān)鍵字作為特殊標(biāo)識(shí)符處理,把它們預(yù)先安排在一張表格中(稱為關(guān)鍵字表),當(dāng)掃描程序識(shí)別出標(biāo)識(shí)符時(shí),查關(guān)鍵字表。如能查到匹配的單詞,則該單詞為關(guān)鍵字,否則為一般標(biāo)識(shí)符。</p><p> ?。?)程序中需要用到的主要變量為type和number</p><p> 掃描子程序的算法思想:</p>
28、;<p><b> 首先設(shè)置3個(gè)變量:</b></p><p> ?、賢oken用來存放構(gòu)成單詞符號(hào)的字符串;</p><p> ?、趎umber用來整型單詞;</p><p> ?、踭ype用來存放單詞符號(hào)的種別碼。</p><p><b> Token定義</b></p&
29、gt;<p><b> Token定義:</b></p><p> Token類型(TokenType):</p><p> 3.3 語法分析模塊</p><p><b> 3.3.1功能</b></p><p> 語法分析是編譯過程的一個(gè)邏輯階段。語法分析的功能是在詞法分析
30、的基礎(chǔ)上將單詞序列組合成各類語法短語,如“程序”,“語句”,“表達(dá)式”等等.語法分析程序判斷源程序在結(jié)構(gòu)上是否正確.源程序的結(jié)構(gòu)由上下文無關(guān)文法描述. </p><p> 3.3.2 數(shù)據(jù)結(jié)構(gòu)</p><p> 下圖為實(shí)現(xiàn)語法分析的類Grammar,屬性與方法的作用都已說明</p><p><b> 3.3.3算法</b></p&g
31、t;<p><b> 1.文法</b></p><p> 下面終結(jié)符與非終結(jié)符意義</p><p><b> B程序開始 </b></p><p> Z 數(shù)據(jù)類型,如int,char,float等</p><p><b> V 標(biāo)識(shí)符</b></p
32、><p><b> S 語句</b></p><p><b> P 語句塊</b></p><p><b> E 加減算術(shù)表達(dá)式</b></p><p><b> D 逗號(hào)表達(dá)式</b></p><p><b> T
33、 乘除算術(shù)表達(dá)式</b></p><p><b> C 關(guān)系表達(dá)式</b></p><p><b> L 邏輯表達(dá)式</b></p><p><b> Q 標(biāo)識(shí)符或圓括號(hào)</b></p><p><b> e 表示空</b></p
34、><p><b> i 表示標(biāo)識(shí)符</b></p><p><b> 函數(shù)文法 </b></p><p> B----ZV()S</p><p><b> 語句塊文法</b></p><p><b> P----SP|e</b&
35、gt;</p><p><b> S----{P}</b></p><p><b> 語句文法</b></p><p><b> 表達(dá)式語句文法</b></p><p> S----V=E </p><p><b> goto語句文
36、法</b></p><p> S----i:S </p><p> S----goto i</p><p><b> if語句文法</b></p><p> S----if(E)S[else S]</p><p><b> while語句文法</b>
37、</p><p> S----while(E)S</p><p><b> 聲明語句文法</b></p><p><b> S----ZVD</b></p><p> D----,VD|=ED|e</p><p><b> 表達(dá)式文法</b>&
38、lt;/p><p> E----T|E+T|E-T</p><p> T----F|T*F|T/F</p><p> C----C|C<L|C>L|C==C|C<= L|C>=L</p><p> L----Q|L&&Q|L||Q</p><p> Q----i|(E)|!
39、Q</p><p> 2.遞歸下降程序流程圖</p><p> 對(duì)應(yīng)于每個(gè)文法編寫如下遞歸下降子程序</p><p><b> 主程序(B)</b></p><p><b> 3.4 符號(hào)表模塊</b></p><p><b> 3.4.1功能</b
40、></p><p> 進(jìn)行符號(hào)表的儲(chǔ)存,添加,更新,查找,保存標(biāo)識(shí)符活躍信息以及輸出。</p><p> 3.4.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.4.3算法</b></p><p><b> 3.5 四元式模塊</b></p><p><b&g
41、t; 3.5.1功能</b></p><p> 四元式為中間代碼,編譯程序進(jìn)行完語義分析后,先生成中間代碼作為過渡,此時(shí)中間代碼與目標(biāo)代碼已經(jīng)比較相似</p><p> 3.5.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.5.3算法</b></p><p> 3.6語義動(dòng)作分析模塊</p>
42、;<p><b> 3.6.1功能</b></p><p> 在語法分析中嵌入相應(yīng)的語義動(dòng)作,生成四元式</p><p> 3.6.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.6.3算法</b></p><p> GEQ(+)(-)(*)(/) (+,i1,i2,t
43、)</p><p><b> PUSH(i)</b></p><p> ASSI(=) (=,t,_,POP)</p><p> LABER(i) (lb,_,_,i)</p><p> GOTO(i) (gt,_,_,i)</p><p&
44、gt; IF(if) (if,a,_,_)</p><p> EL(el) (el,_,_,_)</p><p> IE(ie) (ie,_,_,_)</p><p> WH() (wh,_,_,_)</p><p> DO()
45、 (do,a,_,_)</p><p> WE(we) (we,_,_,_) </p><p> 3.7 錯(cuò)誤處理模塊</p><p><b> 3.7.1功能</b></p><p> 保存運(yùn)行時(shí)發(fā)現(xiàn)的錯(cuò)誤,儲(chǔ)存行號(hào)已經(jīng)詳細(xì)信息并輸出。</p>
46、<p> 3.7.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.7.3算法</b></p><p> public static void AddErrorMessage(int lineno,string content)函數(shù)用作在發(fā)現(xiàn)錯(cuò)誤時(shí)保存錯(cuò)誤信息以及行號(hào)。</p><p> public static string P
47、rintErrorList()把所有發(fā)現(xiàn)的錯(cuò)誤格式化后統(tǒng)一輸出。</p><p> 錯(cuò)誤信息在語法分析,語義分析,符號(hào)表檢錯(cuò)中添加。</p><p> 3.8 目標(biāo)代碼模塊</p><p><b> 3.8.1功能</b></p><p> 目標(biāo)代碼生成把優(yōu)化后的中間代碼變換成目標(biāo)代碼,此處的目標(biāo)代碼為匯編代碼,
48、采用單寄存器生成目標(biāo)代碼</p><p> 3.8.2 數(shù)據(jù)結(jié)構(gòu)</p><p><b> 3.8.3算法</b></p><p> 對(duì)于一個(gè)基本塊有如下流程圖</p><p> W:操作符,B:第一操作數(shù),C:第二操作數(shù),R:寄存器</p><p><b> 結(jié)論</b
49、></p><p><b> 網(wǎng)上找一段話抄上</b></p><p><b> 測(cè)試</b></p><p><b> 測(cè)試打開文件</b></p><p><b> 測(cè)試保存文件</b></p><p> 如果沒
50、打開文件,直接敲代碼,點(diǎn)保存時(shí)會(huì)彈出另存為窗口</p><p> 測(cè)試錯(cuò)誤檢測(cè),程序缺少main函數(shù)的類型,錯(cuò)誤列表中顯示第一行函數(shù)缺少錯(cuò)誤類型。</p><p> 測(cè)試錯(cuò)誤檢測(cè),程序缺少分號(hào),錯(cuò)誤列表中顯示該行缺少語句結(jié)束標(biāo)志';'</p><p> 單擊錯(cuò)誤列表,會(huì)自動(dòng)選定錯(cuò)誤行</p><p> 編譯成功,生成并
51、顯示token串、符號(hào)表、四元式與目標(biāo)代碼</p><p> 測(cè)試if與while語句,而且while嵌套在if當(dāng)中</p><p> 測(cè)試goto語句,結(jié)果正確。</p><p> 測(cè)試優(yōu)化,輸入課件中的代碼,結(jié)果與課件一樣</p><p><b> 6. 參考文獻(xiàn)。</b></p><p&
52、gt; 1、陳火旺.《程序設(shè)計(jì)語言編譯原理》(第3版). 北京:國(guó)防工業(yè)出版社.2000.</p><p> 2、美 Alfred V.Aho Ravi Sethi Jeffrey D. Ullman著.李建中,姜守旭譯.《編譯原理》.北京:機(jī)械工業(yè)出版社.2003.</p><p> 3、美 Kenneth C.Louden著.馮博琴等譯.《編譯原理及實(shí)踐》.北京:機(jī)械工業(yè)出版社.
53、2002.</p><p> 4、金成植著.《編譯程序構(gòu)造原理和實(shí)現(xiàn)技術(shù)》. 北京:高等教育出版社. 2002.</p><p> 7. 收獲、體會(huì)和建議。</p><p> 對(duì)于編譯原理的這次課程設(shè)計(jì),自己經(jīng)歷了從剛開始的不懂明白任務(wù)的要求和內(nèi)容理論知識(shí)的了解開始著手寫代碼完成基本功能根據(jù)DFA及自頂向下等理論修改完善代碼等這些過程。</p>
54、<p> 自己著手寫詞法分析的時(shí)候還不清楚詞法分析的任務(wù)內(nèi)容,還不知道詞法分析的結(jié)果是什么,詞法分析出錯(cuò)的情況和類型有哪些,也總是將詞法分析和語法分析混在一起,不明白哪些錯(cuò)誤在詞法分析中報(bào),哪些錯(cuò)誤在語法分析中判斷,后來經(jīng)過查書、網(wǎng)上資料、請(qǐng)教同學(xué)等途徑逐步清晰了詞法分析的工作內(nèi)容是從源代碼文件中獲取出Token,供語法分析使用。在充分了解了語法分析需要哪些信息時(shí),我才真正了解了詞法分析的工作內(nèi)容和目標(biāo),才知道詞法分析需要完
55、成哪些任務(wù)獲取到哪些信息。充分了解了詞法分析的任務(wù)之后,就開始理論知識(shí)的學(xué)習(xí)。經(jīng)過揣摩書上的例子,自己理解和掌握了怎么設(shè)計(jì)過濾注釋和分析程序中Token的DFA,于是開始根據(jù)設(shè)計(jì)好的DFA進(jìn)行編碼,最后經(jīng)過調(diào)試已經(jīng)可以正確地完成詞法階段的任務(wù)了。這只是詞法分析的原始代碼,在之后還進(jìn)行了兩次徹底的改動(dòng)。雖然之前寫的詞法分析的代碼已經(jīng)完成了詞法分析的需求,也是根據(jù)DFA的原理編寫的,但是在代碼結(jié)構(gòu)上卻難以體現(xiàn),在對(duì)書上的根據(jù)已知DFA寫代碼
56、的例子進(jìn)行了詳細(xì)的研究之后,發(fā)現(xiàn)自己的代碼并沒有像書上那樣完全按照所依據(jù)的DFA各狀態(tài)轉(zhuǎn)移的關(guān)系進(jìn)行編寫,所以對(duì)代碼進(jìn)行了重寫,像書上一樣嚴(yán)格</p><p> 在寫語法分析的時(shí)候,已經(jīng)對(duì)編譯器的語法分析的內(nèi)容有了一定的了解,所以直接進(jìn)行了理論的學(xué)習(xí)。首先自己對(duì)遞歸向下分析法進(jìn)行了學(xué)習(xí),將書上的幾個(gè)遞歸向下分析的偽代碼看過之后,自己對(duì)遞歸向下的分析方法的原理有了初步的認(rèn)識(shí),大概知道了根據(jù)文法怎么分析,但是對(duì)于如
57、何編寫代碼卻還是難以下手,于是就對(duì)照TINY語言的文法看了幾遍書后面的TINY語言的遞歸向下分析的語法分析程序,這樣就基本知道了C-語言的語法分析程序怎么寫。由于C-語言給出的文法有左遞歸存在,于是自己將存在左遞歸的文法改寫成EBNF的形式,并據(jù)此進(jìn)行代碼編寫。由于在編寫代碼的過程中需要確定分析是否正確或選擇多個(gè)文法中的某一個(gè)文法進(jìn)行分析,有時(shí)必須探測(cè)需要的或下一個(gè)Token的類型,在這種情況下需要求First集合,在推導(dǎo)中若存在emp
58、ty,又需要求Follow集合,所以這樣又需要我了解First集合和Follow集合,自己在程序中也根據(jù)求出的First集合和Follow集合進(jìn)行判斷,以確定程序的走向。在編寫過程中,還有一類問題,就是存在公共左因子,如文法expression→ var = expression | simple-expr</p><p> 通過這次的編譯原理課程的學(xué)習(xí)和實(shí)踐,自己獲益良多。首先最基本的成果是完成了課程設(shè)計(jì)的任
59、務(wù),實(shí)現(xiàn)了編譯器的詞法分析和語法分析階段的功能,詞法分析主要能過濾注釋、分析出語法分析階段需要的Token并滿足語法階段的所有要求,能夠判別詞法分析階段是否出錯(cuò)和出錯(cuò)類型和位置。語法分析主要能根據(jù)遞歸向下的分析思想和C-文法對(duì)詞法分析獲取的Token進(jìn)行語法分析,能夠構(gòu)造出語法樹,能夠判別語法分析過程中是否出錯(cuò)以及出錯(cuò)位置和錯(cuò)誤類型。</p><p> 由于在編寫程序過程中,涉及到了正則表達(dá)式、DFA、提取公共
60、左因子、消除左遞歸、EBNF、求First集合和Follow集合、遞歸向下分析方法以及編程語言方面的知識(shí),所以,通過本次的課程設(shè)計(jì)的實(shí)踐,使得自己對(duì)編譯原理這門課的許多知識(shí)點(diǎn)有了更加深刻和具體的理解,而不再只限制于做題。此外,對(duì)以前那些已掌握的知識(shí)有了溫習(xí)和動(dòng)手鍛煉的機(jī)會(huì)。如:以前在編譯原理課上雖然知道First集合和Follow集合怎么求的,卻不知道First集合和Follow集合到底是干什么的,通過編寫程序自己明白了他們的實(shí)際作用,
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 編譯原理課程設(shè)計(jì)--一個(gè)簡(jiǎn)單文法的編譯器的設(shè)計(jì)與實(shí)現(xiàn)
- 編譯原理課程設(shè)計(jì)---一個(gè)簡(jiǎn)單編譯器的設(shè)計(jì)與分析
- 編譯原理課程設(shè)計(jì)報(bào)告-簡(jiǎn)單文法的編譯器的設(shè)計(jì)與實(shí)現(xiàn)
- 編譯原理課程設(shè)計(jì)---簡(jiǎn)單編譯器的設(shè)計(jì)與實(shí)現(xiàn)
- 編譯原理課程設(shè)計(jì)報(bào)告(一個(gè)完整的編譯器)
- 編譯原理課程設(shè)計(jì)任務(wù)書--一個(gè)簡(jiǎn)單的編譯器的設(shè)計(jì)與分析
- 編譯原理課程設(shè)計(jì)---編譯器的實(shí)現(xiàn)
- 編譯原理課程設(shè)計(jì)報(bào)告--編譯器實(shí)現(xiàn)
- 編譯原理課程設(shè)計(jì)--編譯器
- 編譯原理課程設(shè)計(jì)____c語言編譯器的實(shí)現(xiàn)-
- 編譯原理課程設(shè)計(jì)---c語言編譯器的實(shí)現(xiàn)
- 編譯原理課程設(shè)計(jì)--c語言編譯器實(shí)現(xiàn)
- 編譯原理課程設(shè)計(jì)--c語言編譯器實(shí)現(xiàn)
- c語言編譯器實(shí)現(xiàn)-編譯原理課程設(shè)計(jì)
- 編譯原理課程設(shè)計(jì)報(bào)告_編譯器
- 編譯原理課程設(shè)計(jì)報(bào)告---編譯器功能的實(shí)現(xiàn)
- 編譯原理課程設(shè)計(jì)---s語言的編譯器的設(shè)計(jì)與實(shí)現(xiàn)
- c語言編譯器前端的設(shè)計(jì)與實(shí)現(xiàn)課程設(shè)計(jì)
- 編譯原理課程設(shè)計(jì)---小型程序設(shè)計(jì)語言編譯器的設(shè)計(jì)與實(shí)現(xiàn)
- 編譯原理課程的設(shè)計(jì)--c語言編譯器
評(píng)論
0/150
提交評(píng)論