編譯原理——概述

基本概念

  • 編譯:把源程序轉換爲目標程序的過程
  • 翻譯程序:掃描所輸入的源程序,將其轉換爲目標程序或者直接翻譯成結果
    *
    • 編譯程序:即編譯器,將源程序翻譯成目標程序的翻譯器;源程序和數據分開處理
    • 解釋程序:解釋器,直接執行源程序的翻譯器,不生成目標程序,同時處理源程序和數據
  • 翻譯過程
    • 高級語言程序——編譯程序——>低級語言程序
    • 彙編語言——彙編程序——>機器語言程序
  • 編譯的階段和任務
  • 分析階段
    * 語法分析
    * 詞法分析
    * 語義分析
  • 綜合階段
    * 中間代碼生成
    * 代碼優化
    * 目標代碼生成
  • 符號表的管理
  • 錯誤診斷和處理

在這裏插入圖片描述

  • 分析階段:對源程序進行結構分析和語義分析,從而把源程序正文轉換爲某種內部表示形式

    • 語法分析:依次讀入源程序的每個字符,對構成源程序的字符進行分解,並識別出來特殊的字符串,例如變量名

      • 空格:被刪去
      • 註釋:被跳過
      • 識別出來的標識符放入符號表,並對某些加上屬性值
    • 詞法分析:層次結構分析,根據語法進行分組

    • 語義分析:對語句的意義進行檢查

      • 類型檢查
        • 每個運算符和運算對象是否符合要求
        • 數組下標是否合法
        • 形參實參是否匹配,類型是否匹配
  • 綜合階段

    • 中間代碼生成:一種抽象的機器程序
    • 代碼優化:對代碼進行改進,使其佔用空間少,運行速度快
    • 目標代碼生成:一般生成可以重定位的機器代碼或者彙編語言代碼
      • 對程序使用的每個變量要指定存儲單元
      • 對變量進行存儲器分配
  • 符號表管理

    • 記錄源程序使用的標識符
    • 收集每個標識符的各種屬性信息
  • 錯誤處理

    • 詞法分析檢測出來的非法字符錯誤
    • 語法分析出來的不符合語法規則錯誤
    • 語義分析出來的操作無意義的結構
    • 代碼生成程序檢測出來的目標程序區超範圍,計算機容量限制
  • 其他概念

    • 前端:編譯程序中與源程序語言有關,與目標機器無關的部分
    • 後端:編譯程序中與目標機器有關的部分
    • :對源程序或者中間形式從頭到尾掃描一遍,並作加工處理,生成新的中間形式或者目標程序
      在這裏插入圖片描述
  • 預處理器

    • 宏處理器:主要處理宏定義和宏調用
    • 文件包含:主要把文件的包含聲明擴展爲程序正文
      • 例如用#include <stdio.h>時,就用stdio.h的內容替換此語句
    • 語言擴充:用更先進的控制流和數據結構來增強原來的語言。
  • 彙編程序

    • 助記符表示操作碼。標識符表示存儲地址
  • 連接裝配程序

    • 讀入
      • 讀入可重定位的機器代碼
      • 修改重定位地址
      • 把修改後的指令和數據存放在適當的地方或者形成可執行文件
    • 連接
      * –把幾個可重定位的機器代碼文件連接成一個可執行的程序
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章