將高階語言(源語言)翻譯成組合語言或機器語言(目標語言)的過程
編譯器在語言處理系統中的位置
預處理器:把儲存在不同檔案中的源程式聚合在一起;把被稱為巨集的縮寫語句轉換為原始語句
可重定位:在記憶體中存放的起始位置l不是固定的
載入器:修改可重定位位址;將修改後的指令和資料放到記憶體中適當的位置
鏈結器:將多個可重定位的機器**檔案(包括庫檔案)連線到一起;解決外部記憶體位址問題
人工英漢翻譯的例子
類似於人工英漢翻譯的過程,編譯也是一種語言之間的翻譯。通過分析源語言得到語義,然後再生成目標語言。
詞法分析:識別單詞,確定單詞的型別
語法分析:識別短語,構造語法分析樹
語義分析:①收集識別符號的屬性資訊②語義檢查
編譯器的結構
編譯器的結構主要分為詞法分析器、語法分析器、語義分析器、中間**生成器、目標**生成器和極其相關**優化器。對應著兩大步驟「分析源語言」和「生成目標語言」。
詞法分析
從左向右逐行掃瞄源程式的字元,識別出各個單詞,確定單詞的型別。
將識別出的單詞轉換成統一的機內表示——詞法單元(token)形式
token:< 種別碼,屬性值 >
舉個例子:
語法分析
語法分析器(parser)從詞法分析器輸出的token序列中識別出各類短語,並構造語法分析樹(parse tree)
可以對照來看,根據詞法分析的結果識別出各類短語。
語義分析
(1)收集識別符號的屬性資訊
種屬:簡單變數、復合變數(陣列、記錄、…)、過程、…
型別:整型、實型、字元型、布林型、指標型、…
儲存位置、長度:
值
作用域
引數和返回資訊:引數個數、引數型別、引數傳遞方式、返回值型別、…
符號表是用於存放識別符號的屬性資訊的資料結構。這裡注意一點,name並非直接存在符號表中,而是記錄其在字串表中的位置與長度。
(2)語義檢查
變數或過程未經宣告就使用
變數或過程名重複宣告
運算分量型別不匹配
操作符與運算元之間的型別不匹配
陣列下標不是整數
中間**生成
常用的中間**表示形式如下:
三位址碼:三位址碼由類似於組合語言的指令序列組成,每個指令最多有三個運算元(operand)。三位址指令序列唯一確定了運算完成的順序。
語法結構樹/語法樹
(1)三位址碼
位址形式:源程式中的名字、常量和編譯器生成的臨時變數
因為位址在符號表中有記錄,所以可以用名字代替。注意沒有返回值的這裡成為過程,有返回值的稱作函式。
表示:四元式(op, y, z, x)、三元式、間接三元式
舉例:目標**生成
目標**生成以源程式的中間表示形式作為輸入,並把它對映到目標語言
目標**生成的乙個重要任務是為程式中使用的變數合理分配暫存器
**優化
為改進**所進行的等價程式變換,使其執行得更快一些、占用空間更少一些,或者二者兼顧
結構化編輯器
智慧型印表機
對程式進行分析,列印出結構清晰的程式
靜態檢測器
靜態定位程式中的錯誤
文字格式器
文字格式器處理的字元流中除了需要排版輸出的字元以外,還包含一些用來說明字元流中的段落、圖表或者上標和下標等數學結構的命令。
資料庫查詢直譯器
資料庫查詢語句由包含了關係和布林運算的謂詞組成。查詢直譯器把這些謂詞翻譯成資料庫命令,在資料庫中查詢滿足條件的記錄。
高階語言翻譯工具
第一章 緒論
1.16 void print descending int x,int y,int z 按從大到小順序輸出三個數 print descending 1.17 status fib int k,int m,int f 求k階斐波那契序列的第m項的值f gender char schoolname 校...
第一章 緒論
本 題目源於粵電集團科研專案 沙角a電廠優化排程輔助決策系統 沙角a電廠電網排程已由原來對互不聯絡的單機排程方式發展為對全廠整體總負荷的經濟排程方式,現有五颱發電機組 其中210mw機組三颱,300mw機組二台 的主要工作如下 1.實時資料採集及預處理 機組效能計算和能損分析建立在準確獲取現場資料的...
第一章 緒論
1.1 資料結構在程式設計中的作用 a 問題 資料模型 基本思路 想法 資料表示 資料處理 演算法 程式語言 程式設計環境 設計方法 程式 b 著名公式 資料結構 演算法 程式 1.2 本書討論的主要內容 a 問題一般分為 數值問題 非數值問題 a 數值問題抽象出的資料模型通常是數學方程 b 非數值...