• 自制编译器
21年品牌 40万+商家 超1.5亿件商品

自制编译器

全新正版 极速发货

61.13 6.2折 99 全新

库存20件

广东广州
认证卖家担保交易快速发货售后保障

作者[日]青木峰郎

出版社人民邮电出版社

ISBN9787115422187

出版时间2016-06

装帧其他

开本其他

定价99元

货号1201310041

上书时间2024-07-02

徐小智的书店

已实名 已认证 进店 收藏店铺

   商品详情   

品相描述:全新
商品描述
作者简介
青木峰郎(作者)
程序员,著有《Ruby程序设计268技(第2版)》《Ruby源代码接近解说》《Linux程序设计》等多部编程相关著作,并积极参与标准库维护、文档维护等各种各样的活动。

严圣逸(译者)
毕业于上海交通大学。8年软件开发经验,期间赴日本工作。现就职于想能信息科技(上海)有限公司,从事基于云平台的客户关系管理及各类营销自动化系统的开发工作。译有《高效团队开发:工具与方法》。

绝云(译者)
毕业于清华大学软件学院。曾在日本创意公司KAYAC从事即时通信软件及社交游戏的开发工作,现任蚂蚁金服前端架构专家。译有《写给大家看的算法书》等图书,曾参与《像外行一样思考,像专家一样实践(修订版)》的审校。

目录
目录


