【編譯原理】編譯原理簡(jiǎn)單介紹
本文關(guān)鍵詞:編譯原理
<main> 【編譯原理】編譯原理簡(jiǎn)單介紹
原創(chuàng) 2017年05月07日 13:27:20
編譯原理簡(jiǎn)單介紹 什么叫編譯程序 翻譯程序
翻譯程序(Translator)是一種程序,其輸入是某種語(yǔ)言的一系列語(yǔ)句,而其輸出則是另一種語(yǔ)言的一系列語(yǔ)句,二者在邏輯上是等價(jià)的。就類似生活中的翻譯官一樣,把英語(yǔ)翻譯成漢語(yǔ),二者在意思上也是等價(jià)的。
編譯程序(Compiler)是一種程序。它把用高級(jí)語(yǔ)言寫(xiě)的源程序作為數(shù)據(jù)接收,經(jīng)過(guò)翻譯轉(zhuǎn)換,產(chǎn)生面向機(jī)器的代碼作為輸出。
這當(dāng)中代碼還可能要由匯編程序或裝配程序作進(jìn)一步加工,得出目標(biāo)程序,交給計(jì)算機(jī)執(zhí)行。
編譯程序的工作過(guò)程一般可以分為5個(gè)階段:
1. 詞法分析
2. 語(yǔ)法分析
3. 語(yǔ)義分析和中間代碼的產(chǎn)生
4. 優(yōu)化
5. 目標(biāo)代碼生成
詞法分析的任務(wù)是:輸入源程序,對(duì)構(gòu)成源程序的字符串進(jìn)行掃描和分解,識(shí)別出一個(gè)個(gè)單詞(定義符、標(biāo)識(shí)符、運(yùn)算符、界符、常數(shù))。
在詞法分析階段的工作中所依循的是語(yǔ)言的語(yǔ)法規(guī)則(或稱構(gòu)詞規(guī)則)。
描述語(yǔ)法規(guī)則的有效工具是正規(guī)式和有限自動(dòng)機(jī)。
語(yǔ)法分析的任務(wù)是:在詞法分析的基礎(chǔ)上,根據(jù)語(yǔ)言的語(yǔ)法規(guī)則,把單詞符號(hào)串分解成各類語(yǔ)法單元(語(yǔ)法范疇)(短語(yǔ)、子句、句子、程序段、程序),并確定整個(gè)輸入串是否構(gòu)成語(yǔ)法上正確的程序。
語(yǔ)法分析所依循的是語(yǔ)言的語(yǔ)法規(guī)則。
語(yǔ)法規(guī)則通常用上下文無(wú)關(guān)文法描述。
詞法分析是一種線性分析,而語(yǔ)法分析是一種層次結(jié)構(gòu)分析。
這一階段的任務(wù)是:對(duì)語(yǔ)法分析所識(shí)別出的各類語(yǔ)法范疇,分析其含義,并進(jìn)行初步翻譯(產(chǎn)生中間代碼)。這一階段通常包含兩個(gè)方面的工作。
1. 對(duì)每種語(yǔ)法范疇進(jìn)行靜態(tài)語(yǔ)義的檢查,例如,變量是否定義、類型是否正確等等。
2. 如果語(yǔ)義正確則進(jìn)行中間代碼的翻譯。
這一階段所依循的是語(yǔ)言的語(yǔ)義規(guī)則,通常使用屬性文法描述語(yǔ)義規(guī)則。
優(yōu)化對(duì)于代碼(主要是中間代碼)進(jìn)行加工變換,以期能夠產(chǎn)生更為高效(省時(shí)間和空間)的目標(biāo)代碼 。
優(yōu)化的主要方面有:公共子表達(dá)式的提取、循環(huán)優(yōu)化、刪除無(wú)用代碼等等。
優(yōu)化所依循的是程序的等價(jià)變換規(guī)則。
目標(biāo)代碼生成這一階段的任務(wù)是:把中間代碼(經(jīng)過(guò)優(yōu)化處理之后的)變換成特定機(jī)器上的低級(jí)語(yǔ)言代碼(絕對(duì)指令、可重定位指令、匯編指令
)。
編譯程序在工作過(guò)程中需要保持一系列的表格,以登記源程序的各類信息和編譯各階段的進(jìn)展?fàn)顩r。
最重要的是符號(hào)表,用來(lái)等級(jí)源程序中出現(xiàn)的每個(gè)名字以及名字的各種屬性。例如,一個(gè)名字是常量名還是變量名,還是過(guò)程名;如果是變量名,類型是什么,占多大內(nèi)存,地址是多少等等。
編譯各階段均須維持表格并進(jìn)行表格管理,建表的技術(shù)支持是數(shù)據(jù)結(jié)構(gòu),表格的分類、結(jié)構(gòu)、處理方法決定于語(yǔ)言及機(jī)器,還有優(yōu)化措施。
出錯(cuò)處理如果源程序有錯(cuò)誤,編譯程序應(yīng)設(shè)法發(fā)現(xiàn)錯(cuò)誤,并把有關(guān)錯(cuò)誤的信息報(bào)告給用戶。一個(gè)好的編譯程序:
1. 全
最大限度發(fā)現(xiàn)錯(cuò)誤
2. 準(zhǔn)
準(zhǔn)確指出錯(cuò)誤的性質(zhì)和發(fā)生地點(diǎn)
3. 局部化
將錯(cuò)誤的影響限制在盡可能小的范圍內(nèi)
4. 自動(dòng)校正
若能自動(dòng)校正錯(cuò)誤則更好,但其代價(jià)非常高
源程序中的錯(cuò)誤一般分為語(yǔ)法錯(cuò)誤和語(yǔ)義錯(cuò)誤。
1. 語(yǔ)法錯(cuò)誤
指源程序中不符合不符合語(yǔ)法(或詞法)規(guī)則的錯(cuò)誤,例如:?jiǎn)卧~拼寫(xiě)錯(cuò)誤、括號(hào)不匹配等等。
2. 語(yǔ)義錯(cuò)誤
指源程序中不符合語(yǔ)義規(guī)則的錯(cuò)誤,例如:說(shuō)明錯(cuò)誤、作用域錯(cuò)誤、類型不匹配等等。
一般在語(yǔ)義分析時(shí)檢出來(lái),有的語(yǔ)義錯(cuò)誤要在運(yùn)行時(shí)才能檢測(cè)出來(lái)。
遍 是對(duì)源程序或源程序的中間結(jié)果從頭到尾掃描一次,并作有關(guān)的加工處理,生成新的中間結(jié)果或目標(biāo)程序。遍數(shù)多了,整個(gè)編譯程序的邏輯結(jié)構(gòu)就比較清晰,但是會(huì)增加輸入和輸出所消耗的時(shí)間。因此,在主存可能的前提下,一般還是遍數(shù)少的好。
分遍的依據(jù):
1. 源程序的結(jié)構(gòu)
2. 選用機(jī)型的內(nèi)存大小
3. 設(shè)計(jì)目標(biāo)的技術(shù)指標(biāo)
4. 參加編譯程序人員的數(shù)量、素質(zhì)
好的編譯程序的指標(biāo):
1. 符合語(yǔ)法規(guī)則的程序都可執(zhí)行。
2. 任何非法的錯(cuò)誤都有可能識(shí)別,并盡量少的產(chǎn)生連鎖反應(yīng)。
3. 錯(cuò)誤不至于導(dǎo)致系統(tǒng)崩潰。
4. 可維護(hù)和可讀性。
5. 模塊化和結(jié)構(gòu)化。
概念上我們有時(shí)候把編譯程序分成編譯前端和編譯后端。
編譯前端前端主要由源語(yǔ)言有關(guān)但與目標(biāo)機(jī)無(wú)關(guān)的那些部分組成,通常包括詞法分析、語(yǔ)法分析、語(yǔ)義分析與中間代碼的產(chǎn)生,有的代碼優(yōu)化工作也可以包括在前端。
編譯后端后端包括編譯程序中與目標(biāo)機(jī)有關(guān)的那些部分,如與目標(biāo)機(jī)有關(guān)的代碼優(yōu)化和目標(biāo)代碼生成等。
通常后端不依賴源語(yǔ)言而僅僅依賴于中間語(yǔ)言。
以前人們構(gòu)造編譯程序大多數(shù)采用的是機(jī)器語(yǔ)言或匯編語(yǔ)言,現(xiàn)在只有為了充分發(fā)揮各種不同硬件系統(tǒng)的效率,為了滿足各種不同的具體要求,才會(huì)采用這種工具來(lái)構(gòu)造編譯程序(或編譯程序的“核心”部分),F(xiàn)在越來(lái)越多采用高級(jí)語(yǔ)言來(lái)構(gòu)造編譯程序。
T型圖為了便于說(shuō)明,我們常采用T型圖來(lái)表示源語(yǔ)言S、目標(biāo)語(yǔ)言T、和比編譯程序?qū)崿F(xiàn)語(yǔ)言I之間的關(guān)系。
每個(gè)T型圖相當(dāng)于一個(gè)編譯程序。
如果A機(jī)器上有一個(gè)使用A機(jī)器代碼實(shí)現(xiàn)的某高級(jí)語(yǔ)言L1的編譯程序(黃色),則我們可以使用L1語(yǔ)言編寫(xiě)另外一種高級(jí)語(yǔ)言L2的編譯程序(橙色)。把寫(xiě)好的L2編譯程序經(jīng)過(guò)L1編譯程序編譯后就可以得到A機(jī)器碼實(shí)習(xí)的L2編譯程序(綠色)。
通過(guò)上面用高級(jí)語(yǔ)言L1構(gòu)造編譯程序的原理,我們可以實(shí)現(xiàn)編譯程序的“移植”。首先我們有一個(gè)可以在A機(jī)器上編譯的高級(jí)語(yǔ)言L,
接下來(lái)我們使用L去寫(xiě)一個(gè)能夠在B機(jī)器上運(yùn)行的編譯程序,
然后通過(guò)L的編譯程序就可以生成在A機(jī)器上可以運(yùn)行的產(chǎn)生B機(jī)器代碼的編譯程序(3)。
使用這個(gè)編譯程序(3)去編譯一遍(2)就可以得到能在B機(jī)器上運(yùn)行的B機(jī)器代碼的編譯程序(4).
先對(duì)語(yǔ)言的核心部分構(gòu)造一個(gè)小小的編譯程序(可用低級(jí)語(yǔ)言實(shí)現(xiàn)),再以它為工具構(gòu)造能編譯更多語(yǔ)言成分的較大編譯程序,如此不斷擴(kuò)展,最后形成整個(gè)編譯程序(滾雪球),,這種通過(guò)一系列自展途徑而形成的編譯程序的過(guò)程叫做自編譯過(guò)程。
構(gòu)造工具現(xiàn)在人們已經(jīng)建立了多種編制部分編譯程序或者整個(gè)編譯程序的有效工具。構(gòu)造編譯程序的工具稱為編譯程序-編譯程序、編譯程序產(chǎn)生器或翻譯程序書(shū)寫(xiě)系統(tǒng)。
例如:
自動(dòng)產(chǎn)生掃描器:LEX FLEX
自動(dòng)產(chǎn)生語(yǔ)法分析器:YACC BISON
閱讀全文
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。
編譯原理#簡(jiǎn)介
編譯器概述什么是編譯器? 編譯器是一個(gè)程序 核心功能是把源代碼翻譯成目標(biāo)代碼 源代碼:C/C++、Java、C#、html、SQL… 目標(biāo)代碼:x86、IA64、ARM、MIPS… 編譯器的核心功能...
C語(yǔ)言編譯原理簡(jiǎn)介1. 編輯器: 我們編寫(xiě)代碼的一些窗口,如:記事本、word、notepad等。 2. 編譯器: 檢查用戶代碼的一些語(yǔ)法錯(cuò)誤并且將其編譯成匯編代碼。 3.匯編器:將編譯出來(lái)的文件變成目標(biāo)代碼(wi...
JDBC數(shù)據(jù)庫(kù)操作封裝(PreparedStatement)之前有用過(guò)老師給的實(shí)現(xiàn)好的JDBC封裝類,今天自己看著書(shū)按自己思路實(shí)現(xiàn)了一遍,并將Statement改為了PreparedStatement。 代碼import com.sun.tools.java...
Java處理控制臺(tái)輸入的長(zhǎng)度可變的數(shù)組數(shù)據(jù)問(wèn)題由來(lái)Java編程中有的時(shí)候我們會(huì)在控制臺(tái)輸入長(zhǎng)度可變的數(shù)組數(shù)據(jù)(分隔符一致),例如:1 2 3 4 5 6或者1,2,3,4,5,6,7然后對(duì)這串未知長(zhǎng)度的數(shù)據(jù)進(jìn)行處理,得到對(duì)應(yīng)類型的數(shù)組。分析1...
linux Shell中read的選項(xiàng)及用法1、Read的一些選項(xiàng) Read可以帶有-a, -d, -e, -n, -p, -r, -t, 和 -s八個(gè)選項(xiàng)。 -a :將內(nèi)容讀入到數(shù)值中echo -n "Input muliple val...
.Net編譯原理簡(jiǎn)單介紹首先簡(jiǎn)單說(shuō)一下計(jì)算機(jī)軟件運(yùn)行。所謂軟件運(yùn)行,就是一步一步做一些事情。計(jì)算機(jī)只認(rèn)識(shí)0和1.給計(jì)算機(jī)下命令,只能是0與1的方式,確切的說(shuō),其實(shí)是CPU只認(rèn)識(shí)0和1,因?yàn)檐浖\(yùn)行是CPU控制的。人直接操作0...
編譯原理簡(jiǎn)單介紹編譯原理學(xué)習(xí)導(dǎo)論 大學(xué)課程為什么要開(kāi)設(shè)編譯原理呢?這門(mén)課程關(guān)注的是編譯器方面的產(chǎn)生原理和技術(shù)問(wèn)題,似乎和計(jì)算機(jī)的基礎(chǔ)領(lǐng)域不沾邊,可是編譯原理卻一直作為大學(xué)本科的必修課程,同時(shí)也成為了研究...
深入淺出編譯原理-4-一個(gè)簡(jiǎn)單詞法分析器的C語(yǔ)言實(shí)現(xiàn)引言 光說(shuō)不練,假把式。 此小節(jié)來(lái)做一個(gè)實(shí)驗(yàn),用c語(yǔ)言自己實(shí)現(xiàn)一個(gè)簡(jiǎn)單的詞法分析器,來(lái)加深對(duì)詞法分析的理解。感興趣的就自己分析一下源碼吧,挺簡(jiǎn)單的,就沒(méi)畫(huà)流程圖,請(qǐng)見(jiàn)諒。閑言少敘,我們開(kāi)始吧。 ...
編譯原理:短語(yǔ),簡(jiǎn)單短語(yǔ),句柄,語(yǔ)法樹(shù)在文法和語(yǔ)言概念這里,比較難理解的是短語(yǔ)、簡(jiǎn)單短語(yǔ),所以好好梳理一下。 先給出短語(yǔ)、簡(jiǎn)單短語(yǔ)的概念: (備注:Vn代表非終結(jié)符號(hào)集,V+代表字匯表的正閉包,V*代表字匯表的閉包) 所以,短語(yǔ)、簡(jiǎn)單...
編譯原理 語(yǔ)法樹(shù) 句柄 簡(jiǎn)單短語(yǔ) 短語(yǔ)
編譯原理犛鋟ㄊ鳡句柄牸虻ザ逃餇短語(yǔ)
關(guān)于編譯原理犛鋟ㄊ
本文編號(hào):1335200
本文鏈接:http://sikaile.net/wenshubaike/dxkc/1335200.html