java編譯過程

2021-08-20 15:03:08 字數 1043 閱讀 3073

摘自:深入理解jvm虛擬機器

a、解析與填充符號表

b、註解處理

c、分析與位元組碼生成

a、解析與填充符號表(parsefiles):

1、詞法、語法分析

詞法分析:將源**的字元流轉化為標記集合(token),單個字元是程式編寫過程的最小元素,而標記則是編譯過程的最小元素,關鍵字、變數名、字面量、運算子都可以成為標記

語法分析:根據token序列構造抽象語法樹的過程

2、填充符號表

完成語法分析和詞法分析後,就是填充符號表的過程。符號表是由符號位址和符號資訊組成的**

b、註解處理

c、分析與位元組碼生成

語法樹能確保乙個結構正確的源程式抽象,但無法保證源程式是符合邏輯的。

1、語義分析過程分為標註檢查以及資料集控制流分析。

標註檢查:變數使用前是否宣告、變數與賦值之間的資料型別是否能夠匹配、常量重疊

2、資料及控制流分析

程式區域性變數在使用前是否有賦值、方法的每條路徑是否都有返回值、是否所有的受查異常都被正確處理

3、解語法糖

泛型、變長引數、自動裝箱/拆箱

4、位元組碼生成

將上幾步中生成的資訊(語法樹、符號表)轉化成位元組碼寫到磁碟中,還進行少量的**新增和轉換工作

比如例項構造器()方法和類構造器()方法就是在這個階段被新增到語法樹中的。

這兩個構造器的產生過程實際上是乙個**收斂的過程,編譯器會把語句塊(對於例項構造器而言是{}塊,對於類構造器而言是static{}塊)、變數初始化(例項變數和類變數)、呼叫父類的例項構造器等操作收斂到()和()方法中,並且保證順序是:父類的例項構造器、然後初始化變數、執行語句塊的順序行

完成了對語法樹的遍歷和調整之後,就會把填充了所有所需資訊的符號表交給classwriter類,由這個類writeclass()方法輸出方法碼,最終生成的class檔案,到此為止,整個編譯過程宣告結束。

編譯原理 編譯過程概述

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

編譯選項 HarmonyOS編譯過程

全文約1300字,閱讀約需要4分鐘 編譯選項 編譯過程 python build.py wifiiot完成了hi3861開發板所需版本的編譯,這一篇具體說一下這個編譯過程。編譯選項 當前harmonyos一共支援四個引數 product 具體要編譯的專案 b build type release o...

編譯原理 編譯的過程

預處理 prepressing 展開巨集定義 處理 define,include 刪除注釋,新增行號和檔名標識。生成.i 預處理檔案 編譯 compilation 詞法分析 語法分析 語義分析 優化。預處理 編譯用ccl完成。生成.s 彙編 檔案 彙編 assembly 把彙編 轉成機器可執行的指令...