开始制作编译器  1
1.1  本书的概要  2
本书的主题  2
本书制作的编译器  2
编译示例  2
可执行文件  3
编译  4
程序运行环境  6
1.2  编译过程  8
编译的4个阶段  8
语法分析  8
语义分析  9
生成中间代码  9
代码生成  10
优化  10
总结  10
1.3  使用C?编译器进行编译  11
C?编译器的必要环境  11
安装C?编译器  11
C?的Hello,  World!  12
第2章
C?和cbc  13
2.1  C?语言的概要  14
C?的Hello,  World!  14
C?中删减的功能  14
import关键字  15
导入文件的规范  16
2.2  C?编译器cbc的构成  17
cbc的代码树  17
cbc的包  18
compiler包中的类群  18
main函数的实现  19
commandMain函数的实现  19
Java5泛型  20
build函数的实现  20
Java  5的foreach语句  21
compile函数的实现  21
部分  代码分析
第3章
语法分析的概要  24
3.1  语法分析的方法  25
代码分析中的问题点  25
代码分析的一般规律  25
词法分析、语法分析、语义分析  25
扫描器的动作  26
单词的种类和语义值  27
token  28
抽象语法树和节点  29
3.2  解析器生成器  30
什么是解析器生成器  30
解析器生成器的种类  30
解析器生成器的选择  31
3.3  JavaCC的概要  33
什么是JavaCC  33
语法描述文件  33
语法描述文件的例子  34
运行JavaCC  35
启动JavaCC所生成的解析器  36
中文的处理  37
第4章
词法分析  39
4.1  基于JavaCC的扫描器的描述  40
本章的目的  40
JavaCC的正则表达式  40
固定字符串  41
连接  41
字符组  41
排除型字符组  41
重复1次或多次  42
重复0次或多次  42
重复n次到m次  42
正好重复n次  43
可以省略  43
选择  43
4.2  扫描没有结构的单词  44
TOKEN命令  44
扫描标识符和保留字  44
选择匹配规则  45
扫描数值  46
4.3  扫描不生成token的单词  48
SKIP命令和SPECIAL_TOKEN命令  48
跳过空白符  48
跳过行注释  49
4.4  扫描具有结构的单词  50
最长匹配原则和它的问题  50
基于状态迁移的扫描  50
MORE命令  51
跳过块注释  52
扫描字符串字面量  53
扫描字符字面量  53
第5章
基于JavaCC的解析器的描述  55
5.1  基于EBNF语法的描述  56
本章的目的  56
基于JavaCC的语法描述  56
终端符和非终端符  57
JavaCC的EBNF表示法  58
连接  58
重复0次或多次  59
重复1次或多次  59
选择  60
可以省略  60
5.2  语法的二义性和token的超前扫描  61
语法的二义性  61
JavaCC的局限性  62
提取左侧共通部分  63
token的超前扫描  63
可以省略的规则和冲突  64
重复和冲突  65
更灵活的超前扫描  66
超前扫描的相关注意事项  66
第6章
语法分析  68
6.1  定义的分析  69
表示程序整体的符号  69
语法的单位  69
import声明的语法  70
各类定义的语法  71
变量定义的语法  72
函数定义的语法  73
结构体定义和联合体定义的语法  74
结构体成员和联合体成员的语法  75
typedef语句的语法  76
类型的语法  76
C语言和C?在变量定义上的区别  77
基本类型的语法  77
6.2  语句的分析  79
语句的语法  79
if语句的语法  80
省略if语句和大括号  80
while语句的语法  81
for语句的语法  81
各类跳转语句的语法  82
6.3  表达式的分析  83
表达式的整体结构  83
expr的规则  83
条件表达式  84
二元运算符  85
6.4  项的分析  88
项的规则  88
前置运算符的规则  88
后置运算符的规则  89
字面量的规则  89
第2部分  抽象语法树和中间代码
第7章
JavaCC的action和抽象语法树  92
7.1  JavaCC的action  93
本章的目的  93
简单的action  93
执行action的时间点  93
返回语义值的action  95
获取终端符号的语义值  95
Token类的属性  96
获取非终端符号的语义值  98
语法树的结构  99
选择和action  99
重复和action  100
本节总结  102
7.2  抽象语法树和节点  103
Node类群  103
Node类的定义  105
抽象语法树的表示  105
基于节点表示表达式的例子  107
第8章
抽象语法树的生成  110
8.1  表达式的抽象语法树  111
字面量的抽象语法树  111
类型的表示  112
为什么需要TypeRef类  113
一元运算的抽象语法树  114
二元运算的抽象语法树  116
条件表达式的抽象语法树  117
赋值表达式的抽象语法树  118
8.2  语句的抽象语法树  121
if语句的抽象语法树  121
while语句的抽象语法树  122
程序块的抽象语法树  123
8.3  声明的抽象语法树  125
变量声明列表的抽象语法树  125
函数定义的抽象语法树  126
表示声明列表的抽象语法树  127
表示程序整体的抽象语法树  128
外部符号的import  128
总结  129
8.4  cbc 的解析器的启动  132
Parser对象的生成  132
文件的解析  133
解析器的启动  134
第9章
语义分析(1)引用的消解  135
9.1  语义分析的概要  136
本章目的  136
抽象语法树的遍历  137
不使用Visitor模式的抽象语法树的处理  137
基于Visitor模式的抽象语法树的处理  138
Vistor模式的一般化  140
cbc中Visitor模式的实现  141
语义分析相关的cbc的类  142
9.2  变量引用的消解  144
问题概要  144
实现的概要  144
Scope树的结构  145
LocalResolver类的属性  146
LocalResolver类的启动  146
变量定义的添加  147
函数定义的处理  148
pushScope方法  149
currentScope方法  149
popScope方法  150
添加临时作用域  150
建立VariableNode和变量定义的关联  151
从作用域树取得变量定义  151
9.3  类型名称的消解  153
问题概要  153
实现的概要  153
TypeResolver类的属性  153
TypeResolver类的启动  154
类型的声明  154
类型和抽象语法树的遍历  155
变量定义的类型消解  156
函数定义的类型消解  157
0章
语义分析(2)静态类型检查  159
10.1  类型定义的检查  160
问题概要  160
实现的概要  161
检测有向图中的闭环的算法  162
结构体、联合体的循环定义检查  163
10.2  表达式的有效性检查  165
问题概要  165
实现的概要  165
DereferenceChecker类的启动  166
SemanticError异常的捕获  167
非指针类型取值操作的检查  167
获取非左值表达式地址的检查  168
隐式的指针生成  169
10.3  静态类型检查  170
问题概要  170
实现的概要  170
C?中操作数的类型  171
隐式类型转换  172
TyperChecker类的启动  173
二元运算符的类型检查  174
隐式类型转换的实现  175
1章
中间代码的转换  178
11.1  cbc的中间代码  179
组成中间代码的类  180
中间代码节点类的属性  181
中间代码的运算符和类型  182
各类中间代码  183
中间代码的意义  184
11.2  IRGenerator类的概要  185
抽象语法树的遍历和返回值  185
IRGenerator类的启动  185
函数本体的转换  186
作为语句的表达式的判别  187
11.3  流程控制语句的转换  189
if语句的转换(1)概要  189
if语句的转换(2)没有else部分的情况  190
if语句的转换(3)存在else部分的情况  191
while语句的转换  191
break语句的转换(1)问题的定义  192
break语句的转换(2)实现的方针  193
break语句的转换(3)实现  194
11.4  没有副作用的表达式的转换  196
UnaryOpNode对象的转换  196
BinaryOpNode对象的转换  197
指针加减运算的转换  198
11.5  左值的转换  200
左边和右边  200
左值和右值  200
cbc中左值的表现  201
结构体成员的偏移  202
成员引用(expr.memb)的转换  203
左值转换的例外:数组和函数  204
成员引用的表达式(ptr->memb)的转换  205
11.6  存在副作用的表达式的转换  206
表达式的副作用  206
有副作用的表达式的转换方针  206
简单赋值表达式的转换(1)语句  207
临时变量的引入  208
简单赋值表达式的转换(2)表达式  209
后置自增的转换  210
第3部分  汇编代码
2章
x86架构的概要  214
12.1  计算机的系统结构  215
CPU和存储器  215
寄存器  215
地址  216
物理地址和虚拟地址  216
各类设备  217
缓存  218
12.2  x86系列CPU的历史  220
x86系列CPU  220
32位CPU  220
指令集  221
IA-32的变迁  222
IA-32的64位扩展——AMD64  222
12.3  IA-32的概要  224
IA-32的寄存器  224
通用寄存器  225
机器栈  226
机器栈的操作  227
机器栈的用途  227
栈帧  228
指令指针  229
标志寄存器  229
12.4  数据的表现形式和格式  231
无符号整数的表现形式  231
有符号整数的表现形式  231
负整数的表现形式和二进制补码  232
字节序  233
对齐  233
结构体的表现形式  234
3章
x86汇编器编程  236
13.1  基于GNU汇编器的编程  237
GNU汇编器  237
汇编语言的Hello,  World!  237
基于GNU汇编器的汇编代码  238
13.2  GNU汇编器的语法  240
汇编版的Hello,  World!  240
指令  241
汇编伪操作  241
标签  241
注释  242
助记符后缀  242
各种各样的操作数  243
间接内存引用  244
x86指令集的概要  245
13.3  传输指令  246
mov指令  246
push指令和pop指令  247
lea指令  248
movsx指令和movzx指令  249
符号扩展和零扩展  250
13.4  算术运算指令  251
add指令  251
进位标志  252
sub指令  252
imul指令  252
idiv指令和div指令  253
inc指令  254
dec指令  255
neg指令  255
13.5  位运算指令  256
and指令  256
or指令  257
xor指令  257
not指令  257
sal指令  258
sar指令  258
shr指令  259
13.6  流程的控制  260
jmp指令  260
条件跳转指令(jz、jnz、je、jne、……)  261
cmp指令  262
test指令  263
标志位获取指令(SETcc)  263
call指令  264
ret指令  265
4章
函数和变量  266
14.1  程序调用约定  267
什么是程序调用约定  267
Linux/x86下的程序调用约定  267
14.2  Linux/x86下的函数调用  269
到函数调用完成为止  269
到函数开始执行为止  270
到返回原处理流程为止  271
到清理操作完成为止  271
函数调用总结  272
14.3  Linux/x86下函数调用的细节  274
寄存器的保存和复原  274

   相关推荐   

—  没有更多了  —

以下为对购买帮助不大的评价

此功能需要访问孔网APP才能使用
暂时不用
打开孔网APP