万本电子书0元读

万本电子书0元读

顶部广告

深入解析Java编译器:源码剖析与实例详解电子书

售       价:¥

纸质售价:¥123.50购买纸书

65人正在读 | 0人评论 7

作       者:马智

出  版  社:机械工业出版社

出版时间:2020-01-01

字       数:71.0万

所属分类: 科技 > 计算机/网络 > 程序设计

温馨提示:此类商品不支持退换货,不支持下载打印

为你推荐

  • 读书简介
  • 目录
  • 累计评论(0条)
  • 读书简介
  • 目录
  • 累计评论(0条)
本书针对Java语言的编译器源码行深度剖析,所以本书面向的读者主要是那些想深研究Java语言运行原理的人。另外本书还可以用作编译原理的学习,通过强实践来达到学习的目的,所以对于想学习编译原理的人,如软件专业的学生,也是一个很好的选择。 本书共18章,5个附录,涵盖-Javac文件系统、词法分析、语法分析、符号表、语义分析、泛型、数据流、语法糖、字节码、Class文件等大量内容。由于Java编译器有10万行以上的代码,并且逻辑周密,细节众多。为了能够让读者更好的理解其中的要,本书将会有大量的配图和实例,并且要对重源代码展细致的讲解。 《深解析Java编译器:源码剖析与实例详解》以工业级编译器Javac的源代码为基础,详细介绍了词法分析、语法分析、语义分析及代码生成 等各个阶段的具体实现,同时对重源代码的实现行了详细解读,让读者能真正掌握从Java源代码变为Class文件的每个过程。 《深解析Java编译器:源码剖析与实例详解》共18章,章节的前后顺序与Javac编译Java源代码的顺序严格对应,涵盖的主要内容有Javac介绍、Javac文件系统、词法分析、语法分析之认识树节、语法分析之建立抽象语法树、符号表的组织、填充符号表、插式注解的实现、语义分析之类型转换、语义分析之语法检查、语义分析之引用消解、语义分析之语法树标注、泛型的实现、数据流检查、语法糖去除、字节码指令生成、重要结构的字节码指令生成、生成Class文件。同时,为了读者能更好地查阅相关信息,《深解析Java编译器:源码剖析与实例详解》在附录中给出了Javac命令、文法、类型常见操作、符号常见操作和虚拟机字节码指令表的相关内容。 《深解析Java编译器:源码剖析与实例详解》语言简洁,实例丰富,适合Java从业人员阅读,可以帮助他们深理解Javac如何支持Java语言的诸多特性,如泛型等;也适合对编译器感兴趣的读者阅读,可以帮助他们真正掌握如何将编译器相关的理论知识应用到发实践中。
【推荐语】
资深程序员深剖析工业级编译器Javac的源码实现 全面讲解从Java源代码到生成Class文件的每个过程 对Java编译器各编译阶段的源代码实现行了详细介绍 用大量图示和实例带领读者真正掌握Java编译器的具体实现 帮助读者深理解Javac如何支持Java语言的诸多特性 让读者能真正理解如何将编译器的相关理论知识应用到发实践中 《深解析Java编译器:源码剖析与实例详解》核心内容: Javac介绍 Javac文件系统 词法分析 语法分析之认识树节 语法分析之建立抽象语法树 符号表的组织、填充符号表 插式注解的实现 语义分析之类型转换 语义分析之语法检查 语义分析之引用消解 语义分析之语法树标注 泛型的实现 数据流检查 语法糖去除 字节码指令生成 重要结构的字节码指令生成 生成Class文件 Javac命令 文法 类型常见操作 符号常见操作 虚拟机字节码指令表
【作者】
马智  毕业于天津工业大学。在校期间所修专业为软件工程。毕业后一直从事软件发相关工作。先后在掌游天下、京东集团任软件研发工程师。对编程语言的底层实现有浓厚的兴趣,尤其对编译原理有较为全面和深的研究。深研究过openJDK的源代码实现,其中包括Javac编译器的源代码实现。
目录展开

