《两周自制脚本语言》是一本优秀的编译原理入门读物。全书穿插了大量轻松风趣的对话,读者可以随书中的人物一起从最简单的语言解释器开始,逐步添加新功能,最终完成一个支持函数、数组、对象等高级功能的语言编译器。本书与众不同的实现方式不仅大幅简化了语言处理器的复杂度,还有助于拓展读者的视野。
《两周自制脚本语言》适合对编译原理及语言处理器设计有兴趣的读者以及正在学习相关课程的大中专院校学生。同时,已经学习过相关知识、有一定经验的开发者,也一定能从本书新颖的实现方式中受益良多。
第1部分 基础篇
第1天 来,我们一起做些什么吧1
1.1 机器语言与汇编语言2
1.2 解释器与编译器3
1.3 开发语言处理器5
1.4 语言处理器的结构与本书的框架6
第2天 设计程序设计语言10
2.1 麻雀虽小、五脏俱全的程序设计语言11
2.2 句尾的分号12
2.3 含糊不得的语言14
第3天 分割单词17
3.1 Token对象18
3.2 通过正则表达式定义单词19
3.3 借助java.util.regex设计词法分析器22
3.4 词法分析器试运行27
第4天 用于表示程序的对象30
4.1 抽象语法树的定义31
4.2 设计节点类34
4.3 BNF38
4.4 语法分析与抽象语法树42
第5天 设计语法分析器44
5.1 Stone语言的语法45
5.2 使用解析器与组合子46
5.3 由语法分析器生成的抽象语法树53
5.4 测试语法分析器59
第6天 通过解释器执行程序62
6.1 eval方法与环境对象63
6.2 各种类型的eval方法65
6.3 关于GluonJ69
6.4 执行程序72
第7天 添加函数功能75
7.1 扩充语法规则76
7.2 作用域与生存周期81
7.3 执行函数83
7.4 计算斐波那契数89
7.5 为闭包提供支持90
7.6 实现闭包92
第8天 关联Java语言95
8.1 原生函数96
8.2 编写使用原生函数的程序98
第9天 设计面向对象语言101
9.1 设计用于操作类与对象的语法102
9.2 实现类所需的语法规则103
9.3 实现eval方法104
9.4 通过闭包表示对象110
9.5 运行包含类的程序114
第10天 无法割舍的数组115
10.1 扩展语法分析器116
10.2 仅通过修改器来实现数组119
第2部分 性能优化篇
第11天 优化变量读写性能123
11.1 通过简单数组来实现环境124
11.2 用于记录全局变量的环境127
11.3 事先确定变量值的存放位置130
11.4 修正eval方法并最终完成性能优化134
第12天 优化对象操作性能137
12.1 减少内存占用138
12.2 能否通过事先查找变量的保存位置来优化性能141
12.3 定义lookup方法144
12.4 整合所有修改并执行147
12.5 内联缓存152
第13天 设计中间代码解释器156
13.1 中间代码与机器语言157
13.2 Stone虚拟机158
13.3 通过栈实现环境167
13.4 寄存器的使用170
13.5 引用变量的值173
13.6 if语句与while语句173
13.7 函数的定义与调用175
13.8 转换为虚拟机器语言177
13.9 通过虚拟机执行184
第14天 为Stone语言添加静态类型支持以优化性能187
14.1 指定变量类型188
14.2 通过数据类型检查发现错误193
14.3 运行程序时执行类型检查204
14.4 对类型省略的变量进行类型推论208
14.5 Java二进制代码转换214
14.6 综合所有修改再次运行程序226
第3部分 解说篇(自习时间)
第15天 手工设计词法分析器 229
15.1 修改自动机230
15.2 自动机程序233
15.3 正则表达式的极限235
第16天 语法分析方式236
16.1 正则表达式与BNF237
16.2 语法分析算法238
16.3 LL语法分析239
16.4 算符优先分析法与自底向上语法分析244
第17天 Parser库的内部结构251
17.1 组合子分析252
17.2 解析器组合子的内部252
第18天 GluonJ的使用方法263
18.1 设定类路径264
18.2 启动设定265
18.3 GluonJ语言267
18.4 功能总结268
第19天 抽象语法树与设计模式271
19.1 理想的设计272
19.2 Interpreter模式273
19.3 Visitor模式276
19.4 使用反射282
19.5 面向切面语言284
考虑中断风险的供应链优化模型和算法研究 本书特色 本书以现代物流的新现象——中断风险为背景,阐述了供应链网络优化中的多级决策、多重指派、...
《股民的眼泪》内容简介:股市惨淡,跌跌不休,不少股民暗自垂泪,究竟如何避开股市的地雷? 张化桥继续敢言作风,在新作中大胆揭示
《计算机体系结构》是一本强调从实践中学理念的计算机体系结构的教材。作者结合自身从事国产龙芯高性能通用处理器研制的实践,以
《烹饪原料》内容简介:本书重点介绍了各类烹饪原料的形态特征、性质特点、产地与产季、组织结构、品质检验、贮存与保管、烹饪运用
ADOBE中文版LLLUSTRATOR教程 本书特色 《中文版adobeillustrator教程(附光盘高等院校多媒体专业通用教材)》编著者赵君韬、...
《开会是门技术活儿》内容简介:《开会是门技术活儿》是一本讲述开会的门道和技巧的通俗实用书,分为“秘诀篇”和“实战篇”。例如
《发条钟》内容简介:在揉合神奇与现实、想象与真实的故事中传递真善美的真谛 知名译者、童书书评人、插画师携手打造精品奇幻儿童文
《一个女孩的恐惧》内容简介:一个深夜,女孩手持双管猎枪,径直冲进森林,用枪口抵住一个人的额头,扣下扳机 人们常常说熊镇太不起
CAD室内设计施工图常用图块.5 金牌家装实例 本书特色 本图集汇集了住宅室内装饰设计施工图各类实例,是从大量的工程实例中精选出来,经过加工整理,使其典型化,综...
书由浅入深,全面、系统地介绍了Node.js开发技术。书中提供了大量有针对性的实例,供读者实践学习,同时提供了大量的实践练习题及
《建筑师与设计师视觉笔记》旨在鼓励视觉表达,其理念基于这样一种观点,即视觉修养与文字修养同等重要。为了开拓表达视觉信息的
《珠宝首饰设计手册》内容简介:这是一本全面介绍珠宝首饰设计的图书,特点是知识易懂、案例趣味、动手实践、发散思维。本书从学习
《中信国学大典:礼记·孝经》内容简介:中信国学大典(50册)是中信出版社引进自香港中华书局的一套深具国际视野、贴近当代社会的
《Redis4.xCookbook(中文版)》内容简介:Redis是一个十分热门的内存数据库,号称后端的“瑞士军刀”,它拥有诸多优良特性,已经被
《形式感+》内容简介:网页设计师从早年的综合性工作中分化出来,形成了相对独立的专业岗位,网页设计也不再是单纯的软件应用,它衍
Asupremelyusablenuts-and-boltsguideforbeginnersAdailytoolofthetradeforspecialist...
《苏联与当代俄罗斯试验飞机》介绍了俄罗斯《苏联》所有类别的试验和研究飞机,包括发动机飞行试验台,如I0L—76LL。Tu—16LL;雷
C程序员在编写程序时手头一定要有这本书。在这本书中,C语言专家PeterPrinz和TonyCrawford为你提供大量的编程参考信息。全书叙述
《Tableau数据可视化》内容简介:本书由专业的数据分析师基于Tableau 10.1精心编撰,详细介绍Tableau的数据连接、图形编辑与展示功
计算智能 内容简介 本书共9章,介绍了传统智能技术的主要原理与技术、方法,主要包括知识的表示、基本推理、不确定推理、搜索原理等。同时,还介绍了现代智能技术主要的...