每种程序设计语言都有描述程序语法结构的规则。例如,Pascal程序由程序块(又叫分程序)构成,程序块由语句组成,语句由表达式组成,表达式由记号组成等等。这些规则可以用上下文无关文法或BNF范式(Backus-Naur Form)描述。 编译器常用的文法分析方法有自上而下和自下而上两种。正如它们的名字所示,自上而下分析器建立分析树是从根结点到叶结点,而自下而上分析器恰好反过来。它们的共同点是从左向右地扫描输入,每次一个符号。 最有效的自上而下和自下而上的分析法都只能处理上下文无关文法的子类。这些子类足以描述程序设计语言的大多数语法结构,其中LL文法的分析器通常用手工实现,而LR文法的分析器通常利用自动工具构造。 本章致力于编译器采用的典型语法分析方法。我们首先提出有关上下文无关文法的基本概念,然后介绍适合于手工实现的预测分析技术,最后给出自动工具用的LR分析算法。由于程序员准备的代码经常会出现一些语法错误,因此我们还扩展所介绍的分析方法,使之能从常见的错误中恢复过来。 3.1 上下文无关文法 ..... 3.4 自下而上分析 3.6 二义文法的应用