前言

第1章 Javac介绍

1.1 初识Javac

1.2 Javac源码与调试

1.3 Javac命令

第2章 Javac文件系统

2.1 文件相关实现类

2.2 文件的管理

2.2.1 获取JavacFileManager对象

2.2.2 StandardLocation类

2.2.3 JavacFileManager类

第3章 词法分析

3.1 字符编码

3.2 获取字符输入流

3.3 Token与Name

3.3.1 Token介绍

3.3.2 Name对象的生成与存储

3.3.3 Name映射为Token

3.4 生成Token流

第4章 语法分析之认识树节点

4.1 定义及声明

4.1.1 JCCompilationUnit类

4.1.2 JCImport类

4.1.3 JCClassDecl类

4.1.4 JCModifiers类

4.1.5 JCTypeParameter类

4.1.6 JCVariableDecl类

4.1.7 JCMethodDecl类

4.2 语句

4.2.1 JCBlock类

4.2.2 JCIf类

4.2.3 JCWhileLoop、JCDoWhileLoop、JCForLoop与JCEnhncedForLoop类

4.2.4 JCSwitch与JCCase类

4.2.5 JCTry、JCCatch与JCThrow类

4.2.6 JCLabeledStatement、JCReturn、JCContinue与JCBreak类

4.2.7 JCSynchronized类

4.2.8 JCAssert类

4.3 表达式

4.3.1 基本表达式

4.3.2 含运算符的表达式

4.3.3 类型相关表达式

4.3.4 注解表达式

4.4 生成树节点

第5章 语法分析之建立抽象语法树

5.1 定义及声明的抽象语法树

5.2 语句的抽象语法树

5.3 表达式的抽象语法树

5.3.1 基本表达式

5.3.2 含有运算符的表达式

5.4 遍历抽象语法树

第6章 符号表的组织

6.1 符号的定义

6.1.1 Symbol类

6.1.2 TypeSymbol及其子类

6.1.3 VarSymbol类

6.1.4 MethodSymbol及OperatorSymbol类

6.2 符号表的组织

6.2.1 Env类介绍

6.2.2 AttrContext类介绍

6.2.3 Scope类介绍

6.2.4 符号表的建立

6.3 类型的定义

6.3.1 普通类型的定义

6.3.2 泛型相关类型的定义

第7章 填充符号表

7.1 依赖的处理

7.1.1 创建包或类符号

7.1.2 输入包或类下的成员符号

7.2 符号输入的第一阶段

7.2.1 Enter类

7.2.2 visitTopLevel()方法

7.2.3 visitClassDef()方法

7.2.4 visitTypeParameter()方法

7.3 符号输入第二阶段

7.3.1 MemberEnter类

7.3.2 visitImport()方法

7.3.3 visitMethodDef()方法

7.3.4 visitVarDef()方法

第8章 插入式注解的实现

8.1 注解处理器基础

8.1.1 编写注解处理器

8.1.2 注解配置

8.1.3 工具类

8.2 初始化注解处理器

8.3 运行注解处理器

第9章 语义分析之类型转换

9.1 类型转换的种类

9.2 赋值转换

9.3 方法调用转换

9.4 强制类型转换

9.5 数字提升

第10章 语义分析之语法检查

10.1 类型定义的检查

10.1.1 父类及实现接口的检查

10.1.2 类型定义的唯一性检查

10.1.3 类型中方法的兼容性检查

10.1.4 类型中实现方法的检查

10.2 变量定义的检查

10.3 方法定义的检查

10.3.1 方法的唯一性检查

10.3.2 方法的隐藏

10.3.3 方法的覆写

第11章 语义分析之引用消解

11.1 Resolve类介绍

11.2 类型引用的消解

11.3 变量引用的消解

11.4 方法引用的消解

第12章 语义分析之语法树标注

12.1 Attr类介绍

12.2 表达式相关树节点的标注

12.2.1 JCUnary树节点标注

