编译原理复习三:Bottom-Up LR(0)自动机构造 SLR(1)分析表与分析器的构造(附题目与答案 超详细)

简介: 编译原理复习三:Bottom-Up LR(0)自动机构造 SLR(1)分析表与分析器的构造(附题目与答案 超详细)

需要原卷和答案请点赞关注收藏后评论区留言私信~~~

自底向上分析概述:

方法描述

从输入串开始,逐步进行“归约”,直至归约到文法的开始符号。

自左向右逐个扫描输入串,一边把输入符号移入分析栈,一边检查位于栈顶的一串符号是否与某个产生式的右部相同

  • 如果相同,就把栈顶的这串符号归约为相应左部的非终结符。
  • 如果不同,则继续移入输入符号,再进行判断。

这一过程一直重复到输入串结束,栈内符号恰好为S即为接受。

利用栈,输入符号移进栈,当栈顶形成某个非终结符号P的候选式时,就将其归约为非终结符号P

由此,自底向上分析方法也称为“移进-归约”法

(移进,归约,移进,归约...)

归约过程中存在的问题

在第二步归约的时候分析栈的情况是

有两种归约的可能:

A→Ab和A→b

假如采用A→b

abbcde ⟸aAbcde⟸aAAcde ⟸aAAcBe ⟸?

需要选择一个最优的归约方法

2. 规范归约

  • 短语:

令G是一个文法,S是文法的开始符号,若αβδ是文法G的一个句型

如果有 �→∗α�δ ,且 �→+β ,则称β是相对于非终结符号A的,关于句型αβδ的短语。

如果其中存在 �→β ,则称β是句型αβδ关于非终结符号A的直接短语

  • 句柄:

一个句型的最左直接短语称为该句型的句柄。

  • 规范推导:

最右推导

  • 规范句型:

由规范推导所得的句型称为规范句型(右句型)

  • 规范归约:

关于句型α的一个最右推导的逆过程,也称为最左归约

移进-归约方法需要解决的关键问题:

A. 如何在右句型中找出可归约串(句柄)?

B. 在相同的右部有不止一个产生式时, 选哪一个?

①实现移进-归约分析的一个方便途径是用一个栈和一个输入缓冲区,用$表示栈底和输入的结束

一、LR(0)自动机构造

下面我们以实际题目为例,为下列的字符串构造 DFA

A → aAd | aAb | ε

移进归约不难理解,这个自动机也不难构造,此处有一点需要提醒,当·后的字符为非终结符时需要将以该非终结符为左部的产生式加入到该状态中

同样此处还要进行增广文法的构建,也是非常简单,只需要增加一个新的非终结符指向原开始符号A即可(这样使得文法只有一个接受状态)

答案如下

文法增广如下

自动机构造如下

例如此处状态I2中a的后面出现了非终结符A,因此要把以非终结符A为左部的产生式加入到该状态中

二、构造SLR(1)分析表

此处我们首先判断该文法是不是LR(0)文法,如果不是再判断是否为SLR(1)文法,接着构造SLR(1)分析表

由上图的I0 I2状态可知有移入/归约冲突,所以不为LR(0)文法,又因为输入符号之间的follow集之间没有交集,所以该文法为SLR(1)文法,下面构造SLR(1)分析表

其中action表中为输入终结符时的动作,包括移入或者归约,goto表中为输入非终结符时跳转到的状态

三、构造SLR(1)分析器

有了上面的结果和铺垫,构造SLR(1)分析器就简单很多了,注意状态和输入符号对应查表即可

创作不易 觉得有帮助请点赞关注收藏~~~

相关文章
|
5月前
|
网络安全
编译原理复习二:Top-Down分析LL(1)文法的判断与LL(1)分析表的构造(附题目与答案 超详细)
编译原理复习二:Top-Down分析LL(1)文法的判断与LL(1)分析表的构造(附题目与答案 超详细)
142 1
|
5月前
|
自然语言处理 算法 编译器
编译原理复习四:编译器结构 消除左递归、左公因子 最右推导 寻找句柄讲解(附题目和答案)
编译原理复习四:编译器结构 消除左递归、左公因子 最右推导 寻找句柄讲解(附题目和答案)
58 0
|
5月前
|
SQL 算法 vr&ar
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
☆打卡算法☆LeetCode 175. 组合两个表 算法解析
|
11月前
|
C++
C++ Primer Plus 第五章答案 循环和关系表达式
只有聪明人才能看见的摘要~( ̄▽ ̄~)~
46 0
|
11月前
|
算法 Java
数学建模常用算法:人工鱼群算法(AFAS)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制小鱼游动过程】
数学建模常用算法:人工鱼群算法(AFAS)求解二元函数最小值+限定x,y范围测试【java实现--详细注释+Matlab绘制小鱼游动过程】
115 0
|
机器学习/深度学习 算法 搜索推荐
【数据结构】时间复杂度(详细解释,例子分析,易错分析,图文并茂)
【数据结构】时间复杂度(详细解释,例子分析,易错分析,图文并茂)
210 0
|
算法
算法设计与分析/数据结构与算法实验4:添加括号数目问题
算法设计与分析/数据结构与算法实验4:添加括号数目问题
139 0
算法设计与分析/数据结构与算法实验4:添加括号数目问题
|
存储 Go C语言
编译原理,C语言实现LR(0)分析(扩展文法的生成、项目集规范簇的生成、ACTION GOTO表的生成、句子的分析)
注:代码生成的项目集规范簇、ACTION GOTO表的顺序可能和课本、教材、参考答案的顺序不同,但这并不影响分析过程的正确性,毕竟机器是按规律办事的😄
307 0
编译原理,C语言实现LR(0)分析(扩展文法的生成、项目集规范簇的生成、ACTION GOTO表的生成、句子的分析)
|
大数据 网络安全 数据安全/隐私保护
考点:枚举法解数学题,按照条件来限定枚举结果【Python习题11】
考点:枚举法解数学题,按照条件来限定枚举结果【Python习题11】
118 0
计算机程序的构造和解释 - 个人笔记(一)(下)
计算机程序的构造和解释 - 个人笔记(一)(下)
100 0