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

正文內容

編譯原理實用教程ppt(已修改)

2025-04-23 22:13 本頁面
 

【正文】 第 1章 編譯系統(tǒng)概述 程序設計語言的發(fā)展 基本術語解釋 編譯過程概述 出錯處理 編譯程序的前端和后端 編譯程序的實現(xiàn)方式 程序設計語言的發(fā)展 匯編語言 (Assemble Language) 機器語言 (Machine Language) 程序設計語言 (Programming Language) 例計算表達式 3*16+2的值,實現(xiàn)該計算的機器語言程序、匯編語言程序和程序設計語言( C語言)程序如下所示。目標計算機的系統(tǒng)結構和匯編語言的使用方法詳見本書第 7章。 2203 8210 2602 6101 1000 f000 Load R0,3 Mul R0,10 Load R1,2 Add R0,R1 Write R0 Halt void main(void) { cout3*16+2。 } 注: 10表示 16 ㈠ 機器語言 機器指令集合稱為機器語言。機器指令即二進制數(shù),通常由若干字節(jié)構成。 ①優(yōu)點 ?計算機可直接識別執(zhí)行 ?可充分利用硬件特性 ② 缺點 ?可讀性差 ?指令系統(tǒng)隨機種而異 ?由于機器指令直接或間接含有絕對地址,增加或減少一條指令,可能會引起多條指令的修改。 ?編程者需協(xié)調內存的使用 所以,機器語言形式的程序編制和維護困難,限制了計算機的推廣和應用。 ㈡ 匯編語言 用記憶符取代二進制位,存儲地址和匯編語句的序號可用符號名表示。 ①優(yōu)點 ?用符號取代二進制數(shù),提高了程序的可理解性。 ?性能較好的匯編語言,可用符號名來表示存儲地址和匯編語句序號,這樣避免了在匯編語句中絕對地址的出現(xiàn)。 ?可充分利用硬件特性 所以,匯編語言在一定程度上降低了程序編制和維護的難度。 ② 缺點 ?匯編語句和機器指令基本上是一對一的,所以匯編語言的編程效率并沒有質的提高。 ?和機器語言一樣,匯編語言依附于目標計算機。 ?需匯編程序,將匯編語言譯成機器語言。 ㈢ 程序設計語言 程序設計語言又稱高級語言。程序設計語言接近于英語,相當于工程語言。目前計算機系統(tǒng)一般含有多個程序設計語言的翻譯程序(例 VC、 VB等),甚至對同一個程序設計語言配備了多個不同性能的翻譯程序,供用戶選擇使用。 ①優(yōu)點 ?獨立于具體計算機,面向過程(函數(shù))或對象。 ?程序設計語言接近于英語,可理解性好。 ?數(shù)據(jù)類型豐富,各種功能的語句齊備,一條語句至少相當于幾十條匯編語句。 所以,程序設計語言極大地提高了編程效率,大幅度地降低了編程難度。 ②缺點 ?需翻譯程序,將高級語言譯成機器語言或匯編語言。 ?對硬件操作困難,高級語言通常提供匯編語言接口。 基本術語解釋 ㈠ 源語言和源程序 (Source Language and Source Program) 用程序設計語言書寫的程序,稱為源程序,該程序設計語言稱為源語言。源程序通常用編緝程序輸入,用字符 (ASCII碼 )表示,以文本文件形式存儲。 ㈡文本文件 (Text File) 文本文件的內容由 94個圖形字符‘ !??~?(33126)和 4個控制字符換行 (10)、回車 (13)、空格 (32)、 TAB(9)構成,文本文件又稱為 ASCII碼文件,擴展名通常為 TXT,文件尾用控制字符EOF(26)指示。當換行和回車二個控制字符從文本文件讀入內存,在 C語言中是用一個字符(換行)表示。 ㈢ 目標語言和目標程序 (Target Language and Target Program) 目標語言可以是機器語言 (二進制數(shù) ),也可以是匯編語言 (字符 ),或者是其它中間語言 (字符 ),但最終結果必定是機器語言。機器語言程序用二進制文件存儲,匯編語言或中間語言程序用文本文件存儲。 目標程序是經翻譯程序加工后用目標語言表示的程序。 ㈣二進制文件 (Binary File) 二進制文件由機器指令即二進制數(shù)構成,因二進制數(shù)可能是 26,故文件尾用文件長度 (文件的字節(jié)數(shù) )指示,擴展名通常為 EXE。 ㈤ 翻譯程序 (Translator) 將源程序譯成邏輯上等價的目標程序的程序。翻譯程序有二種工作方式:編譯和解釋。 解釋程序 Interpreter 源程序 結果 輸入數(shù)據(jù) 解釋、執(zhí)行 解釋方式主要特點是:用戶程序是消極的。用戶程序運行時,控制點在解釋程序,即用戶程序的執(zhí)行離不開解釋程序。 ① 解釋方式 (Interpret) 以源程序作為輸入,輸入一句解釋執(zhí)行一句,不產生完整的目標程序,相應的翻譯程序稱為解釋程序 (Interpreter) 。 工作方式如下圖所示: ② 編譯方式 (Compile) 將源程序全部譯為目標程序,該目標程序可在操作系統(tǒng)環(huán)境下直接執(zhí)行,相應的翻譯程序稱為編譯程序 (Compiler) ,工作方式如下圖所示: 編譯程序 Compile 連接程序 Link 裝入運行 Run 編輯程序 Edit ASCII碼 二進制 (整體未定位 ) 二進制 (整體定位 ) 源程序 結果 輸入數(shù)據(jù) ?編輯程序的工作結果是 ASCII碼形式的源程序。 ?編譯程序以 ASCII碼形式的源程序為輸入,它的工作結果是二進制形式的目標程序,但并未包括用戶程序中所使用的系統(tǒng)函數(shù)的目標代碼。從整體上來看,程序是不完整的,程序中的部分地址尚未確定(例系統(tǒng)函數(shù)的調用)。 ?將二進制形式的用戶程序和系統(tǒng)函數(shù)目標代碼連接成一個程序,對未確定的地址進行定位。 ?由操作系統(tǒng)將用戶程序裝入內存后運行。程序在運行過程中讀入數(shù)據(jù),經處理加工后輸出計算結果。 編譯方式主要特點是:用戶程序是積極的。用戶程序執(zhí)行時,控制點在用戶程序自身。除操作系統(tǒng)外,程序運行無需其它支撐軟件。 ③ 二種翻譯方式比較 解釋方式和編譯方式的主要區(qū)別是:目標代碼的執(zhí)行方式不同,基本原理和方法沒有本質上的區(qū)別。 1)解釋方式的優(yōu)點 ?提供一種直接的交互調試功能,容易獲得較好的動態(tài)調試效果。 ?使用變量可不預先定義。 ?變量性質可動態(tài)修改。 2)解釋方式的缺點 ?在執(zhí)行時需動態(tài)地對程序進行分析翻譯,開銷大,其執(zhí)行速度相當于編譯方式的 1/10至 1/100。 ?解釋方式占用內存大 顯然解釋程序的優(yōu)點就是編譯程序的缺點,反之亦然,對于編譯程序的優(yōu)缺點不再重復敘述。 ④對任何一種高級語言,既可采用編譯方式,也可采用解釋方式,包括匯編語言在內( MASM方式和 DEBUG方式)。 編譯過程概述 典型的編譯程序工作過程是:輸入源程序,對它進行加工處理,最后輸出目標程序(機器語言或匯編語言形式)。整個過程相當復雜,從數(shù)據(jù)加工的角度來看,可將其分成 4個邏輯階段,它們是: ?詞法分析 ?語法分析 ?語義分析(中間代碼產生) ?目標代碼生成 詞法 分析 語法 分析 語義分析 (中間代碼產生 ) 目標代碼 生成 源程序 目標程序 編譯程序基本上是按照這個流程來設計的。 圖示如下: 以算術表達式 3+abc*128 為例,來說明編譯程序工作過程。 ㈠詞法分析 (Lexical Analysis) 執(zhí)行詞法分析任務的程序稱為詞法分析器。 任務:字符串形式單詞 ? 編碼形式單詞內部碼(二元式) 依據(jù):語言的構詞規(guī)則 ①二元式 (Pair) (單詞種別 ,單詞值 ) ?單詞種別:用整數(shù)碼表示(為直觀起見用字符表示),語法分析時用。 ?單詞值:在本書中用字符串表示,語義分析時用。當一個單詞種別中可能有多個單詞時,單詞的值才有意義。為了便于輸入處理,無意義的單詞值用 NUL表示。 ② 二元式編碼 單詞 單詞種別 單詞值 + + NUL NUL * * NUL / / NUL ( ( NUL ) ) NUL … … … 標識符 i 字符串形式符號名 整常數(shù) x 字符串形式 整常數(shù) 實常數(shù) y 字符串形式 實常數(shù) … … … 經詞分析,算術表達式 3+abc*128的單詞內部碼(二元式)為: (39。x39。,3) (39。+39。,NUL) (39。i39。,abc) (39。*39。, NUL) (39。x39。,128) ㈡ 語法分析 (Parsing) 執(zhí)行語法分析任務的程序稱為語法分析器。 任務:檢查源程序的語法結構是否正確 依據(jù):語言的語法規(guī)則 在語法分析時,算術表達式 3+abc*128的語法結構應表示為x+i*x,語法分析器最終應識別出這是一個算術表達式。識別過程相當于建立一棵語法樹 算術表達式 算術表達式 + 項 項 項 * 因子 因子 因子 x(整常數(shù) ) x(整常數(shù) ) i(標識符 ) ㈢ 語義分析 (Semantic Analysis) 執(zhí)行語義分析任務的程序稱為語義分析器或中間代碼產生器。 任務:建立符號表和常數(shù)表,記錄源程序中標識符屬性和常數(shù)值,根據(jù)語言的語義規(guī)定生成中間代碼。 依據(jù):語言的語義內涵 語義分析(中間代碼產生)主要工作為: ?語義正確性檢查 ?語義翻譯 ①語義正確性檢查 例 2: begin real A。integer B。B=A+B。 end 語法正確,不同的語言有不同的語義解釋。 ?標準 Fortran語言認為是錯誤的,其不允許不同類型的量進行混合運算。 ?C語言認為是正確的,允許混合運算,但需轉換成相同類型的量,然后再進行運算。 ?Pascal語言認為是錯誤的,雖允許混合運算,但不允許將實型量賦值于整型量。 ② 語義翻譯 1)說明語句的翻譯 將標識符及其屬性填入符號表。 2)執(zhí)行語句的翻譯 根據(jù)不同語句的語義,生成邏輯上等價的中間代碼。 ?中間代碼 結構簡單、意義明確的記號系統(tǒng),非常接近機器指令,又獨立于具體機器。常用的中間代碼有三元式和四元式。 表達式 3+abc*128可譯成如下四元式: (*,amp。abc,amp。128,amp。T1) (+,amp。3,amp。T1,amp。T2) 其中, amp。abc表示標識符 abc在符號表中入口(即地址); T1和 T2是在翻譯過程中由編譯程序引入的臨時變量, amp。T1和amp。T2分別表示 T1和 T2在符號表中入口; 而 amp。128表示常數(shù) 128在常數(shù)表中的地址。 ?符號表 (Symbol Table) 符號表用于記錄源程序中出現(xiàn)的標識符 (Identifier),一個標識符往往具有一系列的語義值,它包括標識符的名稱、標識符的種屬、標識符的類型、標識符值的存放地址等等。每個標識符在符號表中有一項記錄,用于記錄標識符的各種語義值,而在四元式中填寫的是標識符在符號表中的記錄地址,通常稱為符號表入口。 內存地址 符號名 種屬 類型 …… …… 未分配 abc 簡單變量 整型 未分配 T1 簡單變量 整型 未分配 T2 簡單變量 整型 …… …… 符號表的結構示意如下: ?常數(shù)表 (Constant Table) 常數(shù)表用于記錄在源程序中出現(xiàn)的常數(shù)。假定,每個整常數(shù)在常數(shù)表中占 2個字節(jié),每個實常數(shù)在常數(shù)表中占 4個字節(jié)。 常數(shù)的二進制值 0000000000000011( 3) 0000000001000000( 128) …… 常數(shù)表的結構示意如下: ㈣ 目標代碼生成 (Code Generation) 執(zhí)行目標代碼生成的程序稱為目標代碼生成器。 任務:中間代碼 ? 目標代碼(機器指令或匯編語言) 依據(jù):目標機器的系統(tǒng)結構 假設模型機器的指令格式為: op Ri , M ( Ri) op( M) → Ri op Ri , Rj ( Ri) op( Rj) → Ri op Ri , C ( Ri) op C → Ri 其中 Ri表示寄存器, M表示內存地址(可用符號表示), C表示常數(shù)。 表達式 3+abc*128最終形成的匯編語言程序示意如下: Load R0,abc Mul R0,128 Store R0,T1 Load R0,3 Add R0,T1 Store R0,T2 編譯程序在工作過程中可發(fā)現(xiàn)源程序中各種錯誤,錯誤類型及錯誤處理對策簡述如下: ㈠錯誤類型 ?詞法錯誤(
點擊復制文檔內容
教學課件相關推薦
文庫吧 www.dybbs8.com
公安備案圖鄂ICP備17016276號-1