编译原理-第一章:引论
編譯原理-第一章:引論
- 概述
- 高級程序的執行
- 編譯過程概述
- 編譯器結構
- 遍的概念
- 編譯器技術的應用
概述
本章主要說明一些編譯原理的基本概念。參考書:編譯原理(陳火旺,第三版),龍書,虎書等等一系列。
高級程序的執行
目前的高級程序執行過程主要分為兩種:
這時介紹兩個概念:
- 翻譯程序:一個程序,將一種語言程序(源語言)轉換成另一種語言程序(目標語言),且二者在邏輯上是等價的。
- 編譯程序:將高級語言轉化為低級語言的翻譯程序。
以該語言寫的源程序作為輸入,不產生目標程序,而是邊解釋邊執行源程序本身。
我們主要討論的是第一種
編譯過程概述
編譯器的工作可以分成若干階段,每個階段把源程序從一種表示變換成另一種表示。編譯程序的工作過程一般也可以劃分為五個階段:詞法分析、語法分析、語義分析、分析與中間代碼產生、優化、目標代碼生成。
編譯器結構
- 有些編譯程序在識別出各類語法單位后,構造并輸出一棵表示語法結構的語法樹,然后,根據語法樹進行語義分析和中間代碼生成。
- 還有許多編譯程序在識別出語法單位后并不真正構造語法樹,而是調用相應的語義子程序。在這種編譯器中,掃描器、分析器和中間代碼產生器三者并非截然分開的,而是相互穿插的。
- 編譯程序在工作過程需要保持一系列的表格,以登記源程序的各類信息和編譯各階段的進展情況。在編譯器中,最重要的表格是符號表,用來登記源程序中出現的每個名字以及名字的各種屬性。
- 當掃描器識別出一個名字(標識符)后,它把該名字填入到符號表中。
- 一個編譯程序不僅應能對書寫正確的程序進行翻譯,而且應能對出現在源程序中的錯誤進行處理。如果有錯誤,發現錯誤并把錯誤信息報告給用戶。由出錯處理程序完成。
- 編譯過程的每一個階段都可能檢測出錯誤,絕大多數錯誤可以在前三個階段檢測出來。源程序的錯誤通常分為語法錯誤和語義錯誤。語法錯誤是指源程序中不符合語法規則的錯誤,可在詞法分析或語法分析時檢測出來。例如,詞法分析能夠檢測“非法字符”錯誤;語法分析能檢測出“括號不匹配”、“缺少”之類的錯誤。語義錯誤是指源程序中不符合語義規則的錯誤,在語義分析階段檢測出來,有些運行時才能檢測出來。例如:說明錯誤、作用域錯誤、類型不一致等等。
編譯器從邏輯上可以分為若干階段,每個階段把源程序從一種表示換成另一種表示
一般而言,我們把前三個部分(1-3)成為編譯器的前端。其工作只和源程序有關,與目標機無關。把后兩個部分(4-5)稱之為編譯器的后端,與源程序無關。這樣一來可以提高編譯器的開發效率,提高軟件重用性。降低耦合度。
取一個編譯器的前端,重寫它的后端以產生同一源語言在另一機器上的編譯器。
不同的前端使用同一個后端,從而得到一個機器上的幾個編譯器(采用同一中間語言)。
遍的概念
遍的定義:對源程序或源程序的中間結果從頭到尾掃描一次,并作出有關的加工處理,生成新的中間結果或目標程序。
每遍的工作由從外存上獲得的前一遍的中間結果開始(第一遍是源程序),完成工作后將結果記錄于外存(最后一遍是目標程序)。
差別
遍數多:結構清晰,但時間效率不高。
遍數少,編譯速度快,但機器內存要求高。
遍的概念,對于理解編譯器來說很重要。可以理解為遍既可以說是編譯器工作的方式,也可以說是編譯器效率的體現。以疊衣服為例(你怎么扛著品如的衣柜 ),我們可以取下一件衣服(好比編譯器1-3),疊好(4),放入衣柜(5)。這樣可以稱之為一遍。也可以先把所有衣服取下(重復1-3),算是一遍;然后全部疊好(4),算是第二遍;然后放入衣柜,算是第三遍。
遍的定義并不是固定的,遍的確定主要因素是源程序和機器(目標機)的特征。
編譯器技術的應用
-
高級語言的實現
高級編程語言易于編程,但程序運行較慢。 低級語言編程時可實施更有效的控制方式,得到更有效的代碼,但難編寫、易出錯、難維護。流行編程語言的大多數演變都是朝著提高抽象級別的方向。 每一輪編程語言新特征的出現都刺激編譯器優化的新研究。 -
程序翻譯
- 二進制翻譯
編譯器技術可用于把一種機器的二進制代碼翻譯成另一種機器的代碼,以運行原先為別的指令集編譯的代碼。 - 數據庫查詢解釋器
數據庫查詢由一些謂詞組成,這些謂詞由包含關系運算的布爾表達式組成,可以被解釋執行,也可以被編譯成搜索數據庫的命令。
- 二進制翻譯
-
提高軟件開發效率的工具
源于編譯器中代碼優化技術的程序分析一直在改進軟件開發效率。- 類型檢查:類型檢查是一種捕捉程序中前后不一致的成熟而有效的技術。
- 邊界檢查:數據流分析技術可用來定位緩沖區溢出。
- 內存管理:自動的內存管理刪除內存泄漏等內存管理錯誤。
總結
以上是生活随笔為你收集整理的编译原理-第一章:引论的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows性能监视器基本指标
- 下一篇: 分享一种很好看的字体