注冊(cè) | 登錄讀書好,好讀書,讀好書!
讀書網(wǎng)-DuShu.com
當(dāng)前位置: 首頁(yè)出版圖書科學(xué)技術(shù)計(jì)算機(jī)/網(wǎng)絡(luò)網(wǎng)絡(luò)與數(shù)據(jù)通信網(wǎng)絡(luò)服務(wù)深入解析Java編譯器:源碼剖析與實(shí)例詳解

深入解析Java編譯器:源碼剖析與實(shí)例詳解

深入解析Java編譯器:源碼剖析與實(shí)例詳解

定 價(jià):¥179.00

作 者: 馬智
出版社: 機(jī)械工業(yè)出版社
叢編項(xiàng):
標(biāo) 簽: 暫缺

ISBN: 9787111643388 出版時(shí)間: 2020-01-01 包裝:
開本: 16開 頁(yè)數(shù): 668 字?jǐn)?shù):  

內(nèi)容簡(jiǎn)介

  《深入解析Java編譯器:源碼剖析與實(shí)例詳解》以工業(yè)級(jí)編譯器Javac的源代碼為基礎(chǔ),詳細(xì)介紹了詞法分析、語(yǔ)法分析、語(yǔ)義分析及代碼生成 等各個(gè)階段的具體實(shí)現(xiàn),同時(shí)對(duì)重點(diǎn)源代碼的實(shí)現(xiàn)進(jìn)行了詳細(xì)解讀,讓讀者能真正掌握從Java源代碼變?yōu)镃lass文件的每個(gè)過程。 《深入解析Java編譯器:源碼剖析與實(shí)例詳解》共18章,章節(jié)的前后順序與Javac編譯Java源代碼的順序嚴(yán)格對(duì)應(yīng),涵蓋的主要內(nèi)容有Javac介紹、Javac文件系統(tǒng)、詞法分析、語(yǔ)法分析之認(rèn)識(shí)樹節(jié)點(diǎn)、語(yǔ)法分析之建立抽象語(yǔ)法樹、符號(hào)表的組織、填充符號(hào)表、插入式注解的實(shí)現(xiàn)、語(yǔ)義分析之類型轉(zhuǎn)換、語(yǔ)義分析之語(yǔ)法檢查、語(yǔ)義分析之引用消解、語(yǔ)義分析之語(yǔ)法樹標(biāo)注、泛型的實(shí)現(xiàn)、數(shù)據(jù)流檢查、語(yǔ)法糖去除、字節(jié)碼指令生成、重要結(jié)構(gòu)的字節(jié)碼指令生成、生成Class文件。同時(shí),為了讀者能更好地查閱相關(guān)信息,《深入解析Java編譯器:源碼剖析與實(shí)例詳解》在附錄中給出了Javac命令、文法、類型常見操作、符號(hào)常見操作和虛擬機(jī)字節(jié)碼指令表的相關(guān)內(nèi)容。 《深入解析Java編譯器:源碼剖析與實(shí)例詳解》語(yǔ)言簡(jiǎn)潔,實(shí)例豐富,適合Java從業(yè)人員閱讀,可以幫助他們深入理解Javac如何支持Java語(yǔ)言的諸多特性,如泛型等;也適合對(duì)編譯器感興趣的讀者閱讀,可以幫助他們真正掌握如何將編譯器相關(guān)的理論知識(shí)應(yīng)用到開發(fā)實(shí)踐中。

作者簡(jiǎn)介

  馬智畢業(yè)于天津工業(yè)大學(xué)。在校期間所修專業(yè)為軟件工程。畢業(yè)后一直從事軟件開發(fā)相關(guān)工作。先后在掌游天下、京東集團(tuán)任軟件研發(fā)工程師。對(duì)編程語(yǔ)言的底層實(shí)現(xiàn)有濃厚的興趣,尤其對(duì)編譯原理有較為全面和深入的研究。深入研究過openJDK的源代碼實(shí)現(xiàn),其中包括Javac編譯器的源代碼實(shí)現(xiàn)。

圖書目錄

