收藏 分享(赏)

第五章 LR(0)方法.ppt

上传人:tkhy51908 文档编号:8011234 上传时间:2019-06-04 格式:PPT 页数:39 大小:1.50MB
下载 相关 举报
第五章 LR(0)方法.ppt_第1页
第1页 / 共39页
第五章 LR(0)方法.ppt_第2页
第2页 / 共39页
第五章 LR(0)方法.ppt_第3页
第3页 / 共39页
第五章 LR(0)方法.ppt_第4页
第4页 / 共39页
第五章 LR(0)方法.ppt_第5页
第5页 / 共39页
点击查看更多>>
资源描述

1、第五章 自底向上的语法分析,5.1 自底向上的语法分析方法概述 5.2 LR(0)分析的有限自动机 5.3 LR(0) 分析 5.4 SLR(1) 分析 5.5 LR(1) 分析 5.6 LALR(1) 分析 5.7 LALR(1) 语法分析器的自动生成器 (YACC),内容回顾,自底向上的分析过程 LR分析机制 LR分析的关键问题,自底向上语法分析的例子,P: Z ABb (2) A a (3) A b (4) B b (5) B c (6) B bB,a b c b,输入,符号栈,动作,abcb,移入,a,bcb,归约(2),A,bcb,移入,Ab,cb,移入,Abc,b,归约(5),Ab

2、B,b,归约(6),AB,b,移入,归约(1),ABb,Z,成功,自底向上分析过程是从所给输入串出发,对其进行最左归约的过程。,LR 分析机制,分析栈,输入,#,a,LR驱动程序:- shift(移入) :移入型规范活前缀- reduce(归约):可归约规范活前缀,LR分析表,规范活前缀,LR分析的关键问题,如何判定规范活前缀? 如何判定移入型规范活前缀? 如何判定归约规范活前缀以及用哪一个产生式归约? 如何判定分析结束?,LR(k)自动机可以解决这些问题!,5.2 LR(0)分析的有限自动机,构造LR(0)自动机的依据 - 派生定理 应用派生定理的例子 LR(0)自动机 LR(0) item

3、 (项) LR(0) automata 构造LR(0)自动机的过程,构造LR(0)自动机的依据 - 派生定理,派生定理: 给出了对任意一个CFG构造归约规范活前缀的方法 1* 把CFG扩展为增广文法 , Z S; 2 文法开始符Z或S是归约规范活前缀; 3 如果A是一个归约规范活前缀, 且有产生式A,那么, 也是一个归约规范活前缀; (, 和是由终极符和非终极符构成的符号串,也可以是空串) 4 任何一个归约规范活前缀都是按照3方式派生出来的;,(证明略),派生定理应用例1,1 S 2 S和S aAc产生aAc 3 aAc和A Abb产生aAbb 4 aAc和A b产生ab 5 aAbb和A A

4、bb产生aAbb 6 aAbb和A b产生ab 7最后,合起来得到S, aAc, aAbb, ab,VT = a, b, c VN = S, A S = S P: S aAcA AbbA b ,派生定理应用例2,1 S 2 S和S aAc产生aAc 3 aAc和A ABb产生aABb 4 aAc和A a产生aa 5 aABb和B bB产生aAbB 6 aABb和B b产生aAb 7 aAbB和B bB产生aAbbB 8 aAbB和B b产生aAbb ,VT = a, b, c VN = S, A, B S = S P: S aAcA ABbA aB bBB b ,LR(0)自动机,LR(0)

5、项目:带圆点的产生式,圆点只能出现在产生式的右部符号串的任意位置; 产生式SaAc, LR(0)项目: S aAc S a Ac S a A c S a Ac 特别地,空产生式: S , 对应LR(0)项目S ,LR(0)自动机,LR(0)项目集合IS关于符合X的投影 IS 是一个LR(0)项目的集合; X 是一个符号(终极符或非终极符); IS(X)表示项目集IS关于符号X的投影: IS(X) = S X | S X IS, X VT VN IS(x)只对IS中圆点后面是X的项目起作用,所起的作用就是将圆点从X的前面移到X的后面,IS = A ABb, B a, B bB , Z cB X

