《编程语言实现模式》旨在传授开发语言应用(工具)的经验和理念,帮助读者构建自己的语言应用。这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如此类的工具。为此,作者举例讲解已有语言应用的工作机制,拆解、归纳出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
本书首先解释了AJAX为什么在大规模的开发中能有如此广阔的应用前景,接着系统地介绍了当前重要的AJAX技术和组件。你将看到把数据
《我坐在火山的最边缘》内容简介:本书收录了青年学者、诗人包慧怡2005—2015年间的代表诗作,是作者2016年出版的诗集的修订版,增
内容简介本书面向智能控制学科前沿,从工程应用的角度出发,比较全面地介绍了智能控制的基本概念、理论和系统设计方法及微机实现
《LINUX系统编程》讲述了:在某些时刻,几乎所有的程序员都要与其程序所处操作系统中的系统调用和程序库打交道。《LINUX系统编程
《银行内部控制对信贷风险的影响研究》内容简介:本书依据信息不对称、委托代理、内部控制等理论,结合中国信贷市场制度背景,分析
专转本计算机应用基础考试核心密卷 内容简介 本书紧扣2005年计算及应用基础考试内容,分理论题和操作题两部分。本书前十套试卷是对计算机应用基础知识体系与操作实践...
《程序员必读的职业规划书》内容简介:程序员是一种逻辑动物,只有当他们理解求职到底是一种什么行为以后,才能做出有意义的行动。
《浙东唐诗之路学术文化编年史》内容简介:浙东,自晋代起渐成为人文荟萃之地,源远流长的山水诗在此滋生,与之有连带关系的书法、
《人工智能发展报告(2020—2021)》内容简介:本书是国家工业信息安全发展研究中心在对2020年全球人工智能技术和产业进行全面跟踪
《从零开始构建深度前馈神经网络》内容简介:2016年,阿法狗(AlphaGo)为全世界打开了一条窄窄的门缝,通往未来之路就此展现。通过
《动力与秩序:中国哲学的现代追寻与转向(1895—1995)》内容简介:面对“三千年未有之大变局”,19世纪晚期,中国文化精神发生了
CATIA V5R20快速入门.进阶与精通-(含多媒体DVD光盘2张) 本书特色 本书是全面、系统学习和运用catia v5r20软件的快速入门、进阶与精通书籍...
《给孩子的幸福力1》内容简介:在孩子成长的道路上,我们给予他们太多的关注和爱,却常常忘了告诉他们,成长是一件多么美好的事情;
《历史的面孔》内容简介:中国近代历史是一段苦难史,也是一段中国人民不断探索的历史。“求新求变”贯穿着整个时空,这里面涌现了
《碎片与重构:互联网思维重塑大教育》以开阔的视野、全新的思维、通俗的文笔,描绘了一幅网络时代教与学的“清明上河图”。内容
《瑞士银行秘密》内容简介:银行业变革一直是近些年的热点话题。世界很大的离岸金融中心瑞士银行以拥有数百年的保密传统而享有盛誉
本书透彻地讲解了Flash组件开发、Flash游戏开发,以及SWF文件加解密与Flash文件综合性保护这三个话题。“弥赛亚之书”和“逆水游
《弓箫缘·石榴记》内容简介:《弓箫缘》初唐年间,筹建北庭都护府的四十万石粮草意外遭劫,陈澌奉李渊之命调查此案。塞外草原一晚
本书是DSL领域的丰碑之作,由世界级软件开发大师和软件开发“教父”MartinFowler历时多年写作而成,ThoughtWorks中国翻译。全面详
《世界是設計》與構思設計本身的面向有關。在此,不把設計理解為精製、美化、裝飾。設計一字的最初意義隱含構思起草。設計首先是