![編譯原理——引論_第1頁](http://file4.renrendoc.com/view/c6ad1e11b3566a608ee8688888259b9c/c6ad1e11b3566a608ee8688888259b9c1.gif)
![編譯原理——引論_第2頁](http://file4.renrendoc.com/view/c6ad1e11b3566a608ee8688888259b9c/c6ad1e11b3566a608ee8688888259b9c2.gif)
![編譯原理——引論_第3頁](http://file4.renrendoc.com/view/c6ad1e11b3566a608ee8688888259b9c/c6ad1e11b3566a608ee8688888259b9c3.gif)
![編譯原理——引論_第4頁](http://file4.renrendoc.com/view/c6ad1e11b3566a608ee8688888259b9c/c6ad1e11b3566a608ee8688888259b9c4.gif)
![編譯原理——引論_第5頁](http://file4.renrendoc.com/view/c6ad1e11b3566a608ee8688888259b9c/c6ad1e11b3566a608ee8688888259b9c5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、第一章 引 論編譯原理南京大學計算機科學與技術(shù)系戴新宇課程概要戴新宇 daixinyu學時:72學時(課堂)學分:4周三: 8-10am,周五 10-12am 計樓228教材:編譯原理(龍書第二版)講義:/daixinyu/compiler.htm助教: .課程考核:課堂課后作業(yè)實習項目 為什么要學這門課?compiler我們能學到什么?目標:掌握編譯原理理論和技術(shù)形式語言與自動機,屬性文法等能夠幫助我們更好的理解程序設(shè)計語言和機器體系結(jié)構(gòu)幫助我們寫出更加高效的程序什么是編譯器一個編譯器就是一個程序,讀入以某一種語言(源語言)編寫的程序,并把該程序翻譯成為一個等價的、用另一種語言(目標語言)編
2、寫的程序。如果翻譯過程發(fā)現(xiàn)源程序有錯,則報錯狹義: 程序設(shè)計語言 機器代碼廣義:程序變換 C+ C 匯編 Python C編譯器源程序目標程序編譯器簡介編譯器 vs. 解釋器編譯器的結(jié)構(gòu)編譯的構(gòu)造工具編譯器源程序目標程序編譯器編譯器 源程序 目標程序效率高,一次編譯,多次運行通常目標程序是可執(zhí)行的 程序輸出 程序輸入解釋器直接利用用戶提供的輸入,執(zhí)行源程序中指定的操作。不生成目標程序,而是根據(jù)源程序的語義直接運行。邊解釋,邊執(zhí)行,錯誤診斷效果好。解釋器 源程序 程序輸入 程序輸出編譯器 vs. 解釋器Java結(jié)合了兩者:Javac Hello.javaJava Hello典型語言(如C)的編譯
3、預處理器匯編器鏈接器加載器CompilerObject file (.o .obj .dcu)LinkerAssemblerlibraries (.lib)assembly file (.a .asm)executable file (.exe)source file (.c .pas )OS (.dll, .so)Loaderprocess編譯器簡介編譯器 vs. 解釋器編譯器的結(jié)構(gòu)編譯的構(gòu)造工具編譯器的結(jié)構(gòu)分析部分(Analysis)源程序 - 語法結(jié)構(gòu) - 中間表示搜集源程序中的相關(guān)信息,放入符號表分析、定位程序中可能存在的錯誤信息(語法、語義錯誤)又稱編譯器的前端(front end)
4、,是于機器無關(guān)的部分綜合部分(Synthesis)根據(jù)符號表和中間表示構(gòu)造目標程序又稱編譯器的后端(back end),是于機器相關(guān)的部分編譯器中的若干步驟每個步驟把源程序的一種表示方式轉(zhuǎn)換成另一種表示方式。實踐中,某些中間表示不需要明確的構(gòu)造出來。符號表存放源程序的相關(guān)信息,可由各個步驟使用符號表管理記錄源程序中使用的變量的名字,收集各種屬性名字的存儲分配類型作用域過程名字的參數(shù)數(shù)量、參數(shù)類型等等符號表可由編譯器的各個步驟使用詞法分析(lexical analysis, scanning)詞法分析/掃描讀入源程序的字符流,輸出有意義的詞素(lexeme)基于詞素,產(chǎn)生詞法單元: token-
5、name由語法分析步驟使用attribute-value指向相應(yīng)的符號表條目,由語義分析/代碼生成步驟使用例子position = initial + rate * 60 語法分析(syntax analysis/parsing)詞法分析后,需要得到詞素序列的語法結(jié)構(gòu)語法分析/解析根據(jù)各個詞法單元的第一個分量來創(chuàng)建樹形中間表示形式。通常是語法樹(syntax tree)指出了詞法單元流的語法結(jié)構(gòu)。語義分析(Semantic Analysis)得到語義(meaning),對于編譯器來說比較難語義分析使用語法樹和符號表中的信息,檢查源程序是否滿足語言定義的語義約束。同時收集類型信息,用于代碼生成。
6、類型檢查,類型轉(zhuǎn)換。語義分析(Interesting examples)Jack said Jerry left his assignment at home.Jack said Jack left his assignment at home?中間代碼生成(Intermediate-Code Generation)根據(jù)語義分析的輸出,生成類機器語言的中間表示三地址代碼:每個指令最多包含三個運算分量t1 = inttofloat(60); t2 = id3 * t1; t3 = id2 + t2;代碼優(yōu)化(Code Optimization)通過對中間代碼的分析,改進中間代碼,得到更好的目標代
7、碼運行的更快、占用更少的內(nèi)存:少占資源優(yōu)化有具體的設(shè)計目標代碼生成(Code Generation)把中間表示形式映射到目標語言寄存器的分配指令選擇內(nèi)存分配編譯器的趟(Pass)趟:以文件為輸入輸出單位的編譯過程的個數(shù),每趟可由一個或若干個步驟構(gòu)成“步驟”是邏輯組織方式“趟”和具體的實現(xiàn)相關(guān)編譯器簡介編譯器 vs. 解釋器編譯器的結(jié)構(gòu)編譯的構(gòu)造工具編譯器的構(gòu)造工具掃描器的生成器: lex/flex根據(jù)一個語言的詞法單元的正則表達式描述生成詞法分析器語法分析器的生成器: yacc/bison根據(jù)一個程序設(shè)計語言的語法描述自動生成語法分析器語法制導的翻譯引擎生成一組用于遍歷分析樹并生成中間代碼的程
8、序代碼生成器的生成器依據(jù)中間語言的每個運算如何翻譯成目標機上機器語言的一組規(guī)則,生成一個代碼生成器數(shù)據(jù)流分析引擎收集數(shù)據(jù)流信息,用于優(yōu)化編譯器構(gòu)造工具集編譯器源程序目標程序編譯器的處理對象-程序語言程序設(shè)計語言語言的代分類第一代語言:機器語言第二代語言:匯編語言第三代語言:高級程序設(shè)計語言Fortran, Pascal, Lisp, Modula, C第四代:特定應(yīng)用語言:NOMAD, SQL, Postscript第五代:基于邏輯和約束的語言,Prolog、OPS5面向?qū)ο笳Z言Simula, Smalltalk, Modula3, C+, Object Pascal, Java, C#數(shù)據(jù)抽
9、象、繼承腳本語言程序設(shè)計語言和編譯器之間的關(guān)系程序設(shè)計語言的新發(fā)展向編譯器設(shè)計者提出新要求設(shè)計相應(yīng)的算法和表示方法來翻譯和支持新的語言特征通過降低高級語言的執(zhí)行開銷,推動這些高級語言的使用編譯器設(shè)計者還需要更好地利用新硬件的能力。程序設(shè)計語言編譯器編譯技術(shù)的應(yīng)用(1)高級程序設(shè)計語言的實現(xiàn)高級程序設(shè)計語言的抽象層次的提高有利于編程,但是直接生成的代碼卻相對低效率聚合類型/高級控制流/面向?qū)ο?垃圾自動收集機制針對計算機體系結(jié)構(gòu)的優(yōu)化并行性:指令級并行,處理器層次并行內(nèi)存層次結(jié)構(gòu)新體系結(jié)構(gòu)的設(shè)計RISC專用體系結(jié)構(gòu)一個新的體系結(jié)構(gòu)特征能否被充分利用,取決于編譯技術(shù)編譯技術(shù)的應(yīng)用(2)程序翻譯二進
10、制翻譯/硬件合成/數(shù)據(jù)查詢解釋器/編譯后模擬軟件生產(chǎn)率工具類型檢查邊界檢查內(nèi)存管理工具程序設(shè)計語言的基礎(chǔ)概念(1)靜態(tài)/動態(tài)靜態(tài):語言策略支持編譯器靜態(tài)決定某個問題動態(tài):只允許在程序運行時刻作出決定Java類聲明中的static指明了變量的存放位置可靜態(tài)確定。作用域x的一個聲明的作用域是指程序中的一個區(qū)域,其中對x的使用都指向這個聲明。靜態(tài)作用域:通過靜態(tài)閱讀程序即可確定作用域動態(tài)作用域:程序運行時,同一個對x的使用會指向好幾個x的聲明中的一個程序設(shè)計語言的基礎(chǔ)概念(2)環(huán)境與狀態(tài)環(huán)境:是從名字到存儲位置的映射狀態(tài):從內(nèi)存位置到它們的值的映射環(huán)境的改變需要遵守語言的作用域規(guī)則程序設(shè)計語言的基礎(chǔ)概念(3)靜態(tài)作用域和塊結(jié)構(gòu)C族語言使用靜態(tài)作用域。C語言程序由頂層的變量、函數(shù)聲明組成函數(shù)內(nèi)部可以聲明變量(局部變量/參數(shù)),這些聲明的作用域在它出現(xiàn)的函數(shù)內(nèi)一個頂層聲明的作用域包括其后的所有程序。除去那些具有同樣名字的變量聲明的函數(shù)體。作用域規(guī)則基于程序結(jié)構(gòu),聲明的作用域由它在程序中的位置隱含決定。也通過public、pr
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度搬運工培訓意外免責協(xié)議范本2篇
- 注塑機出口售后保障協(xié)議書(2篇)
- 法律顧問合同范本(2篇)
- 2025年度高速鐵路建設(shè)項目外來施工安全防護協(xié)議
- 二零二五年度跨國能源貿(mào)易風險防控協(xié)議3篇
- 2025年中國氮氫爐市場調(diào)查研究報告
- 2025年有機茶葉項目可行性研究報告
- 2025年建筑排水UPVC管阻火圈項目可行性研究報告
- 二零二五年度新型城鎮(zhèn)化土地使用權(quán)出讓合同
- 2025至2030年黑瑪瑙立方體斜串絲線項鏈項目投資價值分析報告
- 2023年中國農(nóng)業(yè)銀行應(yīng)急預案大全
- 村衛(wèi)生室2023年度績效考核評分細則(基本公共衛(wèi)生服務(wù))
- 關(guān)聯(lián)公司合作合同
- 【建模教程】-地質(zhì)統(tǒng)計學礦體建模簡明教材
- PSM工藝安全管理
- 7天減肥餐食譜給你最能瘦的一周減肥食譜
- 最新北師大版八年級數(shù)學下冊教學課件全冊
- 危險化學品儲存柜安全技術(shù)及管理要求培訓
- 2023湖北成人學位英語考試真題及答案1
- Q∕SY 06342-2018 油氣管道伴行道路設(shè)計規(guī)范
- 物業(yè)管理企業(yè)用工風險與防范對策
評論
0/150
提交評論