主頁 >  其他 > 編譯程式的任務

編譯程式的任務

2023-06-20 09:57:09 其他

編譯程式是一種翻譯程式,編譯程式是將一種語言形式翻譯成另一種語言形式,它將高級語言所寫的源程式翻譯成等價的機器語言或匯編語言的目標程式,

整個編譯程序一般可以劃分為 5 個階段:詞法分析、語法分析、語意分析及中間代碼生成、中間代碼優化和目標代碼生成,我們以一個簡單的程式段為例,分別介紹這 5 個階段所完成的任務,例如,計算圓柱體表面積的程式段如下:

float r,h,s;
s = 2 * 3.1416 * r * (h + r);

詞法分析

詞法分析階段的任務是對構成源程式的字串進行從左到右的掃描和分解,根據語言的詞法規則,識別出一個一個具有獨立意義的單詞(也稱單詞符號,簡稱符號),

語言的詞法規則是單詞符號的形成規則,它規定了哪些字串構成一個單詞符號,上述源程式通過詞法分析,根據語言的詞法規則識別出如下單詞符號:

  • 基本字(關鍵字) float
  • 識別符號 r,h,s
  • 常數 3.1416,2
  • 運算子 *,+
  • 界符 () ; ,

單詞符號的型別有:關鍵字、識別符號、常數、運算子、界符,

語法分析

語法分析的任務是在詞法分析的基礎上,根據語言的語法規則,從單詞符號串中識別出各種語法單位(如運算式、說明、 陳述句等)并進行語法檢查,即檢查各種語法單位在語法結構上的正確性,

語言的語法規則是語法單位的形成規則,它規定了如何從單詞符號形成語法單位,上述源程式通過語法分析,根據語言的語法規則識別單詞符號串 s = 2 * 3.1416 * r * (h + r),其中 s 是 <變數>,單詞符號串 2 * 3.1416 * r * (h + r) 組合成 <運算式 > 這樣的語法單位, 則由 <變數> = <運算式> 構成 <賦值陳述句> 這樣的語法單位,在識別各類語法單位的同時進行語法檢查,可以看到上述源程式是一個語法上正確的程式,

語意分析及中間代碼生成

定義一種語言除了要求定義語法外,還要求定義其語意,即對語言的各種語法單位賦予具體的意義,

語意分析的任務是首先對每種語法單位進行靜態的語意審查,然后分析其含義,并用另一種語言形式(比源語言更接近于目標語言的一種中間代碼或直接用目標語言)來描述這種語意,例如,上述源程式中,賦值陳述句的語意為:計算賦值號右邊運算式的值,并把它送到賦值號左邊的變數所確定的記憶體單元中,語意分析時,先檢查賦值號右邊運算式和左邊變數的型別是否一致,然后再根據賦值陳述句的語意,對它進行翻譯可得到如下形式的四元式中間代碼:

1687188700756.jpg

其中,T1、T2、T3、T4 是編譯程式引進的臨時變數,存放每條指令的運算結果,上述每一個四元式所表示的語意為:

image-20230619233532857.png

這樣,我們將源語言形式的賦值陳述句翻譯為四元式表示的另一種語言形式,這兩種語言在結構形式上是不同的,但在語意上是等價的,

中間代碼優化

中間代碼優化的任務是對前階段產生的中間代碼進行等價變換或改造,以期獲得更為高效的,節省時間和空間的目標代碼,優化主要包括區域優化和回圈優化等,例如上述四元式經區域優化后得:

image-20230619233811382.png

其中,2 和 3.1416 兩個運算物件都是編譯時的已知量,在編譯時就可計算出它的值 6.28,而不必等到程式運行時再計算,即不必生成(*,2,3.1416,T1)的運算指令,

目標代碼生成

目標代碼生成的任務是將中間代碼變換成特定機器上的絕對指令代碼或可重定位的指令代碼或匯編指令代碼,

表格管理 & 錯誤處理

在編譯程式的各個階段中,都要涉及表格管理和錯誤處理,

編譯程式的重要功能之一,是記錄源程式中所使用的變數的名字,并且收集與名字屬性相關的各種資訊,名字屬性包括一個名字的存盤分配、型別、作用域等資訊,如果名字是一個函式名,還會包括其引數數量、型別、引數的傳遞方式以及回傳型別等資訊,符號表資料結構可以為變數名字創建記錄條目,來登記源程式中所提供的或在編譯程序中所產生的這些資訊,編譯程式在作業程序的各個階段需要構造、查找、修改或存取有關表格中的資訊,因此在編譯程式中必須有一組管理各種表格的程式,

