概述
语法分析器是编译器的核心,语法分析器从词法分析器获得一个由词法单元组成的串,并验证这个串可以由源语言的文法生成。
语法分析器大体上可以分为三种类型:通用的、自顶向下的和自底向上的。
语法分析器的输入总是按照从左向右的方式被扫描,每次扫描一个符号。
自顶向下文法典型为LL(1)文法,自下而上文法典型为LR文法。其中LR文法包括SLR、LR(1)、LALR(1)文法。
各文法之间的关系。
下面将依次讲解各文法
LL(1)文法
LL(1)文法的判定
判断文法G是否是LL(1)文法,有两种判断方法,一是根据以下定义:
一个文法G是LL(1)的,当且仅当G的任意两个不同的产生式A->α|β满足下面条件:
- 不存在终结符a使得α和β都能够推导出以a开头的串。
- α和β最多只有一个可以推导出空串。
- 如果β=>ε,那么α就不能推导出任何以Follow(A)中某个终结符开头的串。
即:First(α)和First(β)不相交。如果β=>ε,那么First(α)和Follow(A)不相交。
另一种方法就是构造出预