編譯原理介紹

什麼是編譯程序

把某一種語言程序(稱爲源語言程序)等價地轉換
成另外一種語言程序(稱爲目標語言程序)的程序
高級語言程序須要編譯程序的翻譯才能變成機器語言程序(目標程序),機器程序能夠運行成爲結果前端

編譯程序:
1.診斷編譯程序(Diagnostic Compiler)
2.優化編譯程序(Optimizing Compiler)
3.交叉編譯程序(Cross Compiler)
4.可變目標編譯程序(Retargetable Compiler)
解釋程序(Interpreter)
把源語言寫的源程序做爲輸入,但不產生目標
程序,而是邊解釋邊執行源程序後端

爲何要學習編譯原理

理解計算系統

設計計算系統

訓練計算思惟(Computational Thinking)

計算思惟基本概念
Jeannette M. Wing, Computational Thinking,
Communications of ACM, Vol.49, No.3, 2006,
pp.33-35.
被認爲是近十年來產生的最具備基礎性、長期性的
學術思想,成爲21世紀計算機科學研究和教育的熱
工具

  • 計算思惟是運用計算機科學的基礎概念去求解問題、
    設計系統和理解人類的行爲,它包括了一系列普遍
    的計算機科學的思惟方法
  • 計算思惟和閱讀、寫做和算術同樣,是21世紀每一個
    人的基本技能,而不單單屬於計算機科學家
  • 計算思惟在生物、物理、化學、經濟學、統計學等
    其餘學科中的影響已經顯現
    計算思惟包括一系列普遍的計算機科學的思惟方法:
  • 抽象
  • 忽略一個主題中與當前問題(或目標)無關的那些方面,
    以便更充分地注意與當前問題(或目標)有關的方面
  • 從衆多的事物中抽取出共同的、本質性的特徵,舍
    棄其非本質的特徵
  • 是一種從個體把握通常、從現象把握本質的認知過
    程和思惟方法
  • 圖靈機就是一種抽象
  • 編譯原理中的"抽象"
    • 有限自動機
    • 形式文法
  • 自動化
  • 將抽象思惟的結果在計算機上實現,是一個將計算
    思惟成果物化的過程,也是將理論成果應用於技術
    的實踐
  • 自動化的思惟方法不只體如今編譯程序自己的工做
    機制上,更體如今了編譯程序的生成工具的研究和
    設計上
  • 編譯原理中的"自動化「
    • 有限自動機
    • 預測分析程序
    • 算符優先分析
    • LR分析
  • 問題分解
  • 分解(Decomposition)
  • 將大規模的複雜問題分解成若
    幹個較小規模的、更簡單的問
    題加以解決
  • 對問題自己的明確描述,並對問
    題解法做出全局性決策
  • 把問題分解成相對獨立的子問題
  • 再以一樣的方式對每一個子問題進
    一步精確化,直到得到對問題的
    明確的解答
  • 分解(Decomposition)
  • 層次化管理
  • 編譯原理中的"問題分解"
  • 爲何編譯程序引入中間語言?
  • 爲何編譯分紅多個階段?
  • 爲何分析過程分紅多遍?
  • 遞歸
  • 遞歸(Recursion)
  • 問題的解決依賴於相似問題的解決,只不事後者的
    複雜程度或規模較原來的問題更小
  • 一旦將問題的複雜程度和規模化簡到足夠小時,問
    題的解法其實很是簡單
  • 編譯原理中的"遞歸"
    • 遞歸降低分析
    • 基於樹遍歷的屬性計算
    • 語法制導翻譯
  • 權衡
  • 權衡(折衷, Tradeoff )
  • 理論可實現 vs. 實際可實現
  • 理論研究重在探尋問題求解的方法,對於理論成果
    的研究運用又須要在能力和運用中做出權衡
  • 編譯原理中的"權衡"
  • 用上下文無關文法來描述和處理高級程序設計語言
  • 優化措施的選擇
  • ...
  • 保護、冗餘、容錯、糾錯和恢復
  • 利用啓發式推理來尋求解答
  • 在不肯定狀況下的規劃、學習和調度
  • ...學習

    編譯原理

  • 編譯理論與技術
  • 計算機科學與技術中理論和實踐相結合的最好典範
  • ACM 圖靈獎
  • 授予在計算機技術領域做出突出貢獻的科學家
  • 程序設計語言、編譯相關的獲獎者是最多的
  • 編譯理論與技術
  • 計算機科學與技術中理論和實踐相結合的最好典範
  • 體現了不少典型的計算思惟方法
  • 編譯原理和方法的應用
  • Html/XML 分析
  • 語言處理工具
  • 搜索引擎優化

    編譯過程

    編譯程序是怎樣把高級語言(如C++)翻譯成低
  • 級語言(如機器指令)的?
  • 把英文翻譯爲中文
  • 識別出句子中的一個個單詞---詞法分析
  • 分析句子的語法結構---語法分析
  • 根據句子的含義進行初步翻譯---中間代碼產生
  • 對譯文進行修飾---優化
  • 寫出最後的譯文---目標代碼產生
    以上是編譯程序工做的五個階段
  • 編譯過程——詞法分析
  • 任務: 輸入源程序,對構成源程序的字符串進行
    掃描和分解,識別出單詞符號
  • 依循的原則:構詞規則
  • 描述工具:有限自動機
    for i := 1 to 100 do
    基本字 標識符 賦值號 整常數 基本字 整常數 基本字
  • 編譯過程——語法分析
  • 任務:在詞法分析的基礎上,根據語法規則把
    單詞符號串分解成各種語法單位(語法範疇)
  • 依循的原則:語法規則
  • 描述工具:上下文無關文法
    Z := X + 0.618 * Y(算術表達式--》算術表達式--》賦值語句)
  • 編譯過程——中間代碼產生
  • 任務:對各種語法單位按語言的語義進行初步翻譯
  • 依循的原則:語義規則
  • 描述工具:屬性文法
  • 中間代碼:三元式,四元式,樹,...
  • Z:=X + 0.618 * Y 翻譯成四元式爲
    |序號 | OPR | OPN1 | OPN2 | RESULT | 註釋|
    |:--:|:--:|:--:|:--:|:--:|:--:|:--:|
    |(1)| * | 0.618| Y | T1 | T1:=0.618*Y|
    |(2)| + | X | T1 | T2 | T2:=X+T1|
    |(3)| := | T2 | | Z | Z:=T2|
  • 編譯過程——優化(;例如乘法變成加法)
  • 任務:對前階段產生的中間代碼進行加工變換,
    以期在最後階段產生更高效的目標代碼
  • 依循的原則:程序的等價變換規則搜索引擎

  • 編譯過程——目標代碼產生
  • 任務: 把中間代碼變換成特定機器上的目標代碼
  • 依賴於硬件系統結構和機器指令的含義
  • 目標代碼三種形式
  • 彙編指令代碼: 須要進行彙編
  • 絕對指令代碼: 可直接運行
  • 可從新定位指令代碼: 須要鏈接翻譯

