版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、<p> 附1 成績: </p><p> 畢業(yè)設(shè)計 (論文)文獻綜述</p><p> 院 (系):信息與控制工程學(xué)院 </p><p> 專業(yè)班級: 計算機0801 </p><p> 畢 業(yè) 設(shè)
2、 計論 文 方 向 : </p><p> 綜述題目:基于Java的小型編譯器前端的設(shè)計與開發(fā)文獻綜述</p><p> 基于Java的小型編譯器前端的設(shè)計與開發(fā)文獻綜述</p><p><b> 摘要:</b></p><p> 21世紀是電腦發(fā)展的時代,從事軟件開發(fā)的人越來越多,
3、使用的開發(fā)軟件和開發(fā)環(huán)境也不盡相同,但是不論是哪種開發(fā)環(huán)境,都少不了使用編譯器。包括常用的C語言。</p><p> 編譯器(Compiler),是一種電腦程式,它會將用某種編程語言寫成的源代碼(原始語言),轉(zhuǎn)換成另一種編程語言(目標(biāo)語言)。它主要的目的是將便于人編寫,閱讀,維護的高級計算機語言所寫作的源代碼程式,翻譯為計算機能解讀、運行的低階機器語言的程序,也就是執(zhí)行檔。編譯器將原始程序(Source pro
4、gram)作為輸入,翻譯產(chǎn)生使用目標(biāo)語言(Target language)的等價程序</p><p> 一個現(xiàn)代編譯器的主要工作流程:源代碼 (source code) → 預(yù)處理器 (preprocessor) → 編譯器 (compiler) → 匯編程序 (assembler) → 目標(biāo)代碼 (object code) → 鏈接器 (Linker) → 可執(zhí)行程序 (executables)。低階機器語言
5、是計算機能直接解讀、運行的。編譯器將源程序作為輸入,翻譯產(chǎn)生使用目標(biāo)語言的等價程序。源代碼一般為高級語言 , 如Pascal、C、C++、C#、Java等,而目標(biāo)語言則是匯編語言或目標(biāo)機器的目標(biāo)代碼,有時也稱作機器代碼。</p><p> 論文首先論述編譯器的發(fā)展歷程開發(fā)背景和研究的目的與意義,然后對本次編譯器前端設(shè)計進行簡單介紹,同時闡述該編譯器所具有的的功能,以及實現(xiàn)所用的工具和參考的資料</p>
6、;<p> 關(guān)鍵詞:編譯器,源代碼,目標(biāo)代碼</p><p><b> 1. 前言</b></p><p> 編譯程序是現(xiàn)代計算機系統(tǒng)的基本組成部分之一。編譯程序一般由詞法分析程序、語法分析程序、語義分析程序、中間代碼生成程序、目標(biāo)代碼生成程序、代碼優(yōu)化程序、表格管理程序和出錯處理程序等成分構(gòu)成。</p><p> 在編譯
7、原理的教學(xué)過程中,語法和語義分析階段關(guān)于算法的講解都需要對算法進行詳細的分析,包括算法條件的判斷,文法分析表的構(gòu)造過程,文法分析表的具體生成,針對文法的句子的分析過程等。這些過程往往需要占用大量時間來分析、制表等。</p><p> 2.C語言編譯器的發(fā)展歷程</p><p> C語言是在70年代初問世的。一九七八年由美國電話電報公司(AT&T)貝爾實驗室正式發(fā)表了C語言。同時
8、由B.W.Kernighan和D.M.Ritchit合著了著名的“THE C PROGRAMMING LANGUAGE”一書。通常簡稱為《K&R》,也有人稱之為《K&R》標(biāo)準。但是,在《K&R》中并沒有定義一個完整的標(biāo)準C語言,后來由美國國家標(biāo)準學(xué)會在此基礎(chǔ)上制定了一個C 語言標(biāo)準,于一九八三年發(fā)表。通常稱之為ANSI C</p><p> C語言是一種結(jié)構(gòu)化語言。它層次清晰,便于按模塊
9、化方式組織程序,易于調(diào)試和維護。C語言的表現(xiàn)能力和處理能力極強。它不僅具有豐富的運算符和數(shù)據(jù)類型,便于實現(xiàn)各類復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。它還可以直接訪問內(nèi)存的物理地址,進行位(bit)一級的操作。由于C語言實現(xiàn)了對硬件的編程操作,因此C語言集高級語言和低級語言的功能于一體。既可用于系統(tǒng)軟件的開發(fā),也適合于應(yīng)用軟件的開發(fā)。此外,C語言還具有效率高,可移植性強等特點。因此廣泛地移植到了各類各型計算機上,從而形成了多種版本的C語言</p>
10、<p> 目前最流行的C語言編譯器有以下幾種: </p><p> ·GNU Compiler Collection 或稱 GCC </p><p> ·Microsoft C 或稱 MS C </p><p> ·Borland Turbo C 或稱 Turbo C </p><p> 這
11、些C語言版本不僅實現(xiàn)了ANSI C標(biāo)準,而且在此基礎(chǔ)上各自作了一些擴充,使之更加方便、完美</p><p><b> 3本次設(shè)計實現(xiàn)目標(biāo)</b></p><p> 本次論文要求設(shè)計與開發(fā)一個能夠識別C語言子集的小型編譯器前端系統(tǒng),按照面向?qū)ο蟮乃枷肱c技術(shù)完成需求分析與系統(tǒng)設(shè)計,要求對給定的C語言子集能夠進行詞法分析、語法分析、語義分析及語法制導(dǎo)的中間代碼的生成,中
12、間代碼以三地址碼形式生成。</p><p> 編譯器前端主要負責(zé)解析(parse)輸入的源代碼,由語法分析器和語意分析器協(xié)同工作。語法分析器負責(zé)把源代碼中的‘單詞’(Token)找出來,語義分析器把這些分散的單詞按預(yù)先定義好的語法組裝成有意義的表達式,語句 ,函數(shù)等等。 例如“a = b + c;”前端語法分析器看到的是“a, =, b , +, c;”,語意分析器按定義的語法,先把他們組裝成表達式“b + c
13、”,再組裝成“a = b + c”的語句。 前端還負責(zé)語義(semantic checking)的檢查,例如檢測參與運算的變量是否是同一類型的,簡單的錯誤處理。最終的結(jié)果常常是一個抽象的語法樹(abstract syntax tree,或 AST),最后通過中間代碼生成器將語法分析樹,轉(zhuǎn)化為三地址代碼,這樣后端可以在此基礎(chǔ)上進一步優(yōu)化,處理。</p><p><b> 編譯器翻譯程序步驟</b&
14、gt;</p><p> 編譯器內(nèi)部包括了許多步驟或稱為階段(phase),它們執(zhí)行不同的邏輯操作。將這些階段設(shè)想為編譯器中一個個單獨的片斷是很有用的,盡管在應(yīng)用中它們是經(jīng)常組合在一起的,但它們確實是作為單獨的代碼操作來編寫的。圖1 - 1是編譯器中的階段和與以下階段(文字表、符號表和錯誤處理器)或其中的一部分交互的3個輔助部件。這里只是簡要地描述一下每個階段,今后大家還會更詳細地學(xué)到它們(文字表和符號表在1
15、. 4節(jié)中,錯誤處理器在1 . 5節(jié))。</p><p> (1) 掃描程序(scanner)</p><p> 在這個階段編譯器實際閱讀源程序(通常以字符流的形式表示)。掃描程序執(zhí)行詞法分析(Lexical analysis):它將字符序列收集到稱作記號(token)的有意義單元中,記號同自然語言,如英語中的字詞相似。因此可以認為掃描程序執(zhí)行與拼寫相似的任務(wù)。例如在下面的代碼行(它可
16、以是C程序的一部分)中:</p><p> a [index] = 4 + 2</p><p> 這個代碼包括了1 2個非空字符,但只有8個記號:</p><p><b> a 標(biāo)識符</b></p><p><b> [ 左括號</b></p><p> i n
17、d e x 標(biāo)識符</p><p><b> ] 右括號</b></p><p><b> = 賦值</b></p><p><b> 4 數(shù)字</b></p><p><b> + 加號</b></p><p><b
18、> 2 數(shù)字</b></p><p> 每一個記號均由一個或多個字符組成,在進一步處理之前它已被收集在一個單元中。掃描程序還可完成與識別記號一起執(zhí)行的其他操作。例如,它可將標(biāo)識符輸入到符號表中,將文字(literal)輸入到文字表中(文字包括諸如3.14159265 35的數(shù)字常量,以及諸如“ Hello ,world!”的引用字符串)。</p><p> (2)
19、語法分析程序(parser)</p><p> 語法分析程序從掃描程序中獲取記號形式的源代碼,并完成定義程序結(jié)構(gòu)的語法分析(syntax analysis),這與自然語言中句子的語法分析類似。語法分析定義了程序的結(jié)構(gòu)元素及其關(guān)系。通常將語法分析的結(jié)果表示為分析樹( parse tree)或語法樹(syntax tree)。例如,還是那行C代碼,它表示一個稱為表達式的結(jié)構(gòu)元素,該表達式是一個由左邊為下標(biāo)表達式、右
20、邊為整型表達式的賦值表達式組成。這個結(jié)構(gòu)可按下面的形式表示為一個分析樹:</p><p><b> 圖2</b></p><p> 請注意,分析樹的內(nèi)部節(jié)點均由其表示的結(jié)構(gòu)名標(biāo)示出,而分析樹的葉子則表示輸入中的</p><p> 記號序列(結(jié)構(gòu)名以不同字體表示以示與記號的區(qū)別)。分析樹對于顯示程序的語法或程序元素很有幫助,但是對于表示該結(jié)
21、構(gòu)卻顯得力不從心了。分析程序更趨向于生成語法樹,語法樹是分析樹中所含信息的濃縮(有時因為語法樹表示從分析樹中的進一步抽取,所以也被稱為抽象的語法樹( abstract syntax tree))。下面是一個C賦值語句的抽象語法樹的例子:</p><p><b> 圖3</b></p><p> 請注意,在語法樹中,許多節(jié)點(包括記號節(jié)點在內(nèi))已經(jīng)消失。例如,如果知
22、道表達式是一個下標(biāo)運算,則不再需要用括號“ [”和“]”來表示該操作是在原始輸入中。</p><p> (3) 語義分析程序(semantic analyzer)</p><p> 程序的語義就是它的“意思”,它與語法或結(jié)構(gòu)不同。程序的語義確定程序的運行,但是大多數(shù)的程序設(shè)計語言都具有在執(zhí)行之前被確定而不易由語法表示和由分析程序分析的特征。這些特征被稱作靜態(tài)語義( static sem
23、antic),而語義分析程序的任務(wù)就是分析這樣的語義(程序的“動態(tài)”語義具有只有在程序執(zhí)行時才能確定的特性,由于編譯器不能執(zhí)行程序,所以它不能由編譯器來確定)。一般的程序設(shè)計語言的典型靜態(tài)語義包括聲明和類型檢查。由語義分析程序計算的額外信息(諸如數(shù)據(jù)類型)被稱為屬性(attribute),它們通常是作為注釋或“裝飾”增加到樹中(還可將屬性添加到符號表中)。在正運行的C表達式a [index] = 4 + 2中,該行分析之前收集的典型類型
24、信息可能是: a是一個整型值的數(shù)組,它帶有來自整型子范圍的下標(biāo);index則是一個整型變量。接著,語義分析程序?qū)⒂盟械淖颖磉_式類型來標(biāo)注語法樹,并檢查賦值是否使這些類型有意義了,如若沒有,則聲明一個類型匹配錯誤。在上例中,所有的類型均有意義,有關(guān)語法樹的語義分析結(jié)果可用以下注釋了的樹來表示:</p><p><b> 圖4</b></p><p> (4) 源代
25、碼優(yōu)化程序(source code optimizer)</p><p> 編譯器通常包括許多代碼改進或優(yōu)化步驟。絕大多數(shù)最早的優(yōu)化步驟是在語義分析之后完成的,而此時代碼改進可能只依賴于源代碼。這種可能性是通過將這一操作提供為編譯過程中的單獨階段指出的。每個編譯器不論在已完成的優(yōu)化種類方面還是在優(yōu)化階段的定位中都有很大的差異。在上例中,我們包括了一個源代碼層次的優(yōu)化機會,也就是:表達式4 + 2可由編譯器計算先
26、得到結(jié)果6(這種優(yōu)化稱為常量合并(constant folding))。當(dāng)然,還會有更復(fù)雜的情況。還是在上例中,通過將根節(jié)點右面的子樹合并為它的常量值,這個優(yōu)化就可以直接在(注釋)語法樹上完成:</p><p><b> 圖5</b></p><p> 盡管許多優(yōu)化可以直接在樹上完成,但是在很多情況下,優(yōu)化接近于匯編代碼線性化形式的樹更為簡便。這樣節(jié)點的變形有許多
27、,但是三元式代碼( three-address code)(之所以這樣稱呼是因為它在存儲器中包含了3個(或3個以上)位置的地址)卻是標(biāo)準選擇。另一個常見的選擇是P -代碼(P - cod e),它常用于Pascal編譯器中。在前面的例子中,原先的C表達式的三元式代碼應(yīng)是:</p><p><b> t = 4 + 2</b></p><p> a [ index]
28、 = t</p><p> ?。ㄕ堊⒁猓@里利用了一個額外的臨時變量t 存放加法的中間值)。這樣,優(yōu)化程序就將這個代碼改進為兩步。首先計算加法的結(jié)果:</p><p><b> t = 6</b></p><p> a [index] = t</p><p> 接著,將t替換為該值以得到三元語句</p>
29、<p> a [index] = 6</p><p> 圖1 - 1已經(jīng)指出源代碼優(yōu)化程序可能通過將其輸出稱為中間代碼( intermediate code)來使用三元式代碼。中間代碼一直是指一種位于源代碼和目標(biāo)代碼(例如三元式代碼或類似的線性表示)之間的代碼表示形式。但是,我們可以更概括地認為它是編譯器使用的源代碼的任何一個內(nèi)部表示。此時,也可將語法樹稱作中間代碼,源代碼優(yōu)化程序則確實能繼續(xù)在
30、其輸出中使用這個表示。有時,這個中間代碼也稱作中間表示( intermediate representation, I R)。</p><p> (5) 代碼生成器(code generator)</p><p> 代碼生成器得到中間代碼( I R),并生成目標(biāo)機器的代碼。盡管大多數(shù)編譯器直接生成目標(biāo)代碼,但是為了便于理解,本書用匯編語言來編寫目標(biāo)代碼。正是在編譯的這個階段中,目標(biāo)機器
31、的特性成為了主要因素。當(dāng)它存在于目標(biāo)機器時,使用指令不僅是必須的而且數(shù)據(jù)的形式表示也起著重要的作用。例如,整型數(shù)據(jù)類型的變量和浮點數(shù)據(jù)類型的變量在存儲器中所占的字節(jié)數(shù)或字數(shù)也很重要。在上面的示例中,現(xiàn)在必須決定怎樣存儲整型數(shù)來為數(shù)組索引生成代碼。</p><p><b> 例如,下面是所</b></p><p> 給表達式的一個可能的樣本代碼序列(在假設(shè)的匯編語言
32、中):</p><p> MOV R0, index ;; value of index -> R0</p><p> MUL R0, 2 ;; double value in R0</p><p> MOV R1, &a ;; address of a -> R1</p><p> ADD R1, R0 ;; a
33、dd R0 to R1</p><p> MOV *R1, 6 ;; constant 6 -> address in R1</p><p> 在以上代碼中,為編址模式使用了一個類似C的協(xié)定,因此& a是a的地址(也就是數(shù)組的基地址),* R 1則意味著間接寄存器地址(因此最后一條指令將值6存放在R 1包含的地址中)。這個代碼還假設(shè)機器執(zhí)行字節(jié)編址,并且整型數(shù)占據(jù)存儲器的
34、兩個字節(jié)(所以在第2條指令中用2作為乘數(shù))。</p><p> (6) 目標(biāo)代碼優(yōu)化程序(target code optimizer)</p><p> 在這個階段中,編譯器嘗試著改進由代碼生成器生成的目標(biāo)代碼。這種改進包括選擇編址模式以提高性能、將速度慢的指令更換成速度快的,以及刪除多余的操作。在上面給出的樣本目標(biāo)代碼中,還可以做許多更改:在第2條指令中,利用移位指令替代乘法(通常地
35、,乘法很費時間),還可以使用更有效的編址模式(例如用索引地址來執(zhí)行數(shù)組存儲)。</p><p> 使用了這兩種優(yōu)化后,目標(biāo)代碼就變成:</p><p> MOV R0, index ;; value of index -> R0</p><p> SHL R0 ;; double value in R0</p><p> MOV
36、 &a[R0], 6 ;; constant 6 -> address a + R0</p><p> 到這里,對編譯器階段的簡要描述就結(jié)束了,但我們還應(yīng)特別強調(diào)這些講述僅僅是示意性的,也無需表示出正在工作中的編譯器的實際結(jié)構(gòu)。編譯器在其結(jié)構(gòu)細節(jié)上確實差別很大,然而,上面講到的階段總會出現(xiàn)在幾乎所有的編譯器的某個形式上。我們還談到了用于維持每一個階段所需信息的數(shù)據(jù)結(jié)構(gòu),例如語法樹、中間代碼(假設(shè)它
37、們并不相同)、文字表和符號表。下一節(jié)是編譯器中的主要數(shù)據(jù)結(jié)構(gòu)的概覽。</p><p> 編譯器中的主要數(shù)據(jù)結(jié)構(gòu)</p><p> 當(dāng)然,由編譯器的階段使用的算法與支持這些階段的數(shù)據(jù)結(jié)構(gòu)之間的交互是非常強大的。編譯器的編寫者盡可能有效實施這些方法且不引起復(fù)雜性。理想的情況是:與程序大小成線性比例的時間內(nèi)編譯器,換言之就是,在0 ( n)時間內(nèi), n是程序大小的度量(通常是字符數(shù))。本節(jié)將
38、講述一些主要的數(shù)據(jù)結(jié)構(gòu),它們是其操作部分階段所需要的,并用來在階段中交流信息。</p><p> (1) 記號(t o k e n)</p><p> 當(dāng)掃描程序?qū)⒆址占揭粋€記號中時,它通常是以符號表示這個記號;這也就是說,作為一個枚舉數(shù)據(jù)類型的值來表示源程序的記號集。有時還必須保留字符串本身或由此派生出的其他信息(例如:與標(biāo)識符記號相關(guān)的名字或數(shù)字記號值)。在大多數(shù)語言中,掃描程
39、序一次只需要生成一個記號(這稱為單符號先行( single symbol lookahead))。在這種情況下,可以用全程變量放置記號信息;而在別的情況(最為明顯的是F O RT R A N)下,則可能會需要一個記號數(shù)組。</p><p> (2) 語法樹(syntax tre e)</p><p> 如果分析程序確實生成了語法樹,它的構(gòu)造通常為基于指針的標(biāo)準結(jié)構(gòu),在進行分析時動態(tài)分配
40、該結(jié)構(gòu),則整棵樹可作為一個指向根節(jié)點的單個變量保存。結(jié)構(gòu)中的每一個節(jié)點都是一個記錄,它的域表示由分析程序和之后的語義分析程序收集的信息。例如,一個表達式的數(shù)據(jù)類型可作為表達式的語法樹節(jié)點中的域。有時為了節(jié)省空間,這些域也是動態(tài)分配或存放在諸如符號表的其他數(shù)據(jù)結(jié)構(gòu)中,這樣就可以有選擇地進行分配和釋放。實際上,根據(jù)它所表示的語言結(jié)構(gòu)的類型(例如:表達式節(jié)點對于語句節(jié)點或聲明節(jié)點都有不同的要求),每一個語法</p><p&
41、gt; 樹節(jié)點本身都可能要求存儲不同的屬性。在這種情況下,可由不同的記錄表示語法樹中的每個節(jié)點,每個節(jié)點類型只包含與本身相關(guān)的信息。</p><p> (3) 符號表(symbol table)</p><p> 這個數(shù)據(jù)結(jié)構(gòu)中的信息與標(biāo)識符有關(guān):函數(shù)、變量、常量以及數(shù)據(jù)類型。符號表幾乎與編譯器的所有階段交互:掃描程序、分析程序或?qū)?biāo)識符輸入到表格中的語義分析程序;語義分析程序?qū)⒃黾?/p>
42、數(shù)據(jù)類型和其他信息;優(yōu)化階段和代碼生成階段也將利用由符號表提供的信息選出恰當(dāng)?shù)拇a。因為對符號表的訪問如此頻繁,所以插入、刪除和訪問操作都必須比常規(guī)操作更有效。盡管可以使用各種樹的結(jié)構(gòu),但雜湊表卻是達到這一要求的標(biāo)準數(shù)據(jù)結(jié)構(gòu)。有時在一個列表或棧中可使用若干個表格。</p><p> (4) 常數(shù)表(literal table)</p><p> 常數(shù)表的功能是存放在程序中用到的常量和字
43、符串,因此快速插入和查找在常數(shù)表中也十分重要。但是,在其中卻無需刪除,這是因為它的數(shù)據(jù)全程應(yīng)用于程序而且常量或字符串在該表中只出現(xiàn)一次。通過允許重復(fù)使用常量和字符串,常數(shù)表對于縮小程序在存儲器中的大小顯得非常重要。在代碼生成器中也需要常數(shù)表來構(gòu)造用于常數(shù)和在目標(biāo)代碼文件中輸入數(shù)據(jù)定義的符號地址。</p><p> (5) 中間代碼(intermediate code)</p><p>
44、 根據(jù)中間代碼的類型(例如三元式代碼和P -代碼)和優(yōu)化的類型,該代碼可以是文本串的數(shù)組、臨時文本文件或是結(jié)構(gòu)的連接列表。對于進行復(fù)雜優(yōu)化的編譯器,應(yīng)特別注意選擇允許簡單重組的表示。</p><p> (6) 臨時文件(t e m p o r a ry file)</p><p> 計算機過去一直未能在編譯器時將整個程序保留在存儲器中。這一問題已經(jīng)通過使用臨時文件來保存翻譯時中間步驟的
45、結(jié)果或通過“匆忙地”編譯(也就是只保留源程序早期部分的足夠信息用以處理翻譯)解決了。存儲器的限制現(xiàn)在也只是一個小問題了,現(xiàn)在可以將整個編譯單元放在存儲器之中,特別是在可以分別編譯的語言中時。但是偶爾還是會發(fā)現(xiàn)需要在某些運行步驟中生成中間文件。其中典型的是代碼生成時需要反填( b a c k p a t c h)地址。例如,當(dāng)翻譯如下的條件語句時</p><p> if x = 0 then ... else .
46、..</p><p> 在知道e l s e部分代碼的位置之前必須由文本跳到e l s e部分:</p><p><b> CMP X, 0</b></p><p> JNE NEXT ;; location of NEXT not yet known</p><p> < code for then-pa
47、rt ></p><p><b> N E X T :</b></p><p> < code for else-part ></p><p> 通常,必須為N E X T的值留出一個空格,一旦知道該值后就會將該空格填上,利用臨時文件可以很容易地做到這一點。</p><p> 4.概要設(shè)計及基本
48、功能</p><p> 本系統(tǒng)使用java語言開發(fā),主要能讀取識別c語言代碼,因此,并能對給定的C語言子集能夠進行詞法分析、語法分析、語義分析及語法制導(dǎo)的中間代碼的生成,并用圖形顯示語法分析樹,中間代碼以三地址碼形式生成。</p><p> 基本功能:1.識別C語言子集</p><p> 2.對給定的C語言子集能夠進行詞法分析</p><p
49、> 3.對給定的C語言子集能夠進行語法分析</p><p> 4.對給定的C語言子集能夠進行語義分析及語法制導(dǎo)的中間代碼</p><p> 的生成,中間代碼以三地址碼形式生成</p><p><b> 5. 總結(jié)</b></p><p> 編譯原理作為計算機專業(yè)及其重要的組成部分,理論上需要掌握有關(guān)形式語
50、言和自動機的抽象概念,技術(shù)上又要能夠熟練地利用各種數(shù)據(jù)結(jié)構(gòu)進行編程。本文通過一個實際的可視編譯器開發(fā)實例,描述了編譯器前端的實現(xiàn)方法。希望通過詞法分析和語法分析的可視化過程使得編譯原理直觀化和可視化。</p><p><b> 參考文獻</b></p><p> [1]譚浩強. C程序設(shè)計(第4版)[M].清華大學(xué)出版社,2010</p><p
51、> [2]顏志軍,欒媛媛.Java程序設(shè)計實踐教程[M]. 清華大學(xué)出版社,2011</p><p> [3]Alfred V. Aho著,趙建華等譯.編譯原理(第2版 本科教學(xué)版)[M]. 機械工業(yè)出版社,2009</p><p> [4]http://blog.csdn.net/xianyuxiaoqiang/article/details/7042679</p>
52、;<p> [5]http://www.56doc.com/computer/vb/142.html</p><p> [6]http://blog.sciencenet.cn/home.php?mod=space&uid=39686&do=blog&id=221450</p><p> [7] http://baike.baidu.com/vi
溫馨提示
- 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. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 小型c語言編譯器設(shè)計
- 基于契約式設(shè)計的Java編譯器實現(xiàn).pdf
- c語言編譯器前端的設(shè)計與實現(xiàn)課程設(shè)計
- 基于Clang編譯器前端的程序結(jié)構(gòu)分析器的設(shè)計.pdf
- 基于即時編譯器的Java語言同步優(yōu)化研究.pdf
- 編譯原理課程設(shè)計--一個簡單文法的編譯器前端的設(shè)計與實現(xiàn)
- 基于GCC開發(fā)C編譯器的研究與實踐.pdf
- 編譯原理課程設(shè)計---小型程序設(shè)計語言編譯器的設(shè)計與實現(xiàn)
- 基于GCC的DSP芯片編譯器的研究與開發(fā).pdf
- 基于LCC的嵌入式處理器編譯器設(shè)計與開發(fā).pdf
- 基于LLVM的交叉編譯器的設(shè)計與實現(xiàn).pdf
- 基于JVM的ANSIC編譯器的設(shè)計與實現(xiàn).pdf
- DEMS編譯器的設(shè)計與實現(xiàn).pdf
- VHDL編譯器的設(shè)計與研究.pdf
- sJava編譯器的設(shè)計與實現(xiàn).pdf
- 編譯原理課程設(shè)計---簡單編譯器的設(shè)計與實現(xiàn)
- MSVL編譯器的設(shè)計與實現(xiàn).pdf
- OQL編譯器的設(shè)計與實現(xiàn).pdf
- 編譯原理課程的設(shè)計--c語言編譯器
- 編譯原理課程設(shè)計---編譯器的實現(xiàn)
評論
0/150
提交評論