6、= B IS(B) = A ABb, B bB,LR(0)自动机,LR(0)项目集合的闭包 IS 是 LR(0)项目的集合; CLOSURE(IS)也是一个LR(0)项目集合, 按照下面的步骤计算: 1 初始, CLOSURE(IS) = IS 2 对于CLOSURE(IS)中没有处理的LR(0)项目,如果该项目的圆点后面是一个非终极符A, 而且A的全部产生式是A1, , An则增加如下LR(0)项目到CLOSURE(IS)A 1, , A n3 重复2直到 CLOSURE(IS)收敛;,LR(0)自动机,VT = a, b, c VN = S, A, B S = S P: S aAcA AB

7、bA BaB b ,IS = S aAc CLOSURE(IS) = S aAc,IS = S aAc CLOSURE(IS) = S aAc, A ABb, A Ba,B b,LR(0)自动机,goto函数 IS 是 LR(0)项目集合; X 是一个符号(VT or VN终极符或非终极符); goto(IS, X) = CLOSURE(IS(x),LR(0)自动机,CFG G=VT, VN, S, P 的LR(0)自动机 (,SS,S0,TS, ) 是否需要 增广产生式 Z S ? = VT VN# S0 = CLOSURE(Z S) SS TS ,构造 LR(0)自动机的过程中逐步生成的。

8、,构造LR(0)自动机的过程,1增广产生式 Z S 2 = VT VN # 3S0 = CLOSURE(Z S) 4SS = S0 5对于SS中的每一个项目IS, 和每个符号X ,计算IS = goto(IS, X), 如果IS不为空, 则 建立 IS IS,如果IS不为空且IS不属于SS,则把IS加入SS; 6重复5直到SS收敛; 7终止状态:包含形如A 项目的项目集合;,X,构造LR(0)自动机的过程,VT = a, b, c VN = S, A, B S = S P: S aAcA ABbA BaB b ,Z S,S aAc,Z S,S,a,S aAc,A ABb A Ba,B b,A,

9、S aAcA ABb,B b,b,B,A Ba,a,A Ba ,B b ,S aAc,c,B,A ABb,b,A ABb,b,0,*,*,*,*,*,构造LR自动机的过程,VT = a, b, c VN = S, A, B S = S P: S aAcA ABbA BaB ,Z S,S aAc,Z S,S,a,S aAc,A ABb A Ba,B ,A,S aAcA ABb,B ,B,A Bb,b,A Bb ,S aAc,c,B,A ABb,A ABb,b,0,*,*,*,*,*,*,1 S 2 S和S aAc产生aAc 3 aAc和A Abb产生aAbb 4 aAc和A b产生ab 5 aA

10、bb和A Abb产生aAbb 6 aAbb和A b产生ab 7最后,合起来得到S, aAc, aAbb, ab,VT = a, b, c VN = S, A S = S P: S aAcA AbbA b ,VT = a, b, c VN = S, A S = S P: S aAcA AbbA b ,Z SS aAc,S,Z S,a,S aAcA AbbA b,A,S aAc A Abb,b,A b,c,S aAc,b,A Abb,b,A Abb,LR(0)自动机接受的语言恰好是归约规范活前缀的集合:S,aAc,aAbb,ab,VT = a, b, c VN = S, A, B S = S P:

11、 S aAcA ABbA aB bBB b ,1 S 2 S和S aAc产生aAc 3 aAc和A ABb产生aABb 4 aAc和A a产生aa 5 aABb和B bB产生aAbB 6 aABb和B b产生aAb 7 aAbB和B bB产生aAbbB 8 aAbB和B b产生aAbb , S, aAc, aa,aABb,aAb+B, aAb+ ,VT = a, b, c VN = S, A, B S = S P: S aAcA ABbA aB bBB b ,Z SS aAc,S,Z S,a,S aAcA ABbA a,A,S aAc A ABb B bB B b,a,A a,c,S aAc,

12、b,B bB B b B bB B b,B,B bB,B,A ABb,b,A ABb,b,结论: 一个CFG的LR(0)自动机接受的是该CFG的所有LR0归约规范活前缀;,第五章 自底向上的语法分析,5.1 自底向上的语法分析方法概述 5.2 LR(0)分析的有限自动机 5.3 LR(0) 分析 5.4 SLR(1) 分析 5.5 LR(1) 分析 5.6 LALR(1) 分析 5.7 LALR(1) 语法分析器的自动生成器 (YACC),5.3 LR(0) 分析,LR(0) 自动机的相关概念 LR(0) 文法 LR(0) 语法分析方法 LR(0) 分析表 LR(0) 分析的驱动程序 LR(0

13、) 分析过程,LR(0) 自动机的相关概念,移入项目: A a, aVT 归约项目: A , 接受项目: Z S, (Z S是增广产生式) 移入状态:包含移入项目的状态 归约状态:包含归约项目的状态 冲突状态(同一个状态中): 包含不同的归约项目,则称该状态存在归约-归约冲突 ; 既包含移入项目,又包含归约项目,则称该状态存在移入-归约冲突,LR(0) 文法,给定一个上下文无关文法 G LR0 是G的LR(0)自动机 如果LR0的任意一个状态都不存在冲突(归约-归约冲突、移入-归约冲突), 则G称为LR(0)文法; 可以推知:在LR(0)文法中, 任意状态或者是移入状态,或者是归约状态 如果是

14、归约状态,一定存在一个唯一的归约项目,该归约项目对应一个产生式p,因此, 该归约状态称为p-归约状态,LR(0) 分析方法,Stack,Input,#,a,LR驱动程序:- shift(移入) : 移入型规范活前缀- reduce(归约): 归约规范活前缀,LR分析表,规范活前缀,状态栈,action表,goto表,LR(0)驱动程序,LR(0) 文法,VT = a, b, c VN = S, A, B S = S P: (1) S aAc(2)A ABb(3)A Ba(4)B b ,Z S,S aAc,Z S,S,a,S aAc,A ABb A Ba,B b,A,S aAcA ABb,B b

15、,b,B,A Ba,a,A Ba ,B b,S aAc,c,B,A ABb,b,A ABb,b,0,1,2,3,5,6,7,8,9,4,LR(0)分析的例子,P:(0) Z S (1) S aAc(2)A ABb(3)A Ba(4)B b,a b a c,LR(0)分析的例子,P:(0) Z S (1) S aAc(2)A ABb(3)A Ba(4)B b,a b a c,LR(0) 分析表,action表goto表,LR(0) 分析表,action表,action(Si,a) = Sj, 如果Si到Sj有a输出边action(Si,c) = Rp, 如果Si是p-归约状态,cVt #acti

16、on(Si,#) = accept, 如果Si是接受状态action(Si,a) = error, 其他情形,LR(0) 分析表,goto表,goto (Si, A) = Sj, 如果Si到Sj有A输出边goto (Si, A) = error,如果Si没有A输出边,LR(0)分析表的例子,VT = a, b, c VN = S, A, B S = S P: (1) S aAc(2)A ABb(3)A Ba(4)B b ,Z S,S aAc,Z S,S,a,S aAc,A ABb A Ba,B b,A,S aAcA ABb,B b,b,B,A Ba,a,A Ba ,B b,S aAc,c,B,

17、A ABb,b,A ABb,b,0,1,2,3,5,6,7,8,9,4,LR(0) 分析驱动程序,符号约定: S0: 开始状态 Stack:状态栈 Stack(top):栈顶元素 P:产生式 | P |:产生式P右部符号个数; PA:产生式P左部非终极符; Push(S):把状态S压入stack; Pop(n):从stack弹出n个栈顶元素;,LR(0) 分析驱动程序,初始化: push(S0); a = readOne(); L: Switch action(stack(top), a) Case error: error(); Case accept: return true; Case Si: push(Si), a=readOne(); goto L; Case RP: pop(|P|); push(goto(stack(top), PA );goto L;,LR(0) 分析过程,P:(0) Z S (1) S aAc(2)A ABb(3)A Ba(4)B b,a b a c,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报