编译原理-第三章:语法分析-3

概述

上一节说到了自上而下分析法,这一节讲解自下而上分析法。
归约和推导
在之前我们提过规约和推导的概念(忘了的小伙伴自行去查看),自下而上的分析法就是”移进——规约”法。由输入的终结符一直推导到文法开始符号。
在这里插入图片描述
在这里插入图片描述

规范归约

概念定义

规范规约就是最右推导的逆过程(最左规约)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

LR分析法

在这里插入图片描述
在这里插入图片描述

类别
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

LR方法的基本思想
在这里插入图片描述
在这里插入图片描述

方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

LR(0)项目集族&LR(0)分析表的构造

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
先进行最右推导(逆过程规范归约)
在这里插入图片描述
由上到下,活前缀有:
在这里插入图片描述
当栈顶出现可归前缀即可归约
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可见:
在这里插入图片描述

LR分析表的构建
在这里插入图片描述
方法1
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
对于·A,如果输入是A,那么就很开心的变成A·。但如果输入时ε,那么就转到A的状态。(下面NFA中的1到3,1到11,4到9等)
在这里插入图片描述

点在最前面,是初态,最后面,是终态
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
方法2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
简单的说,就是,求A的项目,若A展开为· B,则B的项目·γ也加入。

在这里插入图片描述
在这里插入图片描述
即,对于I,输入a时能识别到的项目的闭包
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
就是说,能归约的先归约,归约后再分析。
在这里插入图片描述

则个定义我不是很能理解,我所理解是:对于当前要输入字符,判断是否能归约,如果能归约的话,对于任何字符,先归约,然后GOTO到下一个状态按照分析表移进或规约;如果不能,移进,到ACTION的下一个状态。

在这里插入图片描述
在这里插入图片描述

SLR分析表的构造

在这里插入图片描述
在这里插入图片描述
前提
在这里插入图片描述

理解起来,可以这样说,即将输入符号a,如果是下一个符号(即ai),就移进a,如果,a不是ai,但a属于Bi的FOLLOW集,意味着,a是Bi后面的符号,就将α规约成Bi,再接受输入符号。
在这里插入图片描述

在这里插入图片描述
得到DFA
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

规范LR(LR(1))分析表的构造

SLR分析表解决了归约归约冲突和部分移进-归约冲突。为了进一步解决移进-规约冲突,构造规范LR分析表。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在推导式的最后增加了一个只有在归约时才起作用的下一个搜索字符。表达的意思是,当下一个字符是a是才进行归约。
在这里插入图片描述
在这里插入图片描述

首先,对于非终结符,不需要移进或规约,执行GOTO。所以有{S‘→·S,#}(设为1式),有1可以得到{S→·BB,#}(设为2式)(因为在1式S后面没有字符,所以得到该式后也为空),由2得到,{B→·aB,a/b BB→·b,a/b}(在2式中,B后面还跟着B,即FIRST(B)=a/b)
在这里插入图片描述
规范LR分析表的构造算法
在这里插入图片描述
在这里插入图片描述
DFA
在这里插入图片描述
在这里插入图片描述

LALR分析表的构造

LR(1)分析表的问题:代价过高,有很多类似或者相同的项目集,比如:
在这里插入图片描述
图中的I3和I6基本一样。
在这里插入图片描述

LALR(1)分析表的基本思想
在这里插入图片描述

合并同心项目集之后得到新的DFA:
在这里插入图片描述
得到的LALR分析表如下图:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值