《编程语言实现模式》旨在传授开发语言应用(工具)的经验和理念,帮助读者构建自己的语言应用。这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如此类的工具。为此,作者举例讲解已有语言应用的工作机制,拆解、归纳出31种易于理解且常用的设计模式(每种都包括通用数据结构、算法、策略)。虽然示例是用Java编写的,但相信读者可以触类旁通,利用这些设计模式构建针对其他编程语言(既包括特定领域语言,也包括通用编程语言)的应用。
第1部分 读取输入
第1章 初探语言应用 3
1.1 大局观 3
1.2 模式概览 5
1.3 深入浅出语言应用 9
1.4 为语言应用选择合适的模式 17
第2章 基本解析模式 21
2.1 识别式子的结构 22
2.2 构建递归下降语法解析器 24
2.3 使用文法DSL来构建语法解析器 26
2.4 词法单元和句子 27
第3章 高阶解析模式 49
3.1 利用任意多的向前看符号进行解析 50
3.2 记忆式解析 52
3.3 采用语义信息指导解析过程 52
第2部分 分析输入
第4章 从语法树构建中间表示 73
4.1 为什么要构建树 75
4.2 构建抽象语法树 77
4.3 简要介绍ANTLR 84
4.4 使用ANTLR文法构建AST 86
第5章 遍历并改写树形结构 101
5.1 遍历树以及访问顺序 102
5.2 封装访问节点的代码 105
5.3 根据文法自动生成访问者 107
5.4 将遍历与匹配解耦 110
第6章 记录并识别程序中的符号 131
6.1 收集程序实体的信息 132
6.2 根据作用域划分符号 134
6.3 解析符号 139
第7章 管理数据聚集的符号表 155
7.1 为结构体构建作用域树 156
7.2 为类构建作用域树 158
第8章 静态类型检查 181
第3部分 解释执行
第9章 构建高级解释器 219
9.1 高级解释器存储系统的设计 220
9.2 高级解释器中的符号记录 222
9.3 处理指令 224
第10章 构建字节码解释器 239
10.1 设计字节码解释器 241
10.2 定义汇编语言语法 243
10.3 字节码机器的架构 245
10.4 如何深入 250
第4部分 生成输出
第11章 语言的翻译 278
11.1 语法制导的翻译 280
11.2 基于规则的翻译 281
11.3 模型驱动的翻译 283
11.4 创建嵌套的输出模型 291
第12章 使用模板生成DSL 312
12.1 熟悉StringTemplate 313
12.2 StringTemplate的性质 316
12.2 从一个简单的输入模型生成模板 317
12.4 在输入模型不同的情况下复用模板 320
12.5 使用树文法来创建模板 323
12.6 对数据列表使用模板 330
12.7 编写可改变输出结果的翻译器 336
第13章 知识汇总 348
13.1 在蛋白质结构中查找模式 348
13.2 使用脚本构建三维场景 349
13.3 处理XML 350
13.4 读取通用的配置文件 352
13.5 对代码进行微调 353
13.6 为Java添加新的类型 354
13.7 美化源代码 355
13.8 编译为机器码 356
参考文献 359
索引 361
电机与拖动MATLAB仿真与学习指导 内容简介 书是与孙建忠、刘凤春主编的《电机与拖动》相配套的教学辅助教材,是一本将电机与拖动理论和MATLAB仿真技术有机结...
《随机信号分析》主要阐述了概率论与随机信号的基础理论和分析方法。全书共分7章,包括概率论,随机信号的时域、频域分析,随机信
《JavaScript学习指南(第2版)》系统地介绍了JavaScript的基本语法、基本对象、调试工具与排错技术、事件处理机制、浏览器对象模型
《急诊急救护理实践手册》内容简介:本书分为6篇67章,从临床实用角度出发,概括了急诊常见各种急症、急病、创伤等的急救与护理以及
《商业创意(全二册)》内容简介:《商业创意》 商业创意简单地说是可以实现商业价值的创意。商业创意的诞生通常是由企业或者相关机
Youdontneedprogrammingexperiencetoaddinteractiveandvisualeffectstoyourwebpageswi...
《新文科背景下的外语教学研究》内容简介:本书共收集34篇论文,涵盖语言学、文学、外语教学等各个学科领域,结合新文科建设,围绕
《艺术沉思录》内容简介:本书图文并茂,凝聚了崔自默先生从事艺术创作近40年来的艺术教学、实践、研究、发明的经验总结与精髓指导
《iOS 8开发指南》内容简介:苹果公司的iOS系统从诞生之日起到现在,在短短几年时间内,凭借内置有iOS系统的iPhone和iPad的很好的用
《Java EE 框架整合开发入门到实战:Spring+Spring MVC+MyBatis(微课版)》内容简介:Java EE框架整合开发入门到实战:Spri...
It’sthelittlethingsthatturnagooddigitalproductintoagreatone.Withthisfullcolorpra...
《365夜故事:夏》内容简介:《365夜故事》是由鲁兵先生专为孩子编选的“国宝级”童书。以孩子的视角为选择眼光,以儿童的口语来裁
本书描述了一种恰如其分的软件架构设计方法。作者建议根据项目面临的风险来调整架构设计的成本,并从多个视角阐述了软件架构的建
《副业思维》内容简介:副业不只是业余时间的一份工作,更是人们追求自我、设计自己人生、实现人生梦想非常重要的一个渠道。掌握副
本书介绍一种把WindowsGUI应用程序移植到Linux的方法——API模拟方法。书中介绍了这种方法的设计思想,以及具体的实现过程。同时
Thisbeginninggraduatetextbookdescribesbothrecentachievementsandclassicalresultso...
黑客与画家 本书特色 世界上一个互联网应用程序Viaweb开发者举世公认的互联网创业Paul Graham的文集!Paul Graham带领我们探究黑客的世界,...
《人机交互》是学习人机交互课程的教材,介绍了人机交互的发展历史、人机交互技术、交互设备、交互系统设计方法及交互系统评估等
《ES6标准入门(第2版)》内容简介:ES6(又名ES2105)是JavaScript语言的新标准,2015年6月正式发布后,得到了迅速推广,是目前业
《全面预算管理》内容简介:全面预算管理作为管理会计的重要内容之一,能够帮助企业作出明智的决策,进而创造价值,并保证企业持续