freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

編譯原理第2版上ppt(編輯修改稿)

2025-01-30 00:14 本頁面
 

【文章內(nèi)容簡介】 a s s )J A V AC L A S SL I B R A R I E SH A R D W A R EC O M P I L E T I M EE N V I R O N M E N TJ A V A B Y T EC O D E S M O V EL O C A L L Y O RT H R O U G HN E T W O R K編 譯 程 序編 譯 程 序解 釋 程 序J A V A V I R T U A L M A C H I N ER U N T I M E E N V O R O N G M E N T( J A V A P L A T F O R M )編譯程序和解釋程序 編譯程序是一個語言處理程序 ,它把一個高級語言程序翻譯成某個機器的匯編或二進制代碼程序 , 這個二進制代碼程序在機器上運行以生成結(jié)果 .因此通過編譯程序使得我們可以先準(zhǔn)備好一個在該機器上運行的程序 ,然后這個程序便會以機器的速度運行 .但是在不把整個程序全部都翻譯結(jié)束之后 ,這個程序是不能開始運行 ,也不能產(chǎn)生任何結(jié)果的 .編譯和運行是兩個獨立分開的階段 . 但在一個交互環(huán)境中 ,不需要將這兩個階段分隔開 ,編譯就不如解釋的方法更方便 . 另一種語言處理程序 ,解釋程序 ,它不需要在運行前先把源程序翻譯成目標(biāo)代碼 ,也可以讓我們實現(xiàn)在某臺機器上運行程序并生成結(jié)果 . 解釋程序 ? 是這樣一個程序 ,它接受某個語言的程序并立即運行這個源程序 .它的工作模式是一個個的獲取 ,分析并執(zhí)行源程序語句 ,一旦第一個語句分析結(jié)束 ,源程序便開始運行并且生成結(jié)果 , 它特別適合程序員交互方式的工作情況 ,即希望在獲取下一個語句之前了解每個語句的執(zhí)行結(jié)果 ,允許執(zhí)行時修改程序 . ? 著名的解釋程序有 Basic語言解釋程序 ,Lisp語言解釋程序 ,UNIX命令語言解釋程序 (shell),數(shù)據(jù)庫查詢語言 SQL 解釋程序以及 bytecode解釋程序 . 高級語言解釋系統(tǒng) (interpreter) ? 功能 讓計算機執(zhí)行高級語言( basic,lisp,prolog) ? 與編譯程序的不同 1)不生成目標(biāo)代碼 2)能支持交互環(huán)境 (同增量式編譯系統(tǒng)) 源 程 序 初始數(shù)據(jù) 解釋程序 計算結(jié)果 編譯程序和解釋程序的存儲組織也有很大不同 ? 編譯程序處理時 ,在源語言程序被 編譯階段 ,存儲區(qū)中要為源程序 (中間形式 )和目標(biāo)代碼開辟空間 ,要存放編譯用的各種各樣表格 ,比如符號表 .在 目標(biāo)代碼運行階段 ,存儲區(qū)中主要是目標(biāo)代碼和數(shù)據(jù) ,編譯所用的任何信息都不再需要 . ? 解釋程序一般是把源程序一個語句一個語句的進行語法分析 ,轉(zhuǎn)換為一種內(nèi)部表示形式 ,存放在源程序區(qū) ,比如 BASIC解釋程序 ,將 LET和 GOTO這樣的關(guān)鍵字表示為一個字節(jié)的操作碼 ,標(biāo)識符用其在符號表的入口位置表示 .因為 解釋程序 允許在執(zhí)行用戶程序時修改用戶程序 ,這就要求 源程序 ,符號表等內(nèi)容始終存放在存儲區(qū)中 ,并且存放格式要設(shè)計的易于使用和修改 . 編譯階段和運行階段存儲結(jié)構(gòu) 編譯時 運行時 名字表 目標(biāo)代碼緩沖區(qū) 編譯用源程序中 間表示各種表格 目標(biāo)代碼區(qū) 數(shù)據(jù)區(qū) 源程序緩沖區(qū) 解釋系統(tǒng)存儲結(jié)構(gòu) 解釋系統(tǒng) 源程序 臨時工作單元 名字表 標(biāo)號表 緩沖區(qū) (輸入輸出 ) 棧區(qū) 語言處理過程 C程序 include include define MAX_LINES 75 Enum booleans (FALSE,TRUE)。 Main (int argc,char *argv[]*) … ? 預(yù)處理器 編譯器 匯編器 裝配連接編輯 骨架程序 源程序 目標(biāo)匯編程序 可重定位機器代碼 絕對機器碼 可重定位目標(biāo)文件庫 語言處理過程 處理源程序的軟件工具 ( 編譯技術(shù)的應(yīng)用) ? 結(jié)構(gòu)化編緝器 ? 程序分析工具 靜態(tài)分析 動態(tài)分析 度量工具 結(jié)構(gòu)度量 模塊接口復(fù)雜度 c分析工具 (source insight) ? 廣泛的語言領(lǐng)域 數(shù)據(jù)庫系統(tǒng)查詢( SQL) 腳本語言 置標(biāo)語言 () 用戶可使用該編輯器在語言的語法制導(dǎo)下編制出所需的源程序。結(jié)構(gòu)化編輯器不僅具有通常的正文編輯器的正文編輯和修改功能,而且還能像編譯程序那樣對源程序正文進行分析。因此,結(jié)構(gòu)化編輯器能夠執(zhí)行一些對編制程序有用的附加的任務(wù)。例 如,它能夠檢查用戶的輸入是否正確,能夠自動地提供關(guān)鍵字 ,當(dāng)用戶敲入 if后,編輯器立即顯示 then并將這兩個關(guān)鍵字之間必須出現(xiàn)的條件留給用戶輸入,并能檢查 begin或左括號與 end或右括號是否相匹配等等。由于結(jié)構(gòu)化編輯器具有上述功能,既可保證編出的源程序無語法錯誤,并有統(tǒng)一的可讀性好的程 序格式,這無疑將會提高程序的開發(fā)效率和質(zhì)量。 商用產(chǎn)品很多如 TurboEdit,Editplus和 Ultraedit等等 .很多集成開發(fā)環(huán)境中里也都包含這種類似的工具 ,如 Jbuild中就有 JAVA程序的結(jié)構(gòu)化編輯器 . 調(diào)試是軟件開發(fā)過程中一個重要環(huán)節(jié),結(jié)構(gòu)化編輯器只能解決語法錯誤的問題,而對一個已通過編譯的程序來說,需進一步了解的是程序執(zhí)行的結(jié)果與編程人員的意圖是否一致,程序的執(zhí)行是否實現(xiàn)預(yù)計的算法和功能。這種對算法的錯誤或程序沒能反映算法的功能等錯誤就需用調(diào)試器來協(xié)助解決。有一種調(diào)試 器允許用戶使用源程序正文和它的符號來調(diào)試 ,即一行一行的跟蹤程序 ,查看變量和數(shù)據(jù)結(jié)構(gòu)的變化以進行調(diào)試工作 .當(dāng)然 ,這些符號的信息必須由編譯程序提供 .調(diào)試器的實現(xiàn)可以有很多途徑 .其中一種是寫一個解釋器 ,以交互的方式翻譯和執(zhí)行每一行 ,它必須維護其所有的運行時的資源以保證在程序執(zhí)行期間很容易的查詢不同變量的當(dāng)前值 .如果不想通過解釋程序允許編譯了的代碼調(diào)試 ,編譯程序必須在目標(biāo)代碼 (匯編 )生成時同時生成特定的調(diào)試信息 ,比如 ,關(guān)聯(lián)標(biāo)識符和它表示的地址的信息 ,用于無歧義的引用一個聲明了多次的標(biāo)識符的信息等等 .調(diào)試功能愈強,實現(xiàn)愈復(fù)雜,它涉及源程序的語法分析和語義處理技術(shù)。 程序格式化工具分析源程序并以使程序結(jié)構(gòu)變得清晰可讀的形式打印出來。例如,注釋可以以一種專門的字形出現(xiàn),且語句的嵌套層次結(jié)構(gòu)可以用縮排方式(齒形結(jié)構(gòu))表示出來。 語言程序的測試工具有兩種:靜態(tài)分析器和動態(tài)測試器。 靜態(tài)分析器 是在不運行程序的情況下對源程序進行靜態(tài)地分析,以發(fā)現(xiàn)程序中潛在的錯誤或異常 .它對源程序進行語法分析并制定相應(yīng)表格,檢查變量定值與引用的關(guān)系。如某變量未被賦值就被引用,或定值后未被引用,或多余的源代碼等一些編譯程序的語法分析發(fā)現(xiàn)不了的錯誤。 動態(tài)測試工具 也是首先對源程序進行分析,在分析基礎(chǔ)上將用于記錄和顯示程序執(zhí)行軌跡的語句或函數(shù)插入到源程序的適當(dāng)位置, 并用測試用例記錄和顯示程序運行時的實際路徑 ,將運行結(jié)果與期望的結(jié)果進行比較分析,幫助編程人員查找問題。 對程序進行分析,確定模塊間的調(diào)用關(guān)系,記錄程序數(shù)據(jù)的靜態(tài)屬性和結(jié)構(gòu)屬性,并畫出控制流程圖,幫助用戶理解程序。 6. 高級語言之間的轉(zhuǎn)換工具 由于計算機硬件的不斷更新?lián)Q代,更新更好的程序設(shè)計語言的推出為提高計算機的使用效率提供了良好條件,然而一些已有的非常成熟的軟件如何在新機器新語言情況下使用呢 ?為了減少重新編制程序所耗費的人力和時間,就要解決如何把一種高級語言轉(zhuǎn)換成另一種高級語言,乃至匯編語言轉(zhuǎn)換成高級語言的問題。這種轉(zhuǎn)換工作要對被轉(zhuǎn)換的語言進行詞法和語法分析,只不過生成的目標(biāo)語言是另一種高級語言而已。這與實現(xiàn)一個完整的編譯程序相比工作量要少些。 比如: C, PASCAL, FORTRAN到 Ada的翻譯器 IBM 4700匯編到 C的轉(zhuǎn)換器 COBOL 到 Java 的編譯器 Humanoriented language Computeroriented language 計算模式,語言 范式 語言應(yīng)用領(lǐng)域 編譯程序 萬諾曼機體系結(jié)構(gòu) 并行體系結(jié)構(gòu) 嵌入系統(tǒng) 編譯技術(shù)的發(fā)展 S O I 高級程序語言 ? 不同的應(yīng)用側(cè)重 : 數(shù)值計算 Fortran 系統(tǒng)程序設(shè)計 C 事務(wù)處理 C obol VLSI設(shè)計 VHDL 人工智能 P rolog 其它 大型嵌入式實時處理 A da 符號處理 S nobol ? 語言范型 : 強制式語言 C,Fortran,Pascal 應(yīng)用式 (函數(shù)式 ) 語言 ML, Lisp 基于規(guī)則 (邏輯 ) 的語言 Prolog,Yacc 面向?qū)ο笳Z言 Ada,C++,Java 強制式語言( Imperative Language) 也稱過程式語言。 其特點是命令驅(qū)動,面向語句,一個強制式語言程序由一系列的語句組成,每個語句的執(zhí)行引起若干存儲單元中的值的改變,這種語言的語法形式通常具有如下形式; 語句 1; 語句 2; 語句 3; 語言執(zhí)行的解釋與萬諾曼機的體系結(jié)構(gòu)對應(yīng):改變機器狀態(tài)(內(nèi)存,各種寄存器和外存的內(nèi)容) 應(yīng)用式(函數(shù)式): 應(yīng)用式語言 ( Applicative Language) 更注重程序所表示的功能 , 而不是一個語句接一個語句地執(zhí)行 。 程序的開發(fā)過程是從前面已有的函數(shù)出發(fā)構(gòu)造出更復(fù)雜的函數(shù) , 對初始數(shù)據(jù)集進行操作直至最終的函數(shù)可以用于從初始數(shù)據(jù)計算出最終的結(jié)果 。 程序執(zhí)行: 執(zhí)行一個個函數(shù)施用在數(shù)據(jù)上的變換最終得到的結(jié)果 Example: 解決八皇后問題 的一段 Haskell98程序: queen 0 = [[]] queen (n+1) = [ x :y | y queen n, x [1..8], safe 1 x y] safe n x [] = True safe n x (z :y) = and [x/=z, x/=z +n, x/=z n, safe (n+1) x y] test = queen 8 len = length test 92 right answer! 基于規(guī)則的語言 ( Rulebased Language)這類語言的語法形式通常為: 條件 1 ? 動作 1 條件 2 ? 動作 2 條件 3 ? 動作 3 程序的執(zhí)行過程是:檢查一定的條件,當(dāng)它滿足值,則執(zhí)行適當(dāng)?shù)膭幼?。它也稱邏輯程序設(shè)計語言,因為它的基本允許條件是謂詞邏輯表達(dá)式。 Example: 一個簡單的 Prolog程序: father(a,b)。 father(b,c)。 grandfather(X,Y):father(X,Z),father(Z,Y)。 ?grandfather(a,c). Yes ?grandfather(X,c). X=a ?grandfather(X,Y). X=a,Y=c 面向?qū)ο笳Z言: ? 抽象數(shù)據(jù)類型 支持封裝性,繼承性和多態(tài)性
點擊復(fù)制文檔內(nèi)容
教學(xué)課件相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號-1