登入帳戶  | 訂單查詢  | 購物車/收銀台(0) | 在線留言板  | 付款方式  | 運費計算  | 聯絡我們  | 幫助中心 |  加入書簽
會員登入 新用戶登記
HOME新書上架暢銷書架好書推介特價區會員書架精選月讀2023年度TOP分類瀏覽雜誌 臺灣用戶
品種:超過100萬種各類書籍/音像和精品,正品正價,放心網購,悭钱省心 服務:香港台灣澳門海外 送貨:速遞郵局服務站

新書上架簡體書 繁體書
暢銷書架簡體書 繁體書
好書推介簡體書 繁體書

十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書
七月出版:大陸書 台灣書
六月出版:大陸書 台灣書
五月出版:大陸書 台灣書
四月出版:大陸書 台灣書
三月出版:大陸書 台灣書
二月出版:大陸書 台灣書
一月出版:大陸書 台灣書
12月出版:大陸書 台灣書
11月出版:大陸書 台灣書
十月出版:大陸書 台灣書
九月出版:大陸書 台灣書
八月出版:大陸書 台灣書

『簡體書』深入解析Java编译器:源码剖析与实例详解

書城自編碼: 3457650
分類:簡體書→大陸圖書→計算機/網絡程序設計
作者: 马智
國際書號(ISBN): 9787111643388
出版社: 机械工业出版社
出版日期: 2019-12-01

頁數/字數: /
書度/開本: 16开 釘裝: 平装

售價:HK$ 241.7

我要買

share:

** 我創建的書架 **
未登入.


新書推薦:
河流之齿
《 河流之齿 》

售價:HK$ 59.8
新经济史革命:计量学派与新制度学派
《 新经济史革命:计量学派与新制度学派 》

售價:HK$ 89.7
盗墓笔记之秦岭神树4
《 盗墓笔记之秦岭神树4 》

售價:HK$ 57.3
战胜人格障碍
《 战胜人格障碍 》

售價:HK$ 66.7
逃不开的科技创新战争
《 逃不开的科技创新战争 》

售價:HK$ 103.3
漫画三国一百年
《 漫画三国一百年 》

售價:HK$ 55.2
希腊文明3000年(古希腊的科学精神,成就了现代科学之源)
《 希腊文明3000年(古希腊的科学精神,成就了现代科学之源) 》

售價:HK$ 82.8
粤行丛录(岭南史料笔记丛刊)
《 粤行丛录(岭南史料笔记丛刊) 》

售價:HK$ 80.2

 