如果編譯程式只處理正確的程式,那么它的設計和實作將會大大簡化,但是程式設計人員還期望編譯程式能夠幫助定位和跟蹤錯誤,無論程式員如何努力,程式中難免總會有錯誤出現,雖然錯誤很常見,但很少有語言在設計的時候就考慮到錯誤處理問題,大部分程式設計語言的規范沒有規定編譯程式應該如何處理錯誤;錯誤處理方法由編譯程式的設計者決定, 因此,從一開始就計劃好如何進行錯誤處理,不僅可以簡化編譯程式的結構,還可以改進錯誤處理方法,一個好的編譯程式在編譯程序中, 應具有廣泛的程式查錯能力,并能準確地報告錯誤的種類及出錯位置,以便用戶查找和糾正,因此在編譯程式中還必須有一個出錯處理程式,

編譯程式

編譯程序的這 5 個階段的任務分別由 5 個程式完成,這 5 個程式分別稱為詞法分析程式、語法分析程式、語意分析及中間
代碼生成程式、中間代碼優化程式和目標代碼生成程式,另外再加上表格管理程式和出錯處理程式,這些程式便是編譯程
序的主要組成部分,一個典型編譯程式的結構框圖如圖所示,

image-20230619225502471.png

需要注意的是,圖中所給出的各個階段之間的關系是指它們之間的邏輯關系,不一定是執行時間上的先后關系,實際
上,可按不同的執行流程來組織上述各階段的作業,這在很大程度上依賴于編譯程序中對源程式掃描的遍數以及如何劃分各遍掃描所進行的作業,

此處所說的 “遍”,是指對源程式或其等價的中間語言程式從頭到尾掃描一遍,并完成規定加工處理作業的程序,例如,可以將前述 5 個階段的作業結合在一起,對源程式從頭到尾掃描一遍來完成編譯的各項作業,這種編譯程式稱為一遍掃描的編譯程式,對于某些程式設計語言,用一遍掃描的編譯程式去實作比較困難,可采用多遍掃描的編譯程式結構,每遍可完成上述某個階段的一部分、全部或多個階段的作業,且每一遍的作業是從前一遍獲得的作業結果開始的,最后一遍的作業結果是目標語言程式,第一遍的輸入則是用戶書寫的源程式,

多遍掃描的編譯程式較一遍掃描的編譯程式少占存盤空間,遍數多一些,可使各遍所要完成的功能獨立而單純,其編譯程式邏輯結構清晰,但遍數多勢必增加輸入輸出開銷,這將降低編譯效率,一個編譯程式究竟應分成幾遍和它所面臨的源語言的特征、機器規模、設計的目標等因素有關,很難統一劃定,一般在主存可能的前提下,還是遍數少一點為好,

參考資料

《編譯原理(第4版)》1.2 編譯程序和編譯程式的基本結構

本文來自博客園,作者:真正的飛魚,轉載請注明原文鏈接:https://www.cnblogs.com/feiyu2/p/17492776.html

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/555648.html

標籤:其他

上一篇:Gamma:強大的AI制作PPT神器,用完再也回不去了!

下一篇:返回列表

