前言
原书第4版已经与2015年圣诞节问世,我看的第2版是10年前的版本。里面列举的例子有点过时。第2版比第3版翻译得更好一点。不过像现在通常称为垃圾回收的,在译本里叫物料回收,一码事儿。另外,第4版已经从原来的13章经扩充为17章经了。
这本书讨论编程语言的工作原理和技术,阐述编程语言的重要基础概念。我特别推荐在学习具体编程以前学学这本书。当然要是之前再学一点编译原理更完美。
干货
正则表达式和上下无关文法是语言的生成器,它们描述如何构造出合法的字符或者单词的串。
扫描器和语法分析器是语言的识别器,确定一个给定的串是否合法。扫描器的作用是减少语法分析器必须处理信息的量。
使用语法分析器分为自上而下(称为LL或者预测性的)和自下而上(称为LR或者移入归约的)。
子程序是控制抽象,类是数据抽象。
一个属性文法将一些属性关联到一个上下文无关文法或树文法的各个符合,或者将一些属性规则关联于各个产生式。
严格地说,属性文法只允许复制规则,和对语义的简单调用。
虽然可以构造出分析属性流和标注分析树的自动化工具,但是大部分编译器还是依靠动作例程。
在一遍编译器里,扫描,语法分析,语义分析,和代码生成,在对输入的一次遍历中交错进行。
描述顺序的机制分为7类:顺序执行,选择,迭代,过程抽象,递归,并发和非确定性。
顺序就是按序
选择是在两个或多个控制流中选择一个执行。
递归基于一个操作的更简单实例来定义操作。
迭代则重复操作,利用操作的副作用。
在值模型中,变量就是命名的数据容器。在引用模型中,变量数对数据对象的引用。
重新整理表达式,以及找出公共子表达式或在一个非确定性结构中一旦发现可选择,就不再对其它选择继续求值。
类型为许多操作提供隐含上下文,并限制可执行的操作集合。
一个类型系统包括:1.一种定义类型并将它们与特定的语言结构相关联的机制。2.一束有关类型等价、类型想容和类型推理的规则。
类型等价性确定两个名字或者值是否具有相同类型。
类型兼容