編譯程序的結構

  • 編譯程序總框
  • 詞法分析器------源程序
  • 語法分析器------中間代碼(四元式)
  • 語義分析與中間代碼生成器------語法單位
  • 優化段------目標代碼
  • 目標代碼生成器------中間代碼(四元式)
  • 出錯處理
  • 出錯處理程序
  • 發現源程序中的錯誤,把有關錯誤信息報告給用戶
  • 語法錯誤
  • 源程序中不符合語法(或詞法)規則的錯誤
  • 非法字符、括號不匹配、缺乏 ;、...
  • 語義錯誤
  • 源程序中不符合語義規則的錯誤
  • 說明錯誤、做用域錯誤、類型不一致、...
  • 所謂"遍", 就是對源程序或源程序的中間表示
    從頭至尾掃描一次
  • 階段與遍是不一樣的概念
  • 一遍能夠由若干段組成
  • 一個階段也能夠分若干遍來完成
  • 編譯前端與後端
  • 編譯前端
  • 與源語言有關,如詞法分析,語法分析,語義分析與
    中間代碼產生,與機器無關的優化
  • 編譯後端
  • 與目標機有關,與目標機有關的優化,目標代碼產生
  • 帶來的好處
  • 程序邏輯結構清晰
  • 優化更充分,有利於移植

編譯程序的生成

  • 以彙編語言和機器語言爲工具
  • 優勢: 能夠針對具體的機器,充分發揮計算機的系統
    功能;生成的程序效率高
  • 缺點: 程序難讀、難寫、易出錯、難維護、生產的效
    率低
  • 高級語言書寫
  • 程序易讀、易理解、容易維護、生產的效率高
  • 利用已有的某種語言的編譯程序實現另外一語言的編
    譯程序
  • 移植方法
  • 把一種機器上的編譯程序移植到另外一種機器上
  • 自編譯方式
  • 編譯程序自動產生
  • 編譯程序-編譯程序,編譯程序產生器,編譯程序書
    寫系統
  • LEX:詞法分析程序產生器
  • YACC:語法分析程序產生器
相關文章
相關標籤/搜索