《两周自制脚本语言》是一本优秀的编译原理入门读物。全书穿插了大量轻松风趣的对话,读者可以随书中的人物一起从最简单的语言解释器开始,逐步添加新功能,最终完成一个支持函数、数组、对象等高级功能的语言编译器。本书与众不同的实现方式不仅大幅简化了语言处理器的复杂度,还有助于拓展读者的视野。
《两周自制脚本语言》适合对编译原理及语言处理器设计有兴趣的读者以及正在学习相关课程的大中专院校学生。同时,已经学习过相关知识、有一定经验的开发者,也一定能从本书新颖的实现方式中受益良多。
第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
当代机器深度学习方法与应用研究 内容简介 本书对当前*新的深度学习方法及应用进行了全面的概述, 涵盖了自动语音识别 (ASR) 、计算机视觉、语言建模、文本处理...
Flash 8动画特效设计经典108例-(附赠1CD) 内容简介 本书的*大特点是以*新版本的Flash8中文版为制作平台,通过108个精挑细选,针对性强,实用...
《旅行人信札》内容简介:这些是1981年旅行时寄给北京亲友的信。我哥哥嘉曜极喜欢这些信,说要发表。他不是出版家,说说罢了。1993
《删除》内容简介:《删除》讲述了遗忘的美德,为读者展现了大数据时代的取舍之道。《删除》从大数据时代信息取舍的目的和方法分别
《物联网安装调试与运维(初级)》内容简介:本书是1+X职业技能等级证书——物联网安装调试与运维(初级)的配套图书。本书在编写思
《清华少年说(第四辑)》内容简介:这是一本关于清华年青学子的书籍。无论是醉心学术、勤奋有加的学霸,还是矢志不渝、情系家国的
《经营的逻辑》内容简介:本书主要是对企业到底如何经营、如何管理、有无可循的逻辑等问题展开阐述。作为企业经营管理者,他们日常
《3ds Max/VRay印象超写实建筑表现全模渲染技法》内容简介:本书从“真实”的角度出发,根据笔者多年积累的建筑效果图制作和教学经
这是一本可以帮助想进入编程设计领域的设计者学习的手册。从内容上避免了对所有Grasshopper组件的详细解析,而将重点放在逐渐学习
《过瘾湘菜800例》内容简介:湘菜即湖南菜,至今已有2000多年的历史。1974年在长沙马王堆出土的一套西汉随葬竹简菜谱上,已记载了1
《文臣的一天(古代人的一天·第二辑)》内容简介:在漫长的历史发展过程中,中国古代逐步形成了一套规范、严密的文官制度,来保证
《中国前沿:不如问问科学家吧》内容简介:本书精选了人类对未来生活无限畅想的“人机共生”、“太空探索”、“生物治疗”“粪菌移
《网店应该这样推广》内容简介:《网店应该这样推广——淘宝店铺赚钱的秘密(第2版)》是一本系统地讲解关于如何进行网上店铺营销的
本书是理论计算机科学方面的优秀教材,主要介绍形式语言、自动机、可计算性和相关内容。本书特别注意定义、定理的准确性和严格性
本书是一本关于雷电科学的入门书,涵盖了对雷电现象的解读、思考以及雷害防范对策等内容。本书在阐释雷电现象的发生、原理、变化
宇宙如何誕生,又將如何結束?宇宙誕生後長成什麼形狀?如何演變成現今這般大小?我們的宇宙是不是獨一無二?本書針對這些問題提
C++面向对象程序设计 本书特色 刘建舟、徐承志、陈荆亮、吴奕编著的《C++面向对象程序设计》坚持定位明确、由浅入深、理论与实践相结合的方针;在写作上,力求简单...
《顺利升入一年级》内容简介:幼小衔接是教育的基础工程,但很多家长对幼小衔接认识不清,在错误的方向上努力,以至问题丛生。本书
《翁文灏与抗战档案史料汇编(上、下册)》内容简介:本资料集收录了翁文灏与抗战有关的档案史料,有五个方面的内容:一是战前政治
群体研讨支持系统及其文本分析方法 内容简介 本书分上下两部分, 上半部分重点介绍了群体研讨支持系统研究的*近进展, 主要涉及群体决策中相关的任务类型, 群体支持...