12.2.2 JCBinary树节点的标注

12.2.3 JCAssignOp树节点的标注

12.3 JCIdent树节点的标注

12.4 JCFieldAccess树节点的标注

第13章 泛型的实现

13.1 泛型类型

13.2 泛型方法

13.2.1 类型推断

13.2.2 钻石语法

13.3 泛型擦除

第14章 数据流检查

14.1 Flow类介绍

14.1.1 语句的活跃性分析

14.1.2 变量赋值检查

14.1.3 异常检查

14.2 if语句的分析

14.2.1 if语句

14.2.2 一元表达式与if语句

14.2.3 二元表达式与if语句

14.2.4 三元表达式与if语句

14.3 循环语句的分析

14.3.1 for语句

14.3.2 中断循环语句

14.4 try语句与throw语句的分析

14.4.1 抛出异常

14.4.2 异常检查

14.4.3 变量赋值状态及语句的活跃性

第15章 语法糖去除

15.1 简单语法糖

15.1.1 变长参数

15.1.2 条件编译

15.1.3 自动装箱与拆箱

15.2 语句语法糖

15.2.1 foreach语句

15.2.2 switch语句

15.2.3 try-with-resources语句

15.3 枚举类语法糖

15.4 内部类语法糖

15.4.1 调用私有构造方法

15.4.2 引用成员

15.4.3 super关键字引用父类成员

15.4.4 访问自由变量

第16章 字节码指令生成

16.1 字节码指令集

16.2 生成字节码指令

16.2.1 实现本地变量表

16.2.2 实现操作数栈

16.2.3 常量池信息的存储

16.2.4 Code类介绍

16.3 Gen类介绍

16.4 可寻址实体Item

16.4.1 LocalItem类

16.4.2 ImmediateItem类

16.4.3 StackItem类

16.4.4 AssignItem类

16.4.5 StaticItem类

16.4.6 MemberItem类

16.4.7 SelfItem类

16.4.8 IndexedItem类

第17章 重要结构的字节码指令生成

17.1 控制转移指令与地址回填

17.1.1 认识控制转移指令

17.1.2 地址回填

17.2 语句的条件判断表达式

17.2.1 CondItem类

17.2.2 一元与二元条件判断表达式

17.2.3 三元条件判断表达式

17.3 if语句

17.4 循环语句

17.5 switch语句

17.6 异常与finally语句

17.6.1 异常的抛出

17.6.2 异常的捕获与finally语句

第18章 生成Class文件

18.1 Class文件的结构

18.2 魔数与版本

18.3 常量池

18.4 类定义的基本信息

18.4.1 访问标识符

18.4.2 类、父类及接口集合

18.5 字段集合

18.6 方法集合

18.7 类属性集合

18.8 描述符和签名

18.8.1 描述符

18.8.2 签名

18.8.3 描述符与签名的实现

附录A Javac命令

附录B 文法

附录C 类型常见操作

C.1 supertype()方法

C.2 interfaces()方法

C.3 asSuper()方法

C.4 asOuterSuper()方法

C.5 isSameType()方法

C.6 L()与U()方法

C.7 lowerBound()与upperBound()方法

C.8 containsType()方法

C.9 hasSameArgs()方法

C.10 subst()方法

C.11 memberType()方法

C.12 erasure()与erasureRecursive()方法

附录D 符号常见操作

D.1 isInheritedIn()方法

D.2 hiddenIn()方法

D.3 isMemberOf()方法

D.4 overrides()方法

D.5 implementation()方法

附录E 虚拟机字节码指令表

E.1 加载与存储指令

E.2 运算指令

E.3 类型转换指令

E.4 对象操作指令

E.5 操作数栈管理指令

E.6 控制转移指令

E.7 方法调用和返回指令

E.8 异常抛出指令

E.9 同步指令

累计评论(0条) 0个书友正在讨论这本书 发表评论

发表评论

发表评论,分享你的想法吧!

买过这本书的人还买过

读了这本书的人还在读

回顶部