【编译原理复习】第四章 ---语法分析—自上而下

语法分析—自上而下

解决一道文法题的一般步骤

  1. 构造LL(1)文法
  2. 文法符号的FIRST集 合和FOLLOW集合
  3. 画预测分析表

1.LL(1)分析法

为构造不带回溯的自上而下的分析算法,首先必须消除文法的左递归性,并找出克服回溯的充要条件

1.1左递归的消除

【编译原理复习】第四章 ---语法分析—自上而下_第1张图片

1.1.2左递归的消除推广

【编译原理复习】第四章 ---语法分析—自上而下_第2张图片
这种方法只能消除直接左递归,不能消除整个文法的左递归。
比如:文法S→Qc|c Q→Rb|b R→Sa|a 没有直接左递归,但是整个文法有左递归

消除文法左递归的算法:(要求文法没有环路A⇒…⇒A和ε产生式)
【编译原理复习】第四章 ---语法分析—自上而下_第3张图片
【例子】:文法S→Qc|c Q→Rb|b R→Sa|a
(1) 排序 R、Q、S
(2) R不存在直接左递归
(3) 看Q,Q→Rb|b 有 Q→Sab|ab|b则Q也不含直接左递归
(4) 看S,S→Qc|c有 S→Sabc|abc|bc|c
S→abcS′|bc S′|cS′
S′→abc S′|ε
可以看出其中的Q和R都是多余的。

1.2消除回溯、提取左因子

消除回溯必须保证:对文法的任何非终结符,当要它去匹配输入串时,能够根据它面临的输入符号准确地指派它的一个候选产生式去执行任务,并且此候选产生式的 工作是确信无疑的。也就是对于非终结符A有产生式: A→α1|α2|…|αn,当A面临输入符号a时,如果能够指定 相应的αi去执行任务,则肯定无须回溯。

1.2.1候选式的终结首符集FIRST(α)

【编译原理复习】第四章 ---语法分析—自上而下_第4张图片
【编译原理复习】第四章 ---语法分析—自上而下_第5张图片
【编译原理复习】第四章 ---语法分析—自上而下_第6张图片

1.2.2 提取公共左因子

如何把一个文法改造成任何非终结符的所有候选首符集 两两不相交?提取公共左因子(最长公共前缀):
【编译原理复习】第四章 ---语法分析—自上而下_第7张图片
【编译原理复习】第四章 ---语法分析—自上而下_第8张图片
【编译原理复习】第四章 ---语法分析—自上而下_第9张图片

1.2.3 非终结符的FOLLOW集概念及算法

【编译原理复习】第四章 ---语法分析—自上而下_第10张图片
算法:
(1)对于文法的开始符号S,置# 于 FOLLOW(S)中;
(2)若A→αВβ是一个产生式,则把 FIRST(β) \ {ε} 加至 FOLLOW(B)中;
(3)若A→αВ是一个产生式,或A→αВβ是一个产生式, 且β⇒ε,(即ε∈FIRST(β)),则把 FOLLOW(A) 加至 FOLLOW(B)中。(说明:因为在推导过程中如果出现 ∙∙∙A∙∙∙,如果采用A→αВ进行推导,则句型变成∙∙∙αВ∙∙∙, 所以有上述结论)。

【注意】:FOLLOW集是产生式右边起作用,也就是说, 对于某非终结符的FOLLOW集,影响它的只是产生式 右边包含该非终结符的产生式。另外:FOLLOW集中 肯定不会出现ε。

1.3 判断LL(1)文法【LL(1)文法的定义】

【编译原理复习】第四章 ---语法分析—自上而下_第11张图片
(2)(3)两条也说明在预测分析表中,不会发生冲突,不会有二义性

2.FIRST集 合和FOLLOW集合例题

【编译原理复习】第四章 ---语法分析—自上而下_第12张图片

3.预测分析表的概念和构成

预测分析:自顶向下分析是从文法的开始符号出发, 试图构造一个最左推导,从左到右匹配输入的单词符 号串。如果在每步推导中,面对被替代的非终结符A和 当前从左到右读入输入串读到的单词符号a,如果A的 产生式候选式αi的终结首符集包括a,则我们就可以用 产生式A→αi构造最左推导,即用αi代替A。

预测分析表的概念: 预测分析表是一个M[A,a]形式的矩阵,其中A为非终 结符,a是终结符或‘#’(#作为输入串的结束符)。矩 阵元素M[A,a]中存放着一条关于A的产生式,指出当A 面临输入符号a时所应采用的候选式。M[A,a]中也可能 存放一个“出错标志”,指出A根本不该面临输入符号a。
【编译原理复习】第四章 ---语法分析—自上而下_第13张图片
【例题】
【编译原理复习】第四章 ---语法分析—自上而下_第14张图片

语法分析 - 自上而下 例题

你可能感兴趣的:(编译原理,编译原理,语法分析)