1. 程式人生 > 其它 >java編譯器原始碼解析-詞法分析

java編譯器原始碼解析-詞法分析

java前端編譯器的入口在com.sun.tools.javac.Main,然而跟著main方法走下去,你會發現真正的實現內容在com.sun.tools.javac.main.JavaCompiler類的compile()方法中。

借用《深入理解java虛擬機器》中的一張圖片,實際的解析分為多個步驟。

 

 

0.初始化插入式註解處理器(非必須)

1.詞法分析、

2.語法分析

3.輸入到符號表

4.執行註解處理

5.屬性分析

6.資料流分析

7.解析語法糖

8.生成位元組碼

原始碼中有一個列舉類描述瞭解析的過程,可以作為參考:

public enum CompileState {
        INIT(
0), PARSE(1), ENTER(2), PROCESS(3), ATTR(4), FLOW(5), TRANSTYPES(6), UNLAMBDA(7), LOWER(8), GENERATE(9); }

 

因為第0步非必須,我們從第一步詞法分析開始

二、詞法解析

javac的詞法解析器是com.sun.tools.javac.parser.Scanner,實現程式碼在com.sun.tools.javac.parser.JavaTokenizer,其中核心方法是readToken(),其中

scanIdent()用瞭解析一個識別符號;

scanNumber()用於解析一個數字,包括二進位制、8進位制、十進位制和十六進位制;

scanOperator()用瞭解析加減乘除等操作符;

scanLitChar()解析一個字串字面量;

詞法分析的結果是一個token流