概述
语法分析器是编译器的核心,语法分析器从词法分析器获得一个由词法单元组成的串,并验证这个串可以由源语言的文法生成。
语法分析器大体上可以分为三种类型:通用的、自顶向下的和自底向上的。
语法分析器的输入总是按照从左向右的方式被扫描,每次扫描一个符号。

自顶向下文法典型为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)不相交。
另一种方法就是构造出预测分析表。
LL(1)文法的表驱动分析过程:
- 预处理,包括消除左递归和提取左公因子
- 写出First集和Follow集
- 构造LL PPT(Predictive Par

本文详细介绍了LL(1)文法的判定、消除左递归和提取左公因子的过程,以及First集合和Follow集合的计算规则。通过构造预测分析表来驱动文法分析,以一个具体的例子展示了如何进行LL(1)文法的转换和分析,从而验证文法的LL(1)特性。
最低0.47元/天 解锁文章
2095

被折叠的 条评论
为什么被折叠?



