《编程语言实现模式》旨在传授开发语言应用(工具)的经验和理念,帮助读者构建自己的语言应用。这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如此类的工具。为此,作者举例讲解已有语言应用的工作机制,拆解、归纳出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
《所有的颠沛流离,只为成就更好的自己》内容简介:人,切不可一路成长,一路悲伤。在觉得快受不了了的日子里,请反复告诉自己,这
《社会主义核心价值观融入大学生思想政治教育的创新机制研究》内容简介:本书着眼于社会主义核心价值观和大学生思想政治教育的融合
《版权赋能,丝路无疆》内容简介:报告首先挖掘了丝绸业在吴江的历史缘起,继而介绍了吴江丝绸纺织工业的形成、演进与发展历程,分
《汤一介散文集》内容简介:本书精选汤一介先生历年来的散文作品,包涵忆旧随笔、传统与现代文化评论和对《老子》《心经》《世说新
《雷达手册(第3版)》内容简介:雷达是电子工程系统的一个重要例子。在大学工科课程中,人们通常把重点放在诸如电路设计、信号、固
《差错控制编码》围绕信道编码理论、技术及其应用,对各种编码方法的工程应用背景及发展前景作了详尽系统的介绍。全书共分9章,主
《放下一切去旅行》内容简介:最遗憾的事就是不曾说走就走,旅行,你还要等多久? 他带着拍立得和朋友结伴出行,在国内各种“X奴”
当技术使整个社会突变到移动互联时代,实现了社群、人人实时在线等质变,企业应该如何在移动互联时代实现生存、进化?。《社群经
《写给数据产品经理新人的工作笔记》内容简介:本书的目标在于,为数据产品从业新人或准备转行做数据产品的读者提供一个本领域的通
《上下百亿年:太阳的故事》内容简介:《上下百亿年:太阳的故事》将从一次虚拟的古希腊之旅开始,逐步深入地向读者介绍太阳这颗带
網路提供一個讓我們負責自己生活的機會,也讓我們得以重新定義我們在全球社會和在地社群中的雙重公民角色。此外,網路交給我們責
《当我们走进心理咨询室》内容简介:为什么在亲密关系中,一些人总是扮演“受害者”的角色?为什么一些人总是习惯讨好别人,对所有
字体对于很多刚开始接触学习的人来说,是一条很难跨越的鸿沟,虽然国内外也有相关方面的书籍(以国外作品为主),但终究还是不适
《嵌入式Linux应用程序开发详解》主要分为3个部分,包括Linux基础、搭建嵌入式Linux环境和嵌入式Linux的应用开发。Linux基础部分
8086微机原理及接口技术-习题解答与实验指导 本书特色 本书是教材《80x86/Pentium微机原理及接口技术》的配套教材。全书共分两部分:**部分为学习指...
《iOS开发:从零基础到精通》内容简介:本书适合iOS开发零基础的读者阅读。全书包含六大部分,共24章,涵盖了针对iOS开发入门所需要
WithcontributionsbyMichaelAshikhmin,MichaelGleicher,NatyHoffman,GarrettJohnson,T...
《中国与世界经济》内容简介:2015年世界经济的整体形势基本延续了2010年以来缓慢复苏的势头,但是增长状况已低于预期。同时,世界
《天使的号角》内容简介:一个新的杀手正在行动—— 凶手的犯罪手段令人不寒而栗。他蛰伏在阴暗潮湿的地下室和纽约市的地下通道,用
《LabVIEW大学实用教程(第3版)》主要内容:LabVIEW是一种图形化编程语言,广泛用于仿真、数据采集、仪器控制、测量分析和数据显示