官术网_书友最值得收藏!

1.2 編譯器的結構

編譯器的任務是將源代碼翻譯為目標機器上的目標代碼。圖1.2中展示的三段式編譯器架構把編譯過程分為前端、中端與后端:前端與目標機器無關,其對源代碼進行一系列的分析和檢查,在保證源代碼詞法、語法、語義正確性的前提下,將源代碼翻譯為中間代碼;中端進行一系列的靜態檢查與代碼優化,檢測并報告程序內部可能存在的缺陷,去除冗余代碼;后端將中間代碼翻譯為目標代碼,分配寄存器,進行代碼的匯編與鏈接。設計一門新的程序設計語言時,開發者只需要開發針對語言的前端,復用已有的編譯器后端,就能將語言源代碼翻譯為目標機器的機器指令,大大增強了編譯器模塊的可復用性。同時,語言設計者不需要掌握后端開發的相關技術,降低了語言設計的難度。

圖1.2 三段式編譯器架構

編譯的每個階段中包含了不同的步驟,編譯器完成步驟時將代碼從一種表示形式轉換成另一種表示形式,如圖1.3所示。通常,編譯器前端包含三個步驟:詞法分析、語法分析和語義分析。詞法分析器將源代碼拆成詞素,分析每個詞素是否滿足詞法規則,并把詞素組合為詞法單元流;語法分析器讀入詞法單元流,基于語言的語法規則推導并構建語法分析樹;語義分析器分析程序是否滿足語義規則(如變量的類型等)并在語法分析樹上添加注釋。編譯器中端將詞法、語法、語義正確的,代表程序的注釋語法樹翻譯為中間代碼,部分編譯器基于中間代碼設計優化管道,進行針對中間代碼的優化。編譯器后端接受中間代碼,將其翻譯為目標機器相關的目標代碼,并進行針對目標代碼的相關優化。

圖1.3 編譯器各模塊及中間產物

本書使用一種類C語言(C--語言)來說明編譯器如何完成編譯過程。

主站蜘蛛池模板: 辉县市| 永川市| 玛纳斯县| 蓝田县| 和硕县| 富源县| 嵊州市| 通州区| 沂水县| 精河县| 靖宇县| 武鸣县| 乌拉特后旗| 丹阳市| 新干县| 建水县| 汽车| 舒兰市| 大石桥市| 寿宁县| 盱眙县| 舟山市| 吉水县| 望奎县| 永修县| 宝鸡市| 石泉县| 新泰市| 穆棱市| 阿城市| 五寨县| 黄骅市| 西宁市| 扶绥县| 南宫市| 壤塘县| 山东省| 博乐市| 通州市| 综艺| 西林县|