●前言章 Javac介紹11.1 初識Javac11.2 Javac源碼與調試41.3 Javac命令7第2章 Javac文件繫統122.1 文件相關實現類122.2 文件的管理252.2.1 獲取JavacFileManager對像252.2.2 StandardLocation類282.2.3 JavacFileManager類31第3章 詞法分析383.1 字符編碼383.2 獲取字符輸入流403.3 Token與Name433.3.1 Token介紹443.3.2 Name對像的生成與存儲473.3.3 Name映射為Token513.4 生成Token流52第4章 語法分析之認識樹節點674.1 定義及聲明684.1.1 JCCompilationUnit類684.1.2 JCImport類694.1.3 JCClassDecl類704.1.4 JCModifiers類714.1.5 JCTypeParameter類724.1.6 JCVariableDecl類724.1.7 JCMethodDecl類744.2 語句754.2.1 JCBlock類754.2.2 JCIf類764.2.3 JCWhileLoop、JCDoWhileLoop、JCForLoop與JCEnhancedForLoop類784.2.4 JCSwitch與JCCase類794.2.5 JCTry、JCCatch與JCThrow類814.2.6 JCLabeledStatement、JCReturn、JCContinue與JCBreak類824.2.7 JCSynchronized類834.2.8 JCAssert類834.3 表達式834.3.1 基本表達式844.3.2 含運算符的表達式884.3.3 類型相關表達式944.3.4 注解表達式974.4 生成樹節點98第5章 語法分析之建立抽像語法樹1015.1 定義及聲明的抽像語法樹1015.2 語句的抽像語法樹1125.3 表達式的抽像語法樹1215.3.1 基本表達式1225.3.2 含有運算符的表達式1345.4 遍歷抽像語法樹140第6章 符號表的組織1436.1 符號的定義1436.1.1 Symbol類1446.1.2 TypeSymbol及其子類1506.1.3 VarSymbol類1546.1.4 MethodSymbol及OperatorSymbol類1546.2 符號表的組織1606.2.1 Env類介紹1606.2.2 AttrContext類介紹1626.2.3 Scope類介紹1636.2.4 符號表的建立1646.3 類型的定義1696.3.1 普通類型的定義1696.3.2 泛型相關類型的定義175第7章 填充符號表1807.1 依賴的處理1807.1.1 創建包或類符號1807.1.2 輸入包或類下的成員符號1847.2 符號輸入的階段1897.2.1 Enter類1907.2.2 visitTopLevel()方法1927.2.3 visitClassDef()方法1937.2.4 visitTypeParameter()方法1967.3 符號輸入第二階段1977.3.1 MemberEnter類1977.3.2 visitImport()方法2007.3.3 visitMethodDef()方法2077.3.4 visitVarDef()方法209第8章 插入式注解的實現2118.1 注解處理器基礎2118.1.1 編寫注解處理器2118.1.2 注解配置2158.1.3 工具類2158.2 初始化注解處理器2228.3 運行注解處理器226第9章 語義分析之類型轉換2339.1 類型轉換的種類2339.2 賦值轉換2459.3 方法調用轉換2539.4 強制類型轉換2549.5 數字提升2660章 語義分析之語法檢查26910.1 類型定義的檢查26910.1.1 父類及實現接口的檢查26910.1.2 類型定義的唯一性檢查27310.1.3 類型中方法的兼容性檢查27610.1.4 類型中實現方法的檢查28710.2 變量定義的檢查29410.3 方法定義的檢查29610.3.1 方法的唯一性檢查29610.3.2 方法的隱藏29810.3.3 方法的覆寫3031章 語義分析之引用消解30711.1 Resolve類介紹30711.2 類型引用的消解31011.3 變量引用的消解32011.4 方法引用的消解3232章 語義分析之語法樹標注34512.1 Attr類介紹34612.2 表達式相關樹節點的標注34812.2.1 JCUnary樹節點標注34812.2.2 JCBinary樹節點的標注35012.2.3 JCAssignOp樹節點的標注35112.3 JCIdent樹節點的標注35112.4 JCFieldAccess樹節點的標注3543章 泛型的實現36113.1 泛型類型36113.2 泛型方法36413.2.1 類型推斷36513.2.2 鑽石語法38313.3 泛型擦除3864章 數據流檢查39614.1 Flow類介紹39614.1.1 語句的活躍性分析39614.1.2 變量賦值檢查39814.1.3 異常檢查40514.2 if語句的分析40514.2.1 if語句40514.2.表達式與if語句40914.2.表達式與if語句41014.2.表達式與if語句41214.3 循環語句的分析41314.3.1 for語句41314.3.2 中斷循環語句41614.4 try語句與throw語句的分析41914.4.1 拋出異常41914.4.2 異常檢查42414.4.3 變量賦值狀態及語句的活躍性4305章 語法糖去除43515.1 簡單語法糖43615.1.1 變長參數43615.1.2 條件編譯43715.1.3 自動裝箱與拆箱43815.2 語句語法糖44015.2.1 foreach語句44015.2.2 switch語句44215.2.3 try-with-resources語句44715.3 枚舉類語法糖45215.4 內部類語法糖45315.4.1 調用私有構造方法45415.4.2 引用成員45715.4.3 super關鍵字引用父類成員47015.4.4 訪問自由變量4726章 字節碼指令生成48616.1 字節碼指令集48616.2 生成字節碼指令49216.2.1 實現本地變量表49216.2.2 實現操作數棧49516.2.3 常量池信息的存儲497
內容簡介
本書針對Java語言的編譯器源碼進行深度剖析,所以本書面向的讀者主要是那些想深入研究Java語言運行原理的人。另外本書還可以用作編譯原理的學習,通過強實踐來達到學習的目的,所以對於想學習編譯原理的人,如軟件專業的學生,也是一個很好的選擇。 本書共18章,5個附錄,涵蓋-Javac文件繫統、詞法分析、語法分析、符號表、語義分析、泛型、數據流、語法糖、字節碼、Class文件等大量內容。由於Java編譯器有10萬行以上的代碼,並且邏輯周密,細節眾多。為了能夠讓讀者更好的理解其中的要點,本書將會有大量的配圖和實例,並且要對重點源代碼展開細致的講解。