《两周自制脚本语言》是一本优秀的编译原理入门读物。全书穿插了大量轻松风趣的对话,读者可以随书中的人物一起从最简单的语言解释器开始,逐步添加新功能,最终完成一个支持函数、数组、对象等高级功能的语言编译器。本书与众不同的实现方式不仅大幅简化了语言处理器的复杂度,还有助于拓展读者的视野。
《两周自制脚本语言》适合对编译原理及语言处理器设计有兴趣的读者以及正在学习相关课程的大中专院校学生。同时,已经学习过相关知识、有一定经验的开发者,也一定能从本书新颖的实现方式中受益良多。
第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标准的网页设计技巧与实战(第2版)》通过大量现实世界中已经存在的网页实例,由浅入深地讲解了构建遵循Web标准的网页所涉
PHP开发手册-含DVD光盘一张 内容简介 本书全面、系统地介绍了php实战开发方方面面的技术。内容由浅入深,从易到难,实例丰富,从php的基本知识到高级技术与...
数据驱动的金融时间序列预测模型研究 本书特色 以非线性动力学的观点看来,现代金融理论中金融系统的不确定性恰恰源于其自身就是一个受多种因素综合影响的具有开放性质的...
《SEM长尾搜索营销策略解密》内容简介:长尾并不是互联网的产物,其实它很早就产生了。只是随着互联网的普及和高速发展,我们越来越
本书是一本引导读者深入了解Docker实现原理的技术普及读物,主要目标是通过对Docker架构和源代码的详细讲解和解剖,帮助读者对Do
《手把手教你画素描——头像写生》内容简介:《手把手教你画素描 头像写生》是专为零基础学绘画的读者编写的素描人像绘制技法教程。
《静静地做一个明师》内容简介:本书从教师自身角度出发,将日常教学工作、学习要求、教学文化和教育思想这四个方面的提升和改进视
渡边修司Shujiwatanabe日本立命馆大学教授,日本立命馆游戏研究中心运营委员,日本数字游戏学会研究委员,1997年,以《最终幻想7
《深入浅出Python量化交易实战》内容简介:本书主要以国内A股市场为例,借助第三方量化交易平台,讲述了KNN、线性模型、决策树、支
《麦克手绘:室内快题设计与表现》内容简介:本书在手绘技法表现的基础上,着重快题设计的讲解。为了让读者能够快速掌握设计表达的
《写好论文》内容简介:怎样写好论文? 一直以来,“感悟式教授”和“体悟式学习”是论文写作主要的提升模式。随着学术水平的提升和
本书是Struts项目的完全指南,引导开发人员理解概念、设计和实现方式。虽然它由Struts应用程序的基础开始并深入讲解了Model2设计
谁是极客?谁在改写人类的运程?100年以前,可能是科学怪人弗兰肯斯坦;20年以前,是微软的比尔•盖茨和苹果的斯蒂夫•乔布斯;今天
Java 数据库高级编程宝典 本书特色 内容丰富、权威,详尽细致地介绍了软件开发环境的搭建方法,通过完整的网络相册和留言板实例展现了JSP+SServlet+J...
互联网的未来-光荣.毁灭与救赎的预言 目录 译者序引言**部分可繁殖网络的兴起和停滞**章盒子的战争第二章网络的战争第三章网络安全与自我繁殖的两难第二部分停滞之...
在线阅读本书《CrossingtheChasm:MarketingandSellingDisrupti》:Mooreprovidesaninvaluablese...
《自然语言处理简明教程》,本书系统地阐述了自然语言处理的基本方法,描述了每一种方法的技术原理及操作过程。本书可供计算机科
《Web设计技术手册第三版》作为一本完备而简洁的手册,涵盖了在设计Web页面时需要知道的所有知识。为体现受标准推动的Web设计现状
社会经济的发展,使得移动通信技术日新月异。本书系统、全面地介绍了移动通信的相关概念、关键技术以及一些典型的移动通信系统,