標籤雲
其他(161353) Python(38243) JavaScript(25508) Java(18250) C(15238) 區塊鏈(8271) C#(7972) AI(7469) 爪哇(7425) MySQL(7259) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5875) 数组(5741) R(5409) Linux(5347) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4606) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2436) ASP.NET(2404) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) .NET技术(1984) HtmlCss(1968) 功能(1967) Web開發(1951) C++(1942) python-3.x(1918) 弹簧靴(1913) xml(1889) PostgreSQL(1881) .NETCore(1863) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 編譯程式的任務

    編譯程式是一種翻譯程式,編譯程式是將一種語言形式翻譯成另一種語言形式。它將高級語言所寫的源程式翻譯成等價的機器語言或匯編語言的目標程式。

    整個編譯程序一般可以劃分為 5 個階段:詞法分析、語法分析、語意分析及中間代碼生成、中間代碼優化和目標代碼生成。 ......

    uj5u.com 2023-06-20 09:57:09 more
  • Gamma:強大的AI制作PPT神器,用完再也回不去了!

    看過許多 AI 制作 PPT 軟體,最侄訓是被 Gamma 驚艷到。 Gamma 是一款基于人工智能技術的 PPT 制作工具,可以幫助用戶輕松制作高質量的 PPT 演示文稿。 # 痛點解決 相比傳統制作 PPT 方式,Gamma 可以解決哪些如下 7 個痛點: ## 一句話生成 PPT 傳統制作 P ......

    uj5u.com 2023-06-20 09:14:11 more
  • 100個物聯網專案(基于ESP32)2快速入門

    ## 2快速入門 你將需要IDE來撰寫你的代碼。我們推薦初學者使用Arduino IDE。雖然它不是最好的IDE,但它可以完成作業,而且對初學者來說是直接和容易使用的。在熟悉了Arduino IDE并發展到更復雜的專案后,你可能會發現利用VS Code與Platformio插件來代替它更為方便。 # ......

    uj5u.com 2023-06-20 09:00:40 more
  • 好用網址分享-77ai導航與77搜索導航

    AI(人工智能)技術正在改變我們的生活方式和作業方式,越來越多的人開始關注和使用AI相關的網站和應用程式。在這篇文章中,我將為大家介紹一些常用的AI網址導航,幫助您更好地了解和使用AI技術。 **AI Hub** AI Hub是由Google Cloud推出的一個開放平臺,旨在幫助企業和開發者快速構 ......

    uj5u.com 2023-06-20 08:58:57 more
  • To ChatGPT:讓你更加隨意地使用所有ChatGPT應用

    現在其實已經有很多在線的llm服務了,當然也存在許多開源部署方案,但是不知道大家有沒有發現一個問題,目前基于ChatGPT開發的應用,都是使用的OpenAI的介面。換句話說,如果沒有OpenAI賬號,就沒有辦法使用這些應用。但是其實這些應用并不是強依賴于OpenAI的介面,其他的在線llm服務也是可 ......

    uj5u.com 2023-06-20 08:58:53 more
  • Liunx nginx服務

    目錄 一、nginx概念 二、nginx特點 三、nginx應用場景 四、nginx和apache 五、阻塞和非阻塞 六、同步和異步 七、編譯安裝nginx 八、升級nginx 九、總結 一、nginx概念 1.nginx概念 Nginx ("engine x") 是一個高性能的 HTTP 和反向代 ......

    uj5u.com 2023-06-20 08:58:26 more
  • 【解決方法】銳捷 EVE 模擬器關聯 Wireshark 進行抓包

    # 環境: >工具:銳捷 EVE 模擬器,VMware Workstation Pro 抓包工具:Wireshark 系統版本:Windows 10 # 問題描述: >描述:使用銳捷 EVE 模擬器抓包,點擊后無反應,網上的方法要么亂寫,亂抄,要么不夠仔細。故自己寫一遍。 >提示:若按照教程還是無法 ......

    uj5u.com 2023-06-20 08:57:47 more
  • 【工程應用八】終極的基于形狀匹配方案解決(小模型+預生成模型+無

    我估摸著這個應該是關于形狀匹配或者模版匹配的最后一篇文章了(同時紙質旋轉和縮放),其實大概是2個多月前這些東西都已經弄完了,只是一直靜不下來心整理文章,提醒一點,這篇文章后續可能會有多次修改(但不會重新發文章,而是在后臺直接修改或者增加),所以有需要的朋友可以隨時重復查看。 ......

    uj5u.com 2023-06-20 08:57:19 more
  • 云原生周刊:Dapr v1.11 發布

    ## 開源專案推薦 ### [Kamaji](https://github.com/clastix/kamaji) Kamaji 可以大規模地部署和運行 Kubernetes 控制平面,而只需承擔一小部分操作負擔。Kamaji 的特別之處在于,控制平面組件是在一個單一的 pod 中運行,而不是在專用 ......

    uj5u.com 2023-06-20 08:57:06 more
  • 【解決辦法】DHCP Relay環境中PC無法獲取IP地址,排錯與解法

    # 環境: >工具:銳捷EVE模擬器,VMware Workstation Pro 遠程工具:SecureCRT 系統版本:Windows 10 # 問題描述: >描述:在 DHCP Relay 環境中,中繼和服務器能正常互通,但是通過抓包發現,PC 客戶端發送的報文并沒有被正常的轉發給 DHCP ......

    uj5u.com 2023-06-20 08:56:53 more