編譯原理(一)
阿新 • • 發佈:2019-01-29
說明:本文參考 李文生 老師講義!如有不當之處請及時聯絡
程式設計語言
人與計算機之間溝通的工具。
低階語言
- 機器語言
- 符號語言 組合語言
問題:符號語言是什麼?
高階語言
- 過程性語言——面向使用者的語言 如:C、Pascal
- 專用語言——面向問題的語言 如: SQL
優點:
- 獨立於機器。所程式設計序移植性比較好
- 不必考慮儲存單元的分配問題,資料的外部形勢轉換成機器的內部形勢等細節
- 具有豐富的資料結構和控制結構
- 更接近於自然語言
- 程式設計效率高
翻譯程式
源程式(高階語言/組合語言編寫)———(經過)翻譯程式——>(得到)目標程式(目標語言表示,此處目標不一定是機器語言)
組合語言程式——彙編程式——機器語言程式
高階語言程式——編譯程式——低階語言程式
高階語言程式:編譯階段處理源程式,執行階段處理資料。
解釋程式同時處理源程式和資料。邊解釋邊執行,不生成目標程式。
解釋程式的優缺點
優點:與使用者通訊方便,比較節省記憶體空間
缺點:效率很低
解決辦法:先翻譯成某種中間形式的程式,如JAVA
編譯程式的組成
分析階段(靜態分析)
根據源語言的定義,分析源程式的結構和語義(程式原始碼轉換為某種內部表示)
- 詞法分析——詞法分析器——識別具有獨立意義的字串作為token(記號),並組織成記號流
- 語法分析——語法分析器——將記號流根據相應語言的語法規則分組,形成語法短語——分析樹來表示
- 語義分析——語義分析器——根據源語言的語義規則對語句的意義進行檢查(如型別檢查)
綜合階段
根據分析結果構造出所要求的目標程式
- 中間程式碼生成——中間程式碼易於翻譯成目的碼
- 程式碼優化——對程式碼進行改進,使之佔用的空間少、執行速度快(首先是在中間程式碼上進行)
- 目的碼生成——生成的目的碼一般是可以重定位的機器程式碼或組合語言程式碼
符號表的管理
- 錯誤診斷和處理
編譯原理的典型結構
符號表管理
記錄源程式中使用的識別符號;收集每個識別符號的各種屬性資訊是編譯程式的重要工作。
符號表:若干記錄組成的資料結構
- 每個識別符號在表中有一條記錄
- 記錄的域是識別符號的屬性
對符號表結構的要求:
- 允許快速地查詢到識別符號的記錄
- 可在其中存取資料
識別符號的各種屬性是在編譯的各個不同階段填入符號表的。
前處理器
主要功能:
- 巨集處理
- 檔案包含
- 語言擴充
連線裝配程式
兩個主要任務:
裝入:
- 讀入 可重定位的機器程式碼
- 修改重定位地址
- 把修改後的指令和資料放在記憶體的適當地方或形成可執行檔案
連線
- 把幾個可重定位的機器程式碼連線成一個可執行的程式