语法分析 1
程序设计语言构造的语法可以使用 上下文无关文法 或者 BNF (巴库斯-瑙尔范式) 表示法来描述,文法为语言设计者和编译器编写者提供了很大便利:
- 文法给出了一个程序设计语言的精确易懂的语法归约
- 对于某些类型的文法,我们可以自动构造出高效的语法分析器,它能够确定一个源程序的语法结构。同时,语法分析器的构造过程可以揭示出语法的二义性,同时还可能发现一些容易在语言的初始设计阶段被忽略的问题
- 一个正确设计的文法给出了一个语言的结构,该结构有助于把源程序翻译为正确的目标代码,也有助于检测错误
- 一个文法支持逐步加入可以完成新任务的新语言构造,从而迭代地演化和开发程序语言。如果对语言的实现遵循语言的文法结构,那么在实现中加入这些新构造的工作就会变得更加容易
语法分析器从词法分析器获得一个词法单元组成的串,并验证这个串可以由源语言的文法生成,我们期望语法分析器能够以易于理解的方式报告语法错误,并能够从常见的错误中恢复并继续处理程序的其余部分。从概念上来说,对于良构的程序,语法分析器构造出一棵 语法分析树,并把它传递给编译器的其他部分进一步处理。我们并不需要显式地构造出语法分析树,对于源程序的检查和翻译工作可以和语法分析过程交替完成,因此语法分析器和其他部分可以用一个模块实现。