编译原理——自下而上语法分析

在这里插入图片描述
在这里插入图片描述
自下而上的分析过程核心就是 : 识别可归约串(也就是当栈顶有好几种规约方式时我是选择哪一个式子进行规约)

短语与直接短语

在这里插入图片描述
短语就是这几个叶节点向上增长后会生长到同一个节点,那么这几个叶节点就构成一个短语

在这里插入图片描述
在这里插入图片描述
一个句型的最左直接短语称为该句型的句柄
规范规约:每次都规约句柄的规约(也叫最左规约)

最右推导称为规范推导,由规范推导得到的句型称为规范句型

如果文法G是无二义的,那么规范推导的逆过程必是规范规约

自下而上语法分析过程

在这里插入图片描述

算符优先分析

算符优先分析未必是严格的最左规约,也就是说算符优先分析不是一种规范规约
在这里插入图片描述
在这里插入图片描述

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

FIRSTVT集合与LASTVT集合

在这里插入图片描述

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

素短语

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

算符优先分析算法

在这里插入图片描述
在这里插入图片描述
对于文法的句子来说,算符优先分析的结果不一定就是语法树
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
因为算符优先分析并不是要求非终结符一一对应的,所以说可能识别一些错误的句子

LR分析法

句柄

在这里插入图片描述

规范规约

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
αi 意思是 每一步规约得到的那个句子

规范规约得到的结果就是语法树,而算法优先分析得到的结果不一定是语法树,算符优先算法不属于规范规约

规范规约过程中得到的每一个句型都是规范句型

LR分析

在这里插入图片描述
那么规范规约关键的问题就是寻找句柄,所以LR分析器需要具备这样的功能:判断分析栈栈顶的是不是句柄,如果是句柄就把句柄弹出然后压入新规约的东西进去,那么LR分析器又是如何判断栈顶的是不是句柄那?这主要是依赖于历史,展望,现实这三个部分
在这里插入图片描述
在这里插入图片描述
goto表是在把规约后的非终结符压入栈中查他的状态时用的
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们用一个三元组的形式来描述LR分析的过程
在这里插入图片描述

LR文法

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

LR分析表的构造

活前缀与构造识别活前缀DFA

在这里插入图片描述
之所以叫做活前缀,是因为对每个活前缀再给其右边添加上几个符号就可以形成一个规范句型进行规约
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
A -> X . YZ 表示在A的识别过程中,已经识别了X了,下面我们期待识别Y和Z
. 左边的是我们已经看到形成的 . 右边的是我们期待形成的

. 在候选式最右边的项目 叫做 归约项目 ,代表我们整个候选式已经分析识别了
S’ -> α (拓广后的文法符号 S’ 的这个唯一的项目叫做接受项目,表示整个串接受分析完毕)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下图红框框,框起来的集合都是一个项目集,这些项目集构成了项目集规范族
在这里插入图片描述
LR分析表的作用就是指导LR分析过程始终满足这个DFA的要求,始终保持栈里面是活前缀

通过计算项目集规范族构造识别活前缀的DFA

在这里插入图片描述
对于上图,比如说 从状态0 出发 识别了个b 又识别了个c , 那么状态5里面的这三个项目就是对于活前缀 bc 是有效的

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

构造LR(0)分析表

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

SLR(1)分析法

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

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到上图只有第二步有区别, SLR多展望了一个字母
在这里插入图片描述

LR(1)分析

在这里插入图片描述
在这里插入图片描述
那个 A -> α . β 是 LR0项目,然后再加上 a1a2…ak 这些终结符构成的串
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

新城里的旧少年^_^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值