編譯原理 編譯的過程

2021-10-23 12:31:44 字數 932 閱讀 7580

預處理(prepressing)- 展開巨集定義(處理#define,#include),刪除注釋,新增行號和檔名標識。生成.i 預處理檔案

編譯(compilation)- 詞法分析、語法分析、語義分析、優化。預處理+編譯用ccl完成。生成.s 彙編**檔案

彙編(assembly)- 把彙編**轉成機器可執行的指令,不需要做指令優化。用彙編器as完成。生成.o 目標檔案(object file)

鏈結(linking)- 用鏈結器ld完成。

通常,編譯過程分為6步:掃瞄、語法分析、語義分析、源**優化、**生成、目標**優化。

1 詞法分析(src -> tokens, scannar:lex)

2 語法分析(tokens -> st, parser :yacc)

3 語義分析(st -> commented st, semantic analyzer)

經過語義分析後,st的所有節點被標識了型別,對於隱式轉換的,會插入相應轉換節點。語義分析器還會對符號表中的符號型別也做更新。

4 中間語言生成(commented st -> ir, source code optimizer)

非常接近目標**,但是ir與目標機器和執行時環境無關(而目標**依賴於目標機器)

根據ir,編譯器分為前端和後端。前端負責產生ir,後端負責將ir轉換成目標機器碼。

5 目標**生成(ir -> target code,code generator)

6 目標**優化(target code -> final target code, target code optimizer)

編譯原理 編譯過程概述

編譯程式即是將高階語言書寫的源程式翻譯成與之等價的目標程式 組合語言或機器語言 其工作可分為六個階段,見下圖 對於編譯的各個階段,邏輯上可以劃分為前端和後端兩部分。前端包括詞法分析到中間 生成中各個階段的工作,後端則是優化及目標 生成的階段。以中間 為分水嶺的原因是把編譯過程分解為與機器有關和無關兩...

編譯原理 編譯器的編譯基本過程

原文出處 崤嶙的部落格 編譯器最基本的功能就是把高階語言 例如c fortran 編寫的 轉化為機器指令 就是01串 從這個角度來說它本質上是個轉換過程。經典的編譯過程主要包括 1 詞法分析 lexical analysis 2 語法分析 語法分析的輸入是一連串的token 詞法分析的輸出 根據語言...

編譯原理 學習記錄1 程式編譯過程

前端 該階段的編譯工作主要依賴源程式,與目標機無關。語法分析 在詞法分析基礎上,將單詞序列分解成各類語法短語 也稱語法單位,如 程式 語句 表示式 可表示成語法樹 推導樹 通過語法分析,確定乙個輸入串是否構成乙個語法上正確的程式。即 經語法分析可以得到乙個分析樹。問 如何根據單詞序列構造語法分析樹?...