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

标题第五章 语法分析—自下而上的分析

【题型一】:

1 .给出一句型求最右推导
2. 求短语、直接短语、句柄
【题型二】:

  1. 拓广文法并编号
  2. 构造识别文法活前缀的DFA M
  3. 求非终结符的 FOLLOW集
  4. SLR(1)分析表
  5. 判断是否为SLR(1)文法

1.1归约的概念

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

1.2 规范归约

在这里插入图片描述
利用语法分析树找短语、直接短语和句柄
对于短语、直接短语、句柄的寻找,可以检查语 法树中从根结点开始出发向下,找每一非终结符 的所有叶子结点,将这些结点从左到右组成串, 这些串就是该句型的所有短语,其中相对于叶子 结点的直接父结点的短语直接短语,在树中最左的直接短语为该句型的句柄

§所有短语找全,要从上往下每一层都找叶子结点
§ 直接短语肯定是某个产生式的右部候选式之一
§ 句柄的“最左”特征使得在移进-归约方法中,它 始终处于符号栈的栈顶。

【例】
在这里插入图片描述
接下来对于题型二,先看LR分析法,再看SLR文法

2.LR分析法

在这里插入图片描述

LR分析器的逻辑结构及工作过程

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

分析过程中三元式的工作过程

在这里插入图片描述
规范句型(右句型)的“活前缀”
一个句型的一个前缀,若不含句柄之后的任何符号 ,则称它为该规范句型的一个活前缀。
分析过程的每一步骤,栈里的文法符号串加上剩余输入符号串恰好是一个规范句型。 而且栈里的文法符号串正好是这个句型的一个活前缀。因此LR分析首先将构造识别文 法G的所有活前缀的有限自动机,然后将这种自动机转换为LR分析表。

LR(0)项目

在这里插入图片描述

LR(0)项目集规范族的构造

在这里插入图片描述
【例】
在这里插入图片描述
凡是圆点在最右端的项目,称为一个“归约项目”。
对于文法开始符号的归约项目称为“接受”项目;
形如A→α·aβ的项目,称为“移进”项目;
形如A→α·Bβ的项目称为“待约”项目。(期待从余留的输入 符号中进行归约得到B,所以称为待约项目)

DFA工作过程中,从初态出发,沿着有向边指示的方向前进, 可以使DFA在所经历的任何状态上中止它的工作(每一状态都是 终态),当DFA到达某一状态时,把从初态I0出发到达该状态所 经过的全部有向边上的标记符依次连接起来就得到了DFA在到达 该状态时所识别出的某规范句型的一个活前缀。特别是当M到达 那些只含归约的项目集,表明活前缀中已含有相应句柄的全部符 号(句柄已经在栈顶形成),因此将这些状态称为句柄识别态。
在这里插入图片描述
就不做介绍了,不重要

LR(0)分析表的构造

LR(0)文法:假设一个文法G的拓广文法G′的活前缀识别自动机 中的每个状态(项目集)不存在下述情况:
(1)既含移进项目又含归约项目;
(2)或者含有多个归约项目,则称G是一个LR(0)文法。
在这里插入图片描述
在这里插入图片描述
结论:对于拓广文法G′的每一个活前缀,识别它的有效 项目集恰好是从它的识别活前缀的DFA的初态出发经 过道路所到达的那个状态所代表的项目集。事实上, 在任何时候分析栈中的活前缀X1X2…Xm的有效项目集 恰恰是栈顶状态Sm所代表的那个集合。这也表示栈顶 状态体现了栈里一切有用的信息。
对同一个活前缀存在若干不同的项目对它是有效的, 而且它告诉我们应做的事情可能各不相同,互相冲突。 这种冲突通过向前看几个输入符号或许能够解决。

SLR分析表的构造

项目集中的冲突问题

在这里插入图片描述
解决的办法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

SLR(1)分析表的构造

在这里插入图片描述

  1. 拓广文法并编号
    注意 加 S’->S
  2. 构造识别文法活前缀的DFA M
    注意 X→α·Aβ,A为非终结符,A→·γ状态填入状态
  3. 求非终结符的 FOLLOW集
    注意 确定A的FOLLOW集写完再加 }
  4. SLR(1)分析表
    注意 sj的j是第j个状态,rj的j是第j个文法
  5. 判断是否为SLR(1)文法
    有冲突,不是SLR(1)文法;没有冲突,是SLR(1)文法

例 题!!!!!!语法分析—自下而上的分析

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值