編輯推薦:
资深程序员深入剖析工业级编译器Javac的源码实现
全面讲解从Java源代码到生成Class文件的每个过程
对Java编译器各编译阶段的源代码实现进行了详细介绍
用大量图示和实例带领读者真正掌握Java编译器的具体实现
帮助读者深入理解Javac如何支持Java语言的诸多特性
让读者能真正理解如何将编译器的相关理论知识应用到开发实践中
《深入解析Java编译器:源码剖析与实例详解》核心内容:
Javac介绍
Javac文件系统
词法分析
语法分析之认识树节点
语法分析之建立抽象语法树
符号表的组织、填充符号表
插入式注解的实现
语义分析之类型转换
语义分析之语法检查
语义分析之引用消解
语义分析之语法树标注
泛型的实现资深程序员深入剖析工业级编译器Javac的源码实现
全面讲解从Java源代码到生成Class文件的每个过程
对Java编译器各编译阶段的源代码实现进行了详细介绍
用大量图示和实例带领读者真正掌握Java编译器的具体实现
帮助读者深入理解Javac如何支持Java语言的诸多特性
让读者能真正理解如何将编译器的相关理论知识应用到开
內容簡介:
本书针对Java语言的编译器源码进行深度剖析,所以本书面向的读者主要是那些想深入研究Java语言运行原理的人。另外本书还可以用作编译原理的学习,通过强实践来达到学习的目的,所以对于想学习编译原理的人,如软件专业的学生,也是一个很好的选择。
本书共18章,5个附录,涵盖-Javac文件系统、词法分析、语法分析、符号表、语义分析、泛型、数据流、语法糖、字节码、Class文件等大量内容。由于Java编译器有10万行以上的代码,并且逻辑周密,细节众多。为了能够让读者更好的理解其中的要点,本书将会有大量的配图和实例,并且要对重点源代码展开细致的讲解。
關於作者:
马智 毕业于天津工业大学。在校期间所修专业为软件工程。毕业后一直从事软件开发相关工作。先后在掌游天下、京东集团任软件研发工程师。对编程语言的底层实现有浓厚的兴趣,尤其对编译原理有较为全面和深入的研究。深入研究过openJDK的源代码实现,其中包括Javac编译器的源代码实现。
目錄
前言
第1章Javac介绍1
1.1初识Javac1
1.2Javac源码与调试4
1.3Javac命令7
第2章Javac文件系统12
2.1文件相关实现类12
2.2文件的管理25
2.2.1获取JavacFileManager对象25
2.2.2StandardLocation类28
2.2.3JavacFileManager类31
第3章词法分析38
3.1字符编码38
3.2获取字符输入流40
3.3Token与Name43
3.3.1Token介绍44
3.3.2Name对象的生成与存储47
3.3.3Name映射为Token51
3.4生成Token流52
第4章语法分析之认识树节点67
4.1定义及声明68
4.1.1JCCompilationUnit类68
4.1.2JCImport类69
4.1.3JCClassDecl类70
4.1.4JCModifiers类71
4.1.5JCTypeParameter类72
4.1.6JCVariableDecl类72
4.1.7JCMethodDecl类74
4.2语句75
4.2.1JCBlock类75
4.2.2JCIf类76
4.2.3JCWhileLoop、JCDoWhileLoop、JCForLoop与JCEnhancedForLoop类78
4.2.4JCSwitch与JCCase类79
4.2.5JCTry、JCCatch与JCThrow类81
4.2.6JCLabeledStatement、JCReturn、JCContinue与JCBreak类82
4.2.7JCSynchronized类83
4.2.8JCAssert类83
4.3表达式83
4.3.1基本表达式84
4.3.2含运算符的表达式88
4.3.3类型相关表达式94
4.3.4注解表达式97
4.4生成树节点98
第5章语法分析之建立抽象语法树101
5.1定义及声明的抽象语法树101
5.2语句的抽象语法树112
5.3表达式的抽象语法树121
5.3.1基本表达式122
5.3.2含有运算符的表达式134
5.4遍历抽象语法树140
第6章符号表的组织143
6.1符号的定义143
6.1.1Symbol类144
6.1.2TypeSymbol及其子类150
6.1.3VarSymbol类154
6.1.4MethodSymbol及OperatorSymbol类154
6.2符号表的组织160
6.2.1Env类介绍160
6.2.2AttrContext类介绍162
6.2.3Scope类介绍163
6.2.4符号表的建立164
6.3类型的定义169
6.3.1普通类型的定义169
6.3.2泛型相关类型的定义175
第7章填充符号表180
7.1依赖的处理180
7.1.1创建包或类符号180
7.1.2输入包或类下的成员符号184
7.2符号输入的第一阶段189
7.2.1Enter类190
7.2.2visitTopLevel方法192
7.2.3visitClassDef方法193
7.2.4visitTypeParameter方法196
7.3符号输入第二阶段197
7.3.1MemberEnter类197
7.3.2visitImport方法200
7.3.3visitMethodDef方法207
7.3.4visitVarDef方法209
第8章插入式注解的实现211
8.1注解处理器基础211
8.1.1编写注解处理器211
8.1.2注解配置215
8.1.3工具类215
8.2初始化注解处理器222
8.3运行注解处理器226
第9章语义分析之类型转换233
9.1类型转换的种类233
9.2赋值转换245
9.3方法调用转换253
9.4强制类型转换254
9.5数字提升266
第10章语义分析之语法检查269
10.1类型定义的检查269
10.1.1父类及实现接口的检查269
10.1.2类型定义的唯一性检查273
10.1.3类型中方法的兼容性检查276
10.1.4类型中实现方法的检查287
10.2变量定义的检查294
10.3方法定义的检查296
10.3.1方法的唯一性检查296
10.3.2方法的隐藏298
10.3.3方法的覆写303
第11章语义分析之引用消解307
11.1Resolve类介绍307
11.2类型引用的消解310
11.3变量引用的消解320
11.4方法引用的消解323
第12章语义分析之语法树标注345
12.1Attr类介绍346
12.2表达式相关树节点的标注348
12.2.1JCUnary树节点标注348
12.2.2JCBinary树节点的标注350
12.2.3JCAssignOp树节点的标注351
12.3JCIdent树节点的标注351
12.4JCFieldAccess树节点的标注354
第13章泛型的实现361
13.1泛型类型361
13.2泛型方法364
13.2.1类型推断365
13.2.2钻石语法383
13.3泛型擦除386
第14章数据流检查396
14.1Flow类介绍396
14.1.1语句的活跃性分析396
14.1.2变量赋值检查398
14.1.3异常检查405
14.2if语句的分析405
14.2.1if语句405
14.2.2一元表达式与if语句409
14.2.3二元表达式与if语句410
14.2.4三元表达式与if语句412
14.3循环语句的分析413
14.3.1for语句413
14.3.2中断循环语句416
14.4try语句与throw语句的分析419
14.4.1抛出异常419
14.4.2异常检查424
14.4.3变量赋值状态及语句的活跃性430
第15章语法糖去除435
15.1简单语法糖436
15.1.1变长参数436
15.1.2条件编译437
15.1.3自动装箱与拆箱438
15.2语句语法糖440
15.2.1foreach语句440
15.2.2switch语句442
15.2.3try-with-resources语句447
15.3枚举类语法糖452
15.4内部类语法糖453
15.4.1调用私有构造方法454
15.4.2引用成员457
15.4.3super关键字引用父类成员470
15.4.4访问自由变量472
第16章字节码指令生成486
16.1字节码指令集486
16.2生成字节码指令492
16.2.1实现本地变量表492
16.2.2实现操作数栈495
16.2.3常量池信息的存储497
內容試閱
为什么要写这本书?
Java是一门流行多年的高级编程语言,相关的就业岗位很多,但是最近几年却出现了用人单位招不到人,大量研发人员找不到工作的尴尬局面。究其根本原因还是岗位对技术的要求高,不但要会应用,更要懂其内部的运行原理。对于想要深入研究Java的从业者来说,目前国内市场上还没有一本剖析Java编译器(Javac)源码的书籍,也没有一本剖析工业级编译器源码的书籍,这正是本书要填补的市场空白。
本书围绕市面上的主流编译器Javac进行源代码剖析,详细介绍了词法分析、语法分析、语义分析及代码生成等各个阶段的具体实现。另外,本书有大量的配图和实例,以便读者能更好地理解书中的要点。
本书有何特色
1.内容丰富,讲解详细
本书对Java编译器的词法分析、语法分析、语义分析及代码生成等各个阶段的源代码实现做了详细介绍,可以帮助读者系统地掌握Java编译器的实现原理。
2.原理分析与实例并重
本书对Java编译器各个编译阶段的源代码实现都进行了重点介绍,同时也简单介绍了一些编译器的基本原理,并给出了大量的配图和实例,能让读者真正掌握Java编译器的具体实现。
3.分析工业级编译器的源码实现
本书分析的编译器Javac是一个工业级的编译器,它是大部分Java开发人员将Java源代码转换为Class文件的首选编译器。对于Java从业人员来说,本书可以让他们学习到Javac是如何支持Java语言的相关特性的,如泛型;而对于那些对编译器感兴趣的人来说,本书则可以让他们真正学习到如何将编译器的相关理论知识应用到开发实践中。
本书内容
本书深入剖析了Javac的源代码实现,每一章都会对重点的源代码实现进行解读。各章的内容简单介绍如下:
第1章介绍了Javac的目录结构及源代码调试,同时对Javac支持的编译命令的实现进行了简单介绍。
第2章介绍了Javac操作文件(如读取.java文件、读取JAR包)相关的类。
第3章介绍了Javac将读取到的Java源代码的字符流转换为Token流的过程。
第4章介绍了抽象语法树的每个树节点,这些树节点可以大概划分为定义及声明、语句与表达式。
第5章介绍了如何建立抽象语法树,即Javac根据Token流建立一个完整的抽象语法树。
第6章介绍了符号表的结构,同时也对Javac中使用的符号及类型做了详细介绍。
第7章进行符号表的填充,分两个阶段对抽象语法树进行扫描,然后向符号表中填充相关的符号。
第8章介绍了插入式注解的具体实现过程。
第9章介绍了Java的类型转换,重点介绍了赋值转换、方法调用转换、强制类型转换及数字提升这些上下文环境中的类型转换实现。
第10章介绍了语法检查,主要是对类型定义、变量定义及方法定义的合法性进行检查。
第11章介绍了引用消解,主要是查找表达式中所引用的唯一符号,Resolve类中提供了对类型引用、变量引用及方法引用的具体查找方法。
第12章对抽象语法树进行了类型与符号标注,重点介绍了一些重要树节点,如JCIdent和JCFieldAccess等的具体标注过程。
第13章介绍了泛型的实现。泛型类型或泛型方法等与泛型相关的特性完全由编译器来支持,而在后续生成Class文件的过程中需要对泛型进行擦除。
第14章介绍了数据流分析,分别从变量赋值、语句活跃性及异常这3个方面对if判断语句、循环语句及try语句等进行分析。
第15章介绍了语法糖去除,分别对简单的语法糖、语句语法糖、枚举类语法糖与内部类语法糖进行分析。
第16章介绍了字节码指令的生成,通过简单模拟Java虚拟机运行时的情况来更好地生成字节码指令。
第17章介绍了重要结构的字节码指令生成,对一些常见的控制结构,如if语句、循环语句、switch语句及try语句等指令的生成过程进行了详细介绍。
第18章介绍了Class文件的生成,根据Class文件规范生成可被Java虚拟机加载运行的文件。
附录A介绍了Javac支持的命令。
附录B介绍了Java语言涉及的文法。
附录C介绍了对类型的常见操作。
附录D介绍了对符号的常见操作。
附录E介绍了虚拟机字节码指令。
本书读者对象
阅读本书需要读者有一定的编程经验,最好是对Java语言有一定的了解。具体而言,本书主要适合以下读者阅读:
* 想深入学习Java语言特性的Java从业人员;
* 想通过实践学习编译器理论的人员,如高校相关专业的学生;
* 想借鉴编译器架构的人员;
* 对大型工程源代码感兴趣的人员。
本书阅读建议
本书每一章都和前后章形成了承前启后的关系,所以建议读者在阅读本书的过程中,严格按照章节的顺序进行阅读,同时也建议读者在阅读每一章的过程中对书中给出的实例进行实践,以便更好地理解本书所讲的内容。
Javac有10万行以上的源代码实现,并且代码的逻辑密度非常大。读者阅读相关源代码的实现时,建议不要过分纠结于每个实现细节,否则会陷入细节的“汪洋大海”中。本书对Javac的重点源代码进行了解读,读者可以参考书中对这些重点源代码的讲解进行阅读和调试即可。
本书配套资源获取方式
本书涉及的Javac源代码已经开源,可以通过多种途径获取。读者可以直接访问以下网址获取:
https:download.java.netopenjdkjdk7。
读者反馈
由于笔者水平所限,书中可能还存在一些疏漏,敬请读者指正,笔者会及时进行调整和修改。联系邮箱:hzbook2017@163.com。
致谢
在本书的写作过程中,得到了很多朋友及同事的帮助和支持,在此表示由衷的感谢!
感谢欧振旭编辑在本书出版过程中给予笔者的大力支持与帮助!
最后感谢我的家人在写作时给予我的理解与支持,在我遇到挫折和问题时,家人都坚定地支持着我。爱你们!
马智

 

 

書城介紹  | 合作申請 | 索要書目  | 新手入門 | 聯絡方式  | 幫助中心 | 找書說明  | 送貨方式 | 付款方式 香港用户  | 台灣用户 | 大陸用户 | 海外用户
megBook.com.hk
Copyright © 2013 - 2024 (香港)大書城有限公司  All Rights Reserved.