《北京工業(yè)大學(xué)廖湖聲編.ppt》由會(huì)員分享,可在線閱讀,更多相關(guān)《北京工業(yè)大學(xué)廖湖聲編.ppt(33頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、,北京工業(yè)大學(xué) 廖湖聲編 學(xué)時(shí):56 小時(shí)(含上機(jī):12 小時(shí)) 主頁(yè):172.21.14.209/網(wǎng)上教學(xué) 參考教材: 程序設(shè)計(jì)語(yǔ)言編譯原理 (第3版)國(guó)防工業(yè)出版社,引言,什么叫編譯程序 將高級(jí)程序設(shè)計(jì)語(yǔ)言翻譯成邏輯上等價(jià)的低級(jí)語(yǔ)言(匯編語(yǔ)言,機(jī)器語(yǔ)言)的翻譯程序 目的:提高執(zhí)行效率,編譯程序,,,源程序,目標(biāo)程序,(*.C / *.PAS),(*.OBJ / *.EXE),編譯與語(yǔ)言,編譯程序設(shè)計(jì)原理: 高級(jí)程序設(shè)計(jì)語(yǔ)言的實(shí)現(xiàn)原理 編譯技術(shù): 最具有代表性的計(jì)算機(jī)語(yǔ)言處理技術(shù) 計(jì)算機(jī)語(yǔ)言 人與計(jì)算機(jī)、計(jì)算機(jī)軟件之間的交流工具 廣義理解:軟件之間傳輸?shù)男畔?各種用途的計(jì)算機(jī)語(yǔ)言,程序設(shè)計(jì)語(yǔ)
2、言 描述程序執(zhí)行的算法 數(shù)據(jù)庫(kù)語(yǔ)言 數(shù)據(jù)定義、數(shù)據(jù)操作 機(jī)器語(yǔ)言 控制計(jì)算機(jī)的工作 命令語(yǔ)言 控制系統(tǒng)的工作 都是編譯技術(shù)的處理對(duì)象,高級(jí)程序設(shè)計(jì)語(yǔ)言的一般特征,程序結(jié)構(gòu) 子程序、函數(shù) 程序包 語(yǔ)句 條件、循環(huán)、賦值 表達(dá)式 邏輯、關(guān)系、算術(shù) 變量、常數(shù)、運(yùn)算符、函數(shù)調(diào)用 數(shù)據(jù)結(jié)構(gòu) 標(biāo)量 整數(shù)、浮點(diǎn)數(shù)、字符、字符串 數(shù)組、結(jié)構(gòu)(記錄) 抽象數(shù)據(jù)類(lèi)型 類(lèi) 編譯實(shí)現(xiàn)的任務(wù) 程序結(jié)構(gòu)與數(shù)據(jù)結(jié)構(gòu)的具體處理,高級(jí)語(yǔ)言的分類(lèi),過(guò)程式語(yǔ)言 Imperative FORTRAN、BASIC、Pascal、C 函數(shù)式語(yǔ)言 Functional LISP、ML 邏輯式語(yǔ)言 Logical Prolog 面向?qū)ο笳Z(yǔ)
3、言 Object-Oriented Smalltalk、C++、Java、Ada、C# 語(yǔ)言的實(shí)現(xiàn)都需要編譯系統(tǒng)的支持,學(xué)習(xí)內(nèi)容,語(yǔ)言結(jié)構(gòu)的描述與分析 語(yǔ)義的描述與實(shí)現(xiàn)框架 程序設(shè)計(jì)語(yǔ)言的工作原理 用途: 計(jì)算機(jī)語(yǔ)言的實(shí)現(xiàn)與設(shè)計(jì) 復(fù)雜數(shù)據(jù)處理(廣義) 特征: 十分復(fù)雜的數(shù)據(jù)處理 比較成熟的理論基礎(chǔ) 指導(dǎo)軟件設(shè)計(jì)實(shí)踐,第一章 計(jì)算機(jī)語(yǔ)言的實(shí)現(xiàn),程序的解釋執(zhí)行 如:BASIC、DOS 命令,問(wèn)題:效率低下,解釋程序,源程序,輸入數(shù)據(jù),計(jì)算結(jié)果,程序的編譯執(zhí)行,目標(biāo)程序: 機(jī)器語(yǔ)言 匯編語(yǔ)言,編譯程序,運(yùn)行系統(tǒng),目標(biāo)程序,輸入數(shù)據(jù),計(jì)算結(jié)果,源程序,1.1 編譯系統(tǒng)的需求分析,源程序的分析 詞法、語(yǔ)
4、法、語(yǔ)義 目標(biāo)程序的綜合 語(yǔ)句的翻譯、代碼生成 標(biāo)識(shí)符的綁定(binding) 變量: 存儲(chǔ)單元 函數(shù): 目標(biāo)代碼序列,1.2 編譯過(guò)程,自然語(yǔ)言的翻譯過(guò)程: I wish you success 主語(yǔ) 謂語(yǔ) 間接賓語(yǔ) 直接賓語(yǔ) 識(shí)別單詞(拼寫(xiě)正確)、語(yǔ)法檢查(順序格式)、 語(yǔ)義理解(合理)、組織譯文(符合原文、通順),一個(gè) C 程序的編譯過(guò)程,源程序: main( ) printf(“hello”); 1. 詞法分析 分析字符序列; 識(shí)別單詞(種別、屬性) 查詞法錯(cuò)誤; 標(biāo)識(shí)符登記;,結(jié)果 IDNmain ( ) IDNprintf ( STRhello ) ; ,2. 語(yǔ)法分析,分
5、析單詞序列; 識(shí)別語(yǔ)法結(jié)構(gòu); 查語(yǔ)法錯(cuò)誤; 構(gòu)造分析樹(shù);,3. 語(yǔ)義分析,確認(rèn)標(biāo)識(shí)符的屬性 類(lèi)型、作用域等 語(yǔ)義檢查 運(yùn)算的合法性、取值范圍等 子程序的靜態(tài)綁定 代碼存儲(chǔ)的相對(duì)地址 變量的靜態(tài)綁定 數(shù)據(jù)存儲(chǔ)的相對(duì)地址,程序使用的內(nèi)存空間,字符串常數(shù)hello 臨時(shí)變量 t 目標(biāo)代碼 main 編譯程序負(fù)責(zé)為各變量、常數(shù)和函數(shù)計(jì)算并分配必要的內(nèi)存空間,,,,4. 生成中間代碼,中間語(yǔ)言 簡(jiǎn)單規(guī)范 機(jī)器無(wú)關(guān) 易于優(yōu)化與轉(zhuǎn)換 按照語(yǔ)法分析樹(shù)生成中間語(yǔ)言代碼,翻譯例 Z=(X+0.48)*Y/W; 結(jié)果(三地址代碼) T1 = X + 0.48 T2 = T1 * Y Z = T2 / W,5. 中間
6、代碼優(yōu)化 中間代碼的優(yōu)化處理,以求提高執(zhí)行效率 6. 目標(biāo)代碼生成 將中間代碼轉(zhuǎn)換成目標(biāo)機(jī)上的機(jī)器指令代碼或匯編代碼,MOV R0, #12, ADD R0, #4 MUL R0, R2 匯編指令代碼,10000001 0001 1100 10000010 0001 0100 11000100 0001 0010 機(jī)器指令代碼,編譯程序的結(jié)構(gòu),源程序,目標(biāo)程序,其他模塊,表格管理 輔助語(yǔ)法檢查、語(yǔ)義檢查 完成靜態(tài)綁定、管理編譯過(guò)程 錯(cuò)誤處理 詞法:拼寫(xiě)... 語(yǔ)法:語(yǔ)句結(jié)構(gòu)、表達(dá)式結(jié)構(gòu)... 語(yǔ)義:類(lèi)型不匹配...,編譯程序的軟件結(jié)構(gòu),編譯前端 目標(biāo)機(jī)無(wú)關(guān)部分 詞法分析、語(yǔ)法分析、中間代碼生成
7、 語(yǔ)義分析、中間代碼優(yōu)化 編譯后端 目標(biāo)機(jī)相關(guān)部分 目標(biāo)代碼優(yōu)化 目標(biāo)代碼生成 多遍掃描 常見(jiàn):前段1.2.和后端1.2.,程序設(shè)計(jì)環(huán)境,集成化的程序設(shè)計(jì)環(huán)境 編輯程序 編譯程序 連接程序 ----- 將目標(biāo)程序連接成可執(zhí)行程序 調(diào)試工具 ----- 跟蹤、分析 常見(jiàn): Turbo C/C++ Visual Studio for C/C++, Basic 等 JBuilder, BlueJ,1.3 編譯技術(shù)的通用性,把復(fù)雜數(shù)據(jù)看作一條語(yǔ)句 數(shù)據(jù)格式的分析 利用詞法分析、語(yǔ)法分析方法 數(shù)據(jù)處理的框架 基于語(yǔ)法制導(dǎo)的語(yǔ)義處理框架 編譯技術(shù)可以用于各種復(fù)雜數(shù)據(jù)的分析處理,例1-1(1/2),DOS
8、命令 date 的輸出格式 例:9-2-1993、09-03-1993、9-03-93 語(yǔ)法 date month - day - year 詞法 month DIG DIG | DIG day DIG DIG | DIG year DIG DIG | DIG DIG DIG DIG,例1-1(2/2),語(yǔ)義 year(年)、month(月)、day(日) 語(yǔ)義約束條件 0 < month.value < 13 0 < day.value < 32,31,30 0 < year.value < 10000,1.4 編譯程序的生成方法,設(shè)計(jì)目標(biāo) 目標(biāo)程序小,執(zhí)行速度快。 編譯程序小,執(zhí)行速度快
9、。 診斷能力強(qiáng),可靠性強(qiáng)。 可移植性,可擴(kuò)充性。,表示翻譯程序的 T 型圖,S,T,I,源語(yǔ)言,目標(biāo)語(yǔ)言,翻譯用語(yǔ)言,1)交叉編譯,條件: 機(jī)有 語(yǔ)言的編譯程序 目的: 實(shí)現(xiàn) 機(jī)的 語(yǔ)言的編譯,1. 用 語(yǔ)言編制編譯程序(CP1.C) 機(jī)器上編譯該程序,得到(CP1.EXE) 在A機(jī)器上,運(yùn)行CP1.EXE編譯CP1.C,得到B機(jī)的C編譯程序(CP2.EXE)。,用 語(yǔ)言編制編譯程序(CP1.C) 機(jī)器上編譯該程序,得到(CP1.EXE),,手寫(xiě),可執(zhí)行,3. 在A機(jī)器上,運(yùn)行CP1.EXE編譯CP1.C, 得到B機(jī)的C編譯程序(CP2.EXE)。,A機(jī)可執(zhí)行,B機(jī)可執(zhí)行,2) 編譯程序的自展
10、技術(shù),1. 用匯編語(yǔ)言實(shí)現(xiàn)一個(gè) 子集的編譯程序 2. 用匯編程序處理該程序,得到CP1.EXE 3. 用 子集編制 語(yǔ)言的編譯程序 4. 用CP1.EXE處理該程序,得到CP2.EXE,3) 利用編譯程序自動(dòng)生成器,詞法分析器的自動(dòng)生成程序,,,,詞法規(guī)則說(shuō)明,詞法分析程序,(C程序),輸入: 詞法(正規(guī)表達(dá)式) 識(shí)別動(dòng)作(程序段) 輸出: yylex( ) 函數(shù),語(yǔ)法分析器的自動(dòng)生成程序,,,,語(yǔ)法規(guī)則說(shuō)明,語(yǔ)法分析程序,(C程序),輸入: 語(yǔ)法規(guī)則(產(chǎn)生式) 語(yǔ)義動(dòng)作(程序段) 輸出: yyparse( ) 函數(shù),思考題,1. 試分析一個(gè)簡(jiǎn)短的 C 程序,任意找出幾個(gè)屬于語(yǔ)法、詞法、語(yǔ)義的語(yǔ)言現(xiàn)象。 2. 試分析例 1-1 的 date 輸出數(shù)據(jù)的處理中,應(yīng)該做哪些詞法分析、語(yǔ)法分析、語(yǔ)義處理。,