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