



在本章中,我们将回顾实现一个编译器所需的基本工具。程序通常是由程序员以文本形式输入的,即一串字符。这种程序的文本表示称为 具体语法 。我们使用具体语法来简洁地记录和讨论程序。在编译器内部,我们使用 抽象语法树 (Abstract Syntax Tree,AST)来表示程序,AST以一种有效的方式支持编译器需要执行的操作。将具体语法转换为抽象语法的过程称为 语法分析 。本书不包括语法分析的理论和实现。我们向对语法分析感兴趣的读者推荐Aho等人(2006)对语法分析的全面解析。本书的支持代码中提供了语法分析器,用于将具体语法转换为抽象语法。
在编译器中AST可以用许多不同的方式表示,这取决于编写编译器的编程语言。我们使用Racket的结构struct特性来表示AST(1.1节)。我们使用文法来定义编程语言的抽象语法(1.2节),并通过模式匹配来检查AST中的各个节点(1.3节)。我们使用递归函数构造和析构AST(1.4节)。本章对这些部分会进行简要介绍。