编程语言实现模式 - Terence Parr

编程语言实现模式

Terence Parr

出版时间

2012-03-19

ISBN

9787560977003

评分

★★★★★

标签

编程

书籍介绍

《编程语言实现模式》旨在传授开发语言应用(工具)的经验和理念,帮助读者构建自己的语言应用。这里的语言应用并非特指用编译器或解释器实现编程语言,而是泛指任何处理、分析、翻译输入文件的程序,比如配置文件读取器、数据读取器、模型驱动的代码生成器、源码到源码的翻译器、源码分析工具、解释器,以及诸如此类的工具。为此,作者举例讲解已有语言应用的工作机制,拆解、归纳出31种易于理解且常用的设计模式(每种都包括通用数据结构、算法、策略)。虽然示例是用Java编写的,但相信读者可以触类旁通,利用这些设计模式构建针对其他编程语言(既包括特定领域语言,也包括通用编程语言)的应用。

AI导读
核心看点
  • 归纳31种语言应用设计模式
  • 涵盖解析、分析及解释执行
  • 侧重工程实践而非纯理论
适合谁读
  • 编译原理初学者
  • 需构建DSL或解析器的开发者
  • 对语言实现感兴趣的程序员
读前提醒
  • 建议先读ANTLR参考书
  • 示例基于Java和ANTLR 3
  • 重在理解模式而非死记代码
读者共识
  • 比龙书更易懂且实用
  • 适合构建编译器前端参考
  • 为语言实现提供清晰思路

本导读基于书籍简介、目录、原文摘录、短评和书评生成,不等同于全文精读。

精彩摘录
  • "图11.2中所示是使用这些引擎的方法,需要给引擎提供输入语言的文法和系列的转换规则。根据文法,引擎从输入内容构造解析樹,然后应用规则到输出。"
  • "11.3模型驱动的翻译 Model-driven Translation 在模型驱动翻译器中,一切都要围绕解析器构建的输入模型进行。最简的就是创建AST模型,然后一边对其进行遍历,一边对其进行输出”。它与导译器唯一的区别是在历过程中生成代码,而不是在解析过程中生 AST的优点是可以在生成输出之前进行语义分析。"
  • "的输出语言)的语法都会搅和在一起。使用这种显式的生成类时,输入模型和输出模型之间的连通管道通常都是构造方法的参数。 将赋值子树映射到对应的输出对象其实是很自然的过程,下面来考虑更复杂的情况:译标矩的垂法运算两者的语法都一样,但是语义上却有很大的差别。所以,要想创建正确的输出模型,翻译时必须检测待翻译表达式的类型"
  • "Python采取动态类型机制,因此程序员不用指明程序实体的类型(而编译器也无法通过推断计算出所有的类型)。 Python的解释器会在运行时检查所有的语义规则。C++正好处于另一个极端,虽然其他的规则都是执行时完成的,但C+是静态类型语言,使用者必须指定所有程序实体的类型。程序实体的概念比较广泛,包括程序中的常量、变量、函数、方法、类等要素。有些语言在编译时对某些语义规则进行静态检查,但为了防止恶意程序造成破坏,在执行时还会再次检査。比如,Java在编译时刻和运行时刻都会做类型检查。"
  • "语句的含义既反映在其结构里(语法),又体现于它所使用的符号和词汇中。结构指明的是该进行什么操作,而符号代表的是对什么进行操作。 这里会对许多类型安全规则进行检查。简言之,所有的操作和赋值语句中操作数的类型必须合法 本章的几种模式都会采用三次遍历,实际上,它们前两次遍历都一样。第一次遍历, Symbol解析器构建AST:第二次遍历,树遍历器构建作用域树,并生成符号表。模式ニ十的第三次遍历会在遍历AST的时候计算各个表达式的类型。"
  • "类型提升的目的就是统一操作类型。 编译器的语义分析器使用静态类型分析器来判断该提升哪一个元素或子表达式。通常,分析器会修改中间表示树以加入需要类型转换的节点。翻译器只要进行标注即可,类型转换可以在代码生成阶段完成,这比修改树要容易多了 不光是表达式,静态类型分析器还需要分析赋值语句、返回语句、函数调语句和数组下标语句中的值的类型,以检查是否需要提升。"
  • "要实现算术类型提升,还需要两个函数:第一个函作数类型,能判断操作的结果类型;第二个函数根据输结果类型,能判断是否要进行类型提升。"
  • "实现 Cymbal的返回值类型表时,需要先定义各个类型的序号。然后定义类型。有了这些定义,就能填写算术操作的返回类型表了。"
作者简介
Terence Parr是美国旧金山大学的计算机教授、研究生导师,他一直致力于从事ANTLR项目(antlr.org)和模板引擎(stringtemplate.org)的设计和开发工作。Terence曾担任IBM、洛克希德马丁、NeXT、雷诺汽车等公司的技术顾问,另著有《ANTLR权威指南》。
目录
第1部分 读取输入
第1章 初探语言应用 3
1.1 大局观 3
1.2 模式概览 5
1.3 深入浅出语言应用 9

显示全部
用户评论
一本很棒的讲述编译原理的书,最重要的是,从中看到了无限的可能性。
相比龙书这类理论派的书, 更加注重工程化的实践. 书里应该是基于antlr v3的, 期待第二版>_<
适合我这种外行看咯。
每次读都有新感觉。 这本书读完,再去啃编译原理,会感觉很好理解。
说了很多的模式,不太适合入门时看.....还是走实战路线....以后再回来看
书里的模式都比较实用,但个人觉得如果不依赖 antlr3 就更好了。
全面详细但不深入,很多泛泛之谈,我发现很多模式可以迁移到解析语言之外,栈模式和寄存器模式甚至可以迁移到编程之外,后面没怎么看具体实现,把思想都看了,发现解析语言真是一个脏累苦的细节体力活,快乐人生得用黑盒,或是人工智能代工——这些解析工作,反正不能手写,这就像去海边捡贝壳一样,茫茫多的看不到尽头,需要机器批量处理。
解析器扫盲入门教材。对于构建一些语法简单的DSL,本书的内容足够了
实战性比较强的语言应用实现解读。模式编号有点不友好,取个名字更方便。
真正的实现编译器,里面的模式很实用
Z-Library
收藏