《两周自制脚本语言》是一本优秀的编译原理入门读物。全书穿插了大量轻松风趣的对话,读者可以随书中的人物一起从最简单的语言解释器开始,逐步添加新功能,最终完成一个支持函数、数组、对象等高级功能的语言编译器。本书与众不同的实现方式不仅大幅简化了语言处理器的复杂度,还有助于拓展读者的视野。
《两周自制脚本语言》适合对编译原理及语言处理器设计有兴趣的读者以及正在学习相关课程的大中专院校学生。同时,已经学习过相关知识、有一定经验的开发者,也一定能从本书新颖的实现方式中受益良多。
第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
网页设计与制作 本书特色 反映当前教学内容,突出理论知识的应用和实践技能的培养.注重社会发展和就业需求,面向就业,突出应用.扩展学生的思维空间和知识面,着力培养...
《世界著名计算机教材精选:语义Web技术基础》主要介绍了语义万维网基础技术。《世界著名计算机教材精选:语义Web技术基础》从实用
《虚拟机的设计与实现:CC++》内容简介描述了如何通过一系简单的步骤实现一个具有实用价值的运行时系统。对以下技术进行了深入的讨
《昆虫记 第六卷》内容简介:《昆虫记》是一部涵跨文学与科学领域的经典巨著,百佘年来一直誉满全球。本套全译插图珍藏本在最大限度
《四境、面具》内容简介:《四境“为大提琴、钢琴与打击乐而作”:面具(为中提琴与四件弦乐器而作)》作品于2007年受瑞士新音乐团
《大脑功能模式(型)理论》内容简介:在主客观事物情境模式不断刺激下,基因遗传决定的大脑生理结构和特性,建构各不相同的生理结
《2014年会计从业资格考试专用标准化辅导教材系列:会计基础》内容简介:《2014年会计从业资格考试专用标准化辅导教材系列:会计基
《设计问题(第四辑)》内容简介:本书共由十一篇文章组成,全部译自美国麻省理工学院(MIT)出版社出版的《设计问题》(Design Is
可视化程序设计与C#.NET语言 本书特色 visual c#.net是面向对象的可视化程序设计语言,具有简洁、高效 、安全、性能优良等特点,是面向对象程序设计...
《十岁前,父母给孩子的礼物》内容简介:本书倡导父母抓住孩子前十年的黄金成长时间,送给孩子受益一生的礼物——语言沟通能力和在
《旅行人信札》内容简介:这些是1981年旅行时寄给北京亲友的信。我哥哥嘉曜极喜欢这些信,说要发表。他不是出版家,说说罢了。1993
手游与社交游戏是一个生机勃勃、令人兴奋的产业,飞速发展的互联网与相关技术,成就了一个又一个广为流传、收益丰厚的游戏产品。
《化工原理》重点介绍化工单元操作的基本原理、计算方法和典型设备。全书共8章,包括绪论、流体流动与输送机械、非均相物系分离、
本书列出了100个改变建筑的伟大观念,其中很多观念至今仍在深刻影响着我们这个时代的建筑发展。书中不可避免地侧重于对一些较新的
《敦煌的光彩:常书鸿、池田大作对谈录》内容简介:本书是首任敦煌研究院院长、被誉为“敦煌守护神”的常书鸿先生与日本著名思想家
《网站分析实战:如何以数据驱动决策,提升网站价值》由王彦平、吴盛峰著。目前,越来越多的网站开始重视数据,并期望从中发现新的
《构建实时机器学习系统》内容简介:本书首先利用Pandas对美股秒级交易数据进行分析,利用Scikit-learn对股票变化方向进行预测,并
《下一代移动网络应用:在Web2.0和Mobile2.0环境中创建移动应用(第2版)》为无线移动领域的从业人员提供一种思考以及应对日益复杂的
《符号学产品设计方法》基于符号学的视野,结合语言学、传播学、文化学、社会学、心理学等相关概念、原理和分析方法,对产品设计
《交互设计》全面介绍了交互设汁的起源、基本概念和交互系统的组成以及交互设计过程中的主要方法、原则和评估技术。全书共9章,第