【图文】第07章、LR分析法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
第07章、LR分析法
上传于||暂无简介
大小:485.21KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢【图文】第7章 LR 分析法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
第7章 LR 分析法
上传于||文档简介
&&LR分析
大小:1.39MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢第四章 语法分析 -> 4-3、LR分析法
章节选择:
第四章 语法分析
本章重点和内容
4-1、自顶向下的语法分析
4-2、自底向上优先分析法
4-3、LR分析法
4-3、LR分析法
一、LR分析概述:
- LR(k)分析技术
& * L 指自左至右扫描输入符号串
& * R 指构造一个最右推导的逆过程(最左归约)
& * k 指在作出分析决定前要向前看的输入符号个数,通常为1
& * LR 分析技术是功能最强的(自底向上)语法分析技术,适用文法广,效率高,分析能力强
- LR分析器的逻辑结构:P160 图4.19
& * LR驱动程序——固定不变的
& * 分析表——动作表(action)、状态转移表(goto)
& * 栈——状态符号、文法符号
& * 输入缓冲
&* 输出——产生式序列
- LR分析算法:P162
&* LR分析的关键问题是如何构造分析表,不同的构造方法形成不同的分析方法,主要介绍LR(0)、SLR、LR(1)、LALR
文法(4.18)
分析句子:abbcde
二、LR(0)分析:
- 分析过程中
&&& * 栈中的文法符号串并上剩余的输入串构成一个右句型(规范句型)
& * 当该右句型的句柄出现在栈顶时,归约,否则,移进
& * 栈中的文法符号串是当前句型的前缀,该前缀不包含句型句柄后面的符号,称之为活前缀
&&&&* 活前缀:P145
&& * 可归前缀:包含完整句柄的活前缀
& * 分析过程可以看作是识别文法规范句型活前缀的过程。只要每一时刻栈中的文法符号串是某规范句型的活前缀,则说明已分析的部分是正确的
& * 一个文法的规范句型的所有活前缀构成一个语言,而且是正规语言,可以用一个 DFA 来识别
&& * 如何构造 DFA ?下面详细介绍,先看一个例子,针对上面的例子的 DFA 。
& * 每个状态都是活前缀的识别态,双圈状态是句柄识别态,标识了*的状态是句子识别态
& * 分析过程可以看作在上面这个 DFA 上运行的过程(以上例为例,详细说明运行过程)
- 构造识别活前缀的DFA&
& * 拓广文法:增加产生式 S’→S,S’作为新的开始符号
&& ◇ 文法等价
&& ◇ 确保文法的开始符号只在产生式的左部出现
&& ◇ 为了在分析过程中区别是归约到了文法的最初开始符号还是产生式右边出现的开始符号
& * LR(0)项目
&& ◇&在文法产生式右部的适当位置添加圆点构成项目
&& ◇&项目的含义:圆点的左部表示分析过程中的某时刻用该产生式归约时句柄已识别过的部分,圆点右部表示待识别部分
&& ◇&移进项目:A →α.aβ
&& ◇&待约项目:A →α.Bβ
&& ◇&归约项目: A →α.
&& ◇&接受项目: S’ →S.
& * 有效项目:P164
& *& 有效项目集:P165
& *& LR(0)的项目集规范族:P165
& *& LR(0)项目集合的闭包,closure(I):P165
& *& LR(0)项目集合的转移函数,go(I,X):P165
& *& 构造LR(0)项目集规范族:算法—P170 图4.22
& *& 构造识别文法所有活前缀的DFA:P165-166
&&& ◇ 若 I 是活前缀γ的有效项目集,go(I,X)便是γX的有效项目集
&&& ◇ 初态是活前缀 ε 的有效项目集
&&& ◇ 活前缀γ的有效项目集是从初态出发经过γ道路所到达的那个状态所代表的项目集
&&& ◇ 分析过程中分析栈中的活前缀的有效项目集是栈顶状态 Sm 所代表的那个集合,因此栈顶状态体现了栈里一切有用的信息
&&* 例子:P166
例:4.17 —— P169 图4.21&
- 项目集合中的冲突
& *&移进-归约冲突
&&&&& 项目集合中同时含有形如 A→α.aβ和 B→γ. 的项目
& *&归约-归约冲突
&&&&& 项目集合中同时含有形如 A→α. 和 B→ β. 的项目
- 如果文法 G 的 LR(0)项目集规范族中不含有移进-归约冲突和归约-归约冲突,则称文法 G 为 LR(0)文法
- 构造 LR(0)分析表:&
& *&若GO(Ik,a)=Ij,则ACTION(k,a)= Sj
& *&若GO(Ik,A)=Ij,则GOTO(k,A)= j
& *&若 Ik 包含 S’→S.,则ACTION(k,$)= acc
& *&若 Ik 包含 A→α.,则ACTION(k,a)= rj,a为任何终结符号或$,j为产生式 A→α的编号
& *&例子: P166
例:4.17— P169 图4.21— LR(0)分析表
&& 分析一个句子:accd$
三、SLR分析:
- 对于 LR(0)项目集规范族中有冲突的项目集合,有的可以通过向前看一个符号(考察当前正在扫描的符号)来解决冲突
& * 当存在冲突时才向前看一个符号,因此是一种简单的LR(1)分析方法,称为 SLR 分析
- 解决方法:
& * 假设一个LR(0)项目集规范族中有如下项目集合:
&&& {X → α.bβ,A → γ.,B → δ.}
&&& 即存在移进-归约冲突和归约-归约冲突
& * 如果FOLLOW(A)∩ FOLLOW(B)∩ {b} =ф,则可以如下来解决冲突&
&& (假设当前符号是 a ):
&&& 1、若 a = b,则移进
&&& 2、若 a∈ FOLLOW(A),则用产生式 A → γ归约
&&& 3、若 a∈ FOLLOW(B),则用产生式 B → δ归约
&&& 4、否则,报错
- 如果文法 G 的 LR(0)项目集规范族中的移进-归约冲突和归约-归约冲突可以用上述方法解决,则称文法 G 为 SLR(1)文法
- SLR分析表构造:P171 算法 4.7
& * 注意:2.(b)
& * 无论有无冲突,都对归约项目考察其 FOLLOW 集合
- 例子:P172-176
例4.18&&&&&&
- 对于更一般的 LR 分析(LR(1)、LALR),略去不讲
&&& * 更一般的自底向上分析法是LR分析法
- 优先函数(见
P154-156)
杭州电子科技大学编译原理课程组 版权所有 & 2007 All right reserved&&国之画&&&& &&&&&&
&& &&&&&&&&&&&&&&&&&&&&
鲁ICP备号-4
打开技术之扣,分享程序人生!【图文】《编译原理课程教案》第4章:(3)LR分析方法_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
《编译原理课程教案》第4章:(3)LR分析方法
上传于||暂无简介
大小:3.38MB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