前言
第1章 Javac介紹1
1.1 初識(shí)Javac1
1.2 Javac源碼與調(diào)試4
1.3 Javac命令7
第2章 Javac文件系統(tǒng)12
2.1 文件相關(guān)實(shí)現(xiàn)類12
2.2 文件的管理25
2.2.1 獲取JavacFileManager對(duì)象25
2.2.2 StandardLocation類28
2.2.3 JavacFileManager類31
第3章 詞法分析38
3.1 字符編碼38
3.2 獲取字符輸入流40
3.3 Token與Name43
3.3.1 Token介紹44
3.3.2 Name對(duì)象的生成與存儲(chǔ)47
3.3.3 Name映射為Token51
3.4 生成Token流52
第4章 語(yǔ)法分析之認(rèn)識(shí)樹節(jié)點(diǎn)67
4.1 定義及聲明68
4.1.1 JCCompilationUnit類68
4.1.2 JCImport類69
4.1.3 JCClassDecl類70
4.1.4 JCModifiers類71
4.1.5 JCTypeParameter類72
4.1.6 JCVariableDecl類72
4.1.7 JCMethodDecl類74
4.2 語(yǔ)句75
4.2.1 JCBlock類75
4.2.2 JCIf類76
4.2.3 JCWhileLoop、JCDoWhileLoop、JCForLoop與JCEnhancedForLoop類78
4.2.4 JCSwitch與JCCase類79
4.2.5 JCTry、JCCatch與JCThrow類81
4.2.6 JCLabeledStatement、JCReturn、JCContinue與JCBreak類82
4.2.7 JCSynchronized類83
4.2.8 JCAssert類83
4.3 表達(dá)式83
4.3.1 基本表達(dá)式84
4.3.2 含運(yùn)算符的表達(dá)式88
4.3.3 類型相關(guān)表達(dá)式94
4.3.4 注解表達(dá)式97
4.4 生成樹節(jié)點(diǎn)98
第5章 語(yǔ)法分析之建立抽象語(yǔ)法樹101
5.1 定義及聲明的抽象語(yǔ)法樹101
5.2 語(yǔ)句的抽象語(yǔ)法樹112
5.3 表達(dá)式的抽象語(yǔ)法樹121
5.3.1 基本表達(dá)式122
5.3.2 含有運(yùn)算符的表達(dá)式134
5.4 遍歷抽象語(yǔ)法樹140
第6章 符號(hào)表的組織143
6.1 符號(hào)的定義143
6.1.1 Symbol類144
6.1.2 TypeSymbol及其子類150
6.1.3 VarSymbol類154
6.1.4 MethodSymbol及OperatorSymbol類154
6.2 符號(hào)表的組織160
6.2.1 Env類介紹160
6.2.2 AttrContext類介紹162
6.2.3 Scope類介紹163
6.2.4 符號(hào)表的建立164
6.3 類型的定義169
6.3.1 普通類型的定義169
6.3.2 泛型相關(guān)類型的定義175
第7章 填充符號(hào)表180
7.1 依賴的處理180
7.1.1 創(chuàng)建包或類符號(hào)180
7.1.2 輸入包或類下的成員符號(hào)184
7.2 符號(hào)輸入的階段189
7.2.1 Enter類190
7.2.2 visitTopLevel()方法192
7.2.3 visitClassDef()方法193
7.2.4 visitTypeParameter()方法196
7.3 符號(hào)輸入第二階段197
7.3.1 MemberEnter類197
7.3.2 visitImport()方法200
7.3.3 visitMethodDef()方法207
7.3.4 visitVarDef()方法209
第8章 插入式注解的實(shí)現(xiàn)211
8.1 注解處理器基礎(chǔ)211
8.1.1 編寫注解處理器211
8.1.2 注解配置215
8.1.3 工具類215
8.2 初始化注解處理器222
8.3 運(yùn)行注解處理器226
第9章 語(yǔ)義分析之類型轉(zhuǎn)換233
9.1 類型轉(zhuǎn)換的種類233
9.2 賦值轉(zhuǎn)換245
9.3 方法調(diào)用轉(zhuǎn)換253
9.4 強(qiáng)制類型轉(zhuǎn)換254
9.5 數(shù)字提升266
第10章 語(yǔ)義分析之語(yǔ)法檢查269
10.1 類型定義的檢查269
10.1.1 父類及實(shí)現(xiàn)接口的檢查269
10.1.2 類型定義的性檢查273
10.1.3 類型中方法的兼容性檢查276
10.1.4 類型中實(shí)現(xiàn)方法的檢查287
10.2 變量定義的檢查294
10.3 方法定義的檢查296
10.3.1 方法的性檢查296
10.3.2 方法的隱藏298
10.3.3 方法的覆寫303
第11章 語(yǔ)義分析之引用消解307
11.1 Resolve類介紹307
11.2 類型引用的消解310
11.3 變量引用的消解320
11.4 方法引用的消解323
第12章 語(yǔ)義分析之語(yǔ)法樹標(biāo)注345
12.1 Attr類介紹346
12.2 表達(dá)式相關(guān)樹節(jié)點(diǎn)的標(biāo)注348
12.2.1 JCUnary樹節(jié)點(diǎn)標(biāo)注348
12.2.2 JCBinary樹節(jié)點(diǎn)的標(biāo)注350
12.2.3 JCAssignOp樹節(jié)點(diǎn)的標(biāo)注351
12.3 JCIdent樹節(jié)點(diǎn)的標(biāo)注351
12.4 JCFieldAccess樹節(jié)點(diǎn)的標(biāo)注354
第13章 泛型的實(shí)現(xiàn)361
13.1 泛型類型361
13.2 泛型方法364
13.2.1 類型推斷365
13.2.2 鉆石語(yǔ)法383
13.3 泛型擦除386
第14章 數(shù)據(jù)流檢查396
14.1 Flow類介紹396
14.1.1 語(yǔ)句的活躍性分析396
14.1.2 變量賦值檢查398
14.1.3 異常檢查405
14.2 if語(yǔ)句的分析405
14.2.1 if語(yǔ)句405
14.2.2 一元表達(dá)式與if語(yǔ)句409
14.2.3 二元表達(dá)式與if語(yǔ)句410
14.2.4 三元表達(dá)式與if語(yǔ)句412
14.3 循環(huán)語(yǔ)句的分析413
14.3.1 for語(yǔ)句413
14.3.2 中斷循環(huán)語(yǔ)句416
14.4 try語(yǔ)句與throw語(yǔ)句的分析419
14.4.1 拋出異常419
14.4.2 異常檢查424
14.4.3 變量賦值狀態(tài)及語(yǔ)句的活躍性430
第15章 語(yǔ)法糖去除435
15.1 簡(jiǎn)單語(yǔ)法糖436
15.1.1 變長(zhǎng)參數(shù)436
15.1.2 條件編譯437
15.1.3 自動(dòng)裝箱與拆箱438
15.2 語(yǔ)句語(yǔ)法糖440
15.2.1 foreach語(yǔ)句440
15.2.2 switch語(yǔ)句442
15.2.3 try-with-resources語(yǔ)句447
15.3 枚舉類語(yǔ)法糖452
15.4 內(nèi)部類語(yǔ)法糖453
15.4.1 調(diào)用私有構(gòu)造方法454
15.4.2 引用成員457
15.4.3 super關(guān)鍵字引用父類成員470
15.4.4 訪問自由變量472
第16章 字節(jié)碼指令生成486
16.1 字節(jié)碼指令集486
16.2 生成字節(jié)碼指令492
16.2.1 實(shí)現(xiàn)本地變量表492
16.2.2 實(shí)現(xiàn)操作數(shù)棧495
16.2.3 常量池信息的存儲(chǔ)497 16.2.4  Code類介紹 499 16.3  Gen類介紹 502 16.4  可尋址實(shí)體Item 506 16.4.1  LocalItem類 508 16.4.2  ImmediateItem類 512 16.4.3  StackItem類 514 16.4.4  AssignItem類 515 16.4.5  StaticItem類 517 16.4.6  MemberItem類 520 16.4.7  SelfItem類 523 16.4.8  IndexedItem類 524 第17章  重要結(jié)構(gòu)的字節(jié)碼指令生成 527 17.1  控制轉(zhuǎn)移指令與地址回填 527 17.1.1  認(rèn)識(shí)控制轉(zhuǎn)移指令 527 17.1.2  地址回填 529 17.2  語(yǔ)句的條件判斷表達(dá)式 530 17.2.1  CondItem類 530 17.2.2  一元與二元條件判斷表達(dá)式 533 17.2.3  三元條件判斷表達(dá)式 534 17.3  if語(yǔ)句 536 17.4  循環(huán)語(yǔ)句 537 17.5  switch語(yǔ)句 539 17.6  異常與finally語(yǔ)句 545 17.6.1  異常的拋出 545 17.6.2  異常的捕獲與finally語(yǔ)句 545 第18章  生成Class文件 553 18.1  Class文件的結(jié)構(gòu) 553 18.2  魔數(shù)與版本 556 18.3  常量池 556 18.4  類定義的基本信息 562 18.4.1  訪問標(biāo)識(shí)符 562 18.4.2  類、父類及接口集合 564 18.5  字段集合 565 18.6  方法集合 570 18.7  類屬性集合 575 18.8  描述符和簽名 581 18.8.1  描述符 581 18.8.2  簽名 582 18.8.3  描述符與簽名的實(shí)現(xiàn) 585 附錄A  Javac命令 589 附錄B  文法 592 附錄C  類型常見操作 600 C.1  supertype()方法 600 C.2  interfaces()方法 604 C.3  asSuper()方法 606 C.4  asOuterSuper()方法 608 C.5  isSameType()方法 609 C.6  L()與U()方法 615 C.7  lowerBound()與upperBound()方法 616 C.8  containsType()方法 617 C.9  hasSameArgs()方法 621 C.10  subst()方法 623 C.11  memberType()方法 626 C.12  erasure()與erasureRecursive()方法 628 附錄D  符號(hào)常見操作 632 D.1  isInheritedIn()方法 632 D.2  hiddenIn()方法 633 D.3  isMemberOf()方法 634 D.4  overrides()方法 635 D.5  implementation()方法 639 附錄E  虛擬機(jī)字節(jié)碼指令表 645 E.1  加載與存儲(chǔ)指令 645 E.2  運(yùn)算指令 648 E.3  類型轉(zhuǎn)換指令 650 E.4  對(duì)象操作指令 651 E.5  操作數(shù)棧管理指令 652 E.6  控制轉(zhuǎn)移指令 652 E.7  方法調(diào)用和返回指令 653 E.8  異常拋出指令 654 E.9  同步指令 654

本目錄推薦

掃描二維碼
Copyright ? 讀書網(wǎng) www.autoforsalebyowners.com 2005-2020, All Rights Reserved.
鄂ICP備15019699號(hào) 鄂公網(wǎng)安備 42010302001612號(hào)