摘要:編譯器概述編輯器從邏輯上可以分為若干個階段,每個階段將源程序從一種表示變換成另一種表示。翻譯器編譯器解釋器翻譯器能夠將一種語言源語言變換成另一種語言目標語言的軟件。
1、編譯器概述
編輯器從邏輯上可以分為若干個階段,每個階段將源程序從一種表示變換成另一種表示。
以Pascal語言的 position := initial + rate * 60 為例子介紹編譯的各個階段
1.1 詞法分析詞法分析 又叫線性分析 或者 線性掃描
逐個讀取源程序的字符,把他們組成詞法記號(token)流,并且把詞法單元填入符號表。
在這個階段會刪除掉分隔記號的空格
1.2 語法分析語法分析又叫 層次分析
將詞法記號流按照語法結構進行層次分組,形成語法短語,語法短語常用分析樹表示
1.2.1 層次結構遵循的規則
任何一個標識符都是表達式
任何一個數都是表達式
如果e**1和e2都是表達式,那么
e1 + e2
e1 * e2
(e1)
也都是表達式
1.3 語義分析進行語義分析,生成語法樹
作用:
(1)進行語義檢查(其中包括類型檢查)、保證各部分能有意義的集合在一起
(2)搜集類型信息
1.4 中間代碼生成經過語法分析和語義分析之后,某些編譯器生成源程序的顯式中間表示。
具備兩個性質: 易于產生、易于翻譯成目標程序
功能:
(1)需決定運算完成的次序。(疑問每個語句之多一個算符)
(2)必須產生臨時變量名。(保留每個語句的計算結果)
(3)必須處理控制流結構和過程調用
中間表示的常用形式: 三地址代碼。
1.4.1 三地址代碼
三地址代碼 由 三地址語句序列組成,最多三個操作數
1.5 代碼優化試圖改進代碼,產生執行較快的機器代碼
1.6 代碼生成生成可重定位的機器代碼或者匯編碼
功能:
(1)為源程序所用的每個變量選擇存儲單元 (寄存器分配)
(2) 將中間代碼生成等價的機器指令序列
1.7符號表管理符號表 :為每一個標識符保存一個記錄的數據結構,記錄的域是標識符的屬性(標識符的存儲分配、類型和作用域信息)
1.8 錯誤診斷與報告每個階段都有可能發現源程序的錯誤,在發現錯誤之后,該階段必須處理此錯誤,使得編譯可以繼續進行,以便進一步發現源程序的其他錯誤。
詞法分析階段 :診斷當前被掃描的字符串不能形成語言的詞法記號。
語法分析階段:診斷記號流違反的語法規則。
語義分析階段:找到對所含操作無意義的結構。
1.9、編譯的總過程 2、階段分組(前端和后端)在實際編譯器中,若干階段可以組合在一起,各階段之間的中間表示也無需顯示構成
通常將所有階段分為前端和后端:
前端:只依賴于源程序,由幾乎獨立于目標機器的階段或者階段的一部分組成。
包括:詞法分析、語法分析、符號表建立、語義分析、中間代碼生成、部分代碼優化、與這些階段同時完成的錯誤處理。
后端:依賴于目標機器,一般獨立于源程序,而與中間代碼有關。
包括:代碼優化、代碼生成、伴隨這些階段的符號表操作和錯誤處理3、遍
編譯的幾個階段常用 一遍掃描來實現,一遍掃描包括讀一個輸入文件和寫一個輸出文件
把幾個階段組成一遍,并且這些階段的活動可以在該遍中交錯進行。例如:可以把語法分析看成主導,當它需要記號時,調用詞法分析器去下一個記號。如果已經看出一個語法結構,語法分析器則激活中間代碼生成器,以完成語義分析和生成中間代碼。
4、翻譯器、編譯器、解釋器翻譯器:能夠將 一種語言(源語言)變換成另一種語言(目標語言)的軟件。
編譯器:編譯器是一種翻譯器,將高級語言變換成一種低級語言的軟件。特點在于 目標語言比源語言低級
解釋器:也需要對源程序進行詞法、語法和語義分析,中間代碼生成。但是不生成目標代碼,而是直接執行源程序所指定的運算
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/97869.html
摘要:四則運算編譯器,雖然說功能很簡單,只能編譯四則運算表達式。再復雜的編譯器再簡單的編譯器,功能上是差不多的,只是復雜的編譯器實現上會更困難。每一章都是理論與實踐結合的經典,從計算機硬件知識到軟件體系,再到編譯原理和操作系統。 四則運算編譯器,雖然說功能很簡單,只能編譯四則運算表達式。但是編譯原理前端部分幾乎都有涉及,詞法分析,語法分析,還有代碼生成。 再復雜的編譯器、再簡單的編譯器,功能...
摘要:一般的程序,是無法直接執行的,因為只能識別機器指令。所以要想執行一個程序,首先要將高級語言編寫的程序翻譯為匯編代碼,再將匯編代碼翻譯為機器指令,這樣才能識別并執行。 編譯器 編譯器是一個程序,作用是將一門語言翻譯成另一門語言。 一般的程序,CPU 是無法直接執行的,因為 CPU 只能識別機器指令。所以要想執行一個程序,首先要將高級語言編寫的程序翻譯為匯編代碼,再將匯編代碼翻譯為機器指令...
摘要:對于沒有計算機科學基礎知識的程序員或初學者來說一上來就看龍書虎書是行不通的全是理論知識看得想睡覺我還試過看網易云大學計算機專業的編譯原理課程也是看得一頭霧水看到多講就看不下去了另外計算機程序的構造和解釋這本很多人推薦的書其實并不適合初學者前 對于沒有計算機科學基礎知識的程序員或初學者來說 一上來就看龍書 虎書是行不通的 全是理論知識 看得想睡覺 我還試過看網易云大學計算機專業的編譯原理...
摘要:棧在內存中,棧的特點是只能在同一端進行插入和刪除的操作,即只有和兩種操作。指令的作用是將一個操作數推入棧中。指令的作用是執行兩次操作,彈出兩個操作數和,然后執行,再將結果到棧中。 現在來模擬一下 CPU 執行機器指令的情況,由于匯編代碼和機器指令一一對應,所以我們可以創建一個直接執行匯編代碼的模擬器。在創建模擬器前,先來講解一下相關指令的操作。 棧 在內存中,棧的特點是只能在同一端進行...
摘要:語法分析對輸入的文本按照語法規則進行分析并確定其語法結構的一種過程,稱為語法分析。遞歸下降分析法遞歸下降分析法,也稱為自頂向下分析法。表達式代碼生成我們通常用的四則運算表達式是中綴表達式,但是對于計算機來說中綴表達式不便于計算。 四則運算的語法規則(語法規則是分層的) x* 表示 x 出現零次或多次 x | y 表示 x 或 y 將出現 ( ) 圓括號,用于語言構詞的分組 以下規則...
摘要:引擎是能運行代碼的程序或解釋器。代碼的運行明顯的分成兩個階段,也就是編譯階段和運行字節碼階段。它首先由編譯器編譯成字節碼文件,然后再通過虛擬機從文件中讀一行解釋執行一行。 Javascript引擎是能運行javascript代碼的程序或解釋器。做為前端開發人員,了解javascript底層的工作原理,可以用助于寫出高效的javascript代碼。那我們就來看一下,我們寫的代碼是如何在j...
閱讀 3236·2021-11-24 09:39
閱讀 3166·2021-10-21 09:38
閱讀 2404·2019-08-29 15:28
閱讀 3742·2019-08-26 12:23
閱讀 2622·2019-08-26 12:19
閱讀 1365·2019-08-23 12:44
閱讀 2133·2019-08-23 12:02
閱讀 1004·2019-08-22 17:05