編譯原理學習小結_0

編譯器簡介
編譯器是一個翻譯程序。將一種程序翻譯成另一種語言(如彙編或其他語言)。作爲翻譯的重要組成部分,編譯器能夠向用戶報告編譯的源程序的出現的錯誤。
編譯器分類
  1. 一遍編譯器
  2. 多遍編譯器
  3. 裝入並執行編譯器
  4. 調試編譯器
  5. 優化編譯器

  • 編譯器模型——分析-綜合模型
編譯有兩部分組成:分析和綜合。分析部分將源程序切分成一些基本快並形成源程序的中間表示,綜合部分將源程序的中間表示轉換爲所需的目標程序。

  • 編譯器的前驅和後綴
  • 源程序分析
三個階段:1、線性分析 2、層次分析 3、語義分析
  1. 詞法分析:線性分析被稱爲詞法分析或掃描。此過程將記號的空格將被刪除(提取元素)。
  2. 語法分析:又被稱爲層次分析。將程序分成不同結構,來實現語法的分析(如分辨表達式和語句)。實現程序的層次結構通常是通過遞歸來表達的。
  3. 語義分析:語義分析階段檢測源程序的語義錯誤,並收集代碼生成階段要用到的類型信息。語義分析的重要組成部分是類型檢查。類型檢查負責檢驗每個操作符的操作數是否滿足源語言的說明。

  • 編譯器的各階段
  • 符號表管理
符號表是一個數據結構。每個標識符在符號表都有一條記錄,記錄每個域對應於標識符的一個屬性(存儲位置、類型、作用域)。

  • 各分析階段
詞法分析器:此階段將源碼去掉空格,生成字符流,對每個標記符建立記號。
語法分析器:將源碼建立層次。
語義分析器:對錯誤進行檢查(其實前三個過程都有檢查源碼錯誤,其中語法和語義分析器階段能將大多數錯誤都指出。),對類型轉換時會自動轉換(如int 自動轉換double).
中間代碼生成器:將計算過程存儲在每不同地方。
代碼優化器:將中間代碼優化。
代碼生成器:生成目標代碼。


  • 編譯器的夥伴
    • 預處理器
  1. 宏處理:用戶在源程序中定義宏。宏定義和宏引用。
  2. 文件包含:預編譯器可以將頭文件包含到程序正文中。
  3. “理性”預處理器:將現代控制流和數據結構化機制添加到比較老式的語言中。
  4. 語言擴充:通過大量的內部宏定義來增強語言的能力。

  • 彙編器
將彙編代碼轉換成機器代碼

  • 兩遍彙編
最簡單的彙編器對輸入彙編程序文件進行兩遍掃描,每遍讀文件一次。
第一遍將所有標識符(操作數)都掃描出來並存入符號表(彙編器的符號表與編譯器的是分開的);
第二遍彙編器再掃描一遍,將每個操作符翻譯成機器代碼(可重定位)

  • 裝配器和鏈接編輯器
裝配器完成程序的裝入和連接。



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章