天堂国产午夜亚洲专区-少妇人妻综合久久蜜臀-国产成人户外露出视频在线-国产91传媒一区二区三区

當(dāng)前位置:主頁(yè) > 論文百科 > 大學(xué)課程 >

【編譯原理】編譯原理簡(jiǎn)單介紹

發(fā)布時(shí)間:2017-12-26 01:10

  本文關(guān)鍵詞:編譯原理  


  更多相關(guān)文章: 編譯原理 編譯


<main> 【編譯原理】編譯原理簡(jiǎn)單介紹

原創(chuàng) 2017年05月07日 13:27:20

  • 921
  • 編輯
  • 刪除
  • 編譯原理簡(jiǎn)單介紹 什么叫編譯程序 翻譯程序

    翻譯程序(Translator)是一種程序,其輸入是某種語(yǔ)言的一系列語(yǔ)句,而其輸出則是另一種語(yǔ)言的一系列語(yǔ)句,二者在邏輯上是等價(jià)的。就類似生活中的翻譯官一樣,把英語(yǔ)翻譯成漢語(yǔ),二者在意思上也是等價(jià)的。

    這里寫(xiě)圖片描述

    編譯程序

    編譯程序(Compiler)是一種程序。它把用高級(jí)語(yǔ)言寫(xiě)的源程序作為數(shù)據(jù)接收,經(jīng)過(guò)翻譯轉(zhuǎn)換,產(chǎn)生面向機(jī)器的代碼作為輸出。
    這當(dāng)中代碼還可能要由匯編程序或裝配程序作進(jìn)一步加工,得出目標(biāo)程序,交給計(jì)算機(jī)執(zhí)行。

    這里寫(xiě)圖片描述

    翻譯和編譯的區(qū)別

    這里寫(xiě)圖片描述

    編譯的過(guò)程

    編譯程序的工作過(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ǔ)法分析

    語(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)分析。

    語(yǔ)義分析和中間代碼的產(chǎn)生

    這一階段的任務(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ì)指令、可重定位指令、匯編指令
    )。

    編譯程序的結(jié)構(gòu) 編譯程序總框

    這里寫(xiě)圖片描述

    表格與表格的管理

    編譯程序在工作過(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)造工具

    以前人們構(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è)編譯程序。

    這里寫(xiě)圖片描述

    用高級(jí)語(yǔ)言L1構(gòu)造編譯程序

    如果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編譯程序(綠色)。

    這里寫(xiě)圖片描述

    編譯程序的移植

    通過(guò)上面用高級(jí)語(yǔ)言L1構(gòu)造編譯程序的原理,我們可以實(shí)現(xiàn)編譯程序的“移植”。首先我們有一個(gè)可以在A機(jī)器上編譯的高級(jí)語(yǔ)言L,

    這里寫(xiě)圖片描述


    接下來(lái)我們使用L去寫(xiě)一個(gè)能夠在B機(jī)器上運(yùn)行的編譯程序,

    這里寫(xiě)圖片描述


    然后通過(guò)L的編譯程序就可以生成在A機(jī)器上可以運(yùn)行的產(chǎn)生B機(jī)器代碼的編譯程序(3)。

    這里寫(xiě)圖片描述


    使用這個(gè)編譯程序(3)去編譯一遍(2)就可以得到能在B機(jī)器上運(yùn)行的B機(jī)器代碼的編譯程序(4).

    這里寫(xiě)圖片描述

    自編譯方式

    先對(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)載。

  • 本文已收錄于以下專欄:
  • 相關(guā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


    資料下載
    論文發(fā)表

    本文鏈接:http://sikaile.net/wenshubaike/dxkc/1335200.html


    Copyright(c)文論論文網(wǎng)All Rights Reserved | 網(wǎng)站地圖 |

    版權(quán)申明:資料由用戶b2e7d***提供,本站僅收錄摘要或目錄,作者需要?jiǎng)h除請(qǐng)E-mail郵箱bigeng88@qq.com
    麻豆剧果冻传媒一二三区| 情一色一区二区三区四| 欧美午夜一级特黄大片| 亚洲高清欧美中文字幕| 亚洲国产黄色精品在线观看| 亚洲午夜精品视频观看| 东北老熟妇全程露脸被内射| 99久免费精品视频在线观| 九九久久精品久久久精品| 欧洲偷拍视频中文字幕| 久久99夜色精品噜噜亚洲av| 国产精品亚洲欧美一区麻豆| 国产午夜精品久久福利| 亚洲一区二区三区在线中文字幕| 人妻久久这里只有精品| 出差被公高潮久久中文字幕| 精品久久综合日本欧美| 国产精品蜜桃久久一区二区| 亚洲熟女精品一区二区成人| 国内九一激情白浆发布| 国产精品国产亚洲看不卡| 精品一区二区三区中文字幕| 国产精品午夜视频免费观看| 亚洲精品国产精品日韩| 国产精品丝袜一二三区| av一区二区三区天堂| 久草视频这里只是精品| 福利在线午夜绝顶三级| 美国女大兵激情豪放视频播放 | 亚洲专区中文字幕在线| 视频一区二区 国产精品| 久久亚洲国产视频三级黄| 中文字幕人妻av不卡| 日韩人妻中文字幕精品| 日本三区不卡高清更新二区| 国产日韩精品欧美综合区| 亚洲中文字幕乱码亚洲| 日本久久精品在线观看| 色婷婷中文字幕在线视频| 久久99爱爱视频视频| 国产亚洲欧美自拍中文自拍|