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