LR文法整理【LR文法的概念、LR(0)、SLR、LR(1)、LALR】(上)

5 篇文章 5 订阅
订阅专栏
本文深入探讨LR(0)和SLR分析法,解析它们在编译原理中的应用。LR(0)分析法通过项目集闭包构造分析表,而SLR分析法在LR(0)基础上,利用FOLLOW集解决冲突。尽管SLR分析法尝试避免冲突,但并非所有SLR文法都能完全消除冲突。内容包括LR(0)自动机、SLR分析表构造及冲突消解策略。
摘要由CSDN通过智能技术生成

概念和使用

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Bpn7EL2g-1655442841392)(C:\Users\86135\AppData\Roaming\Typora\typora-user-images\1653139367076.png)]

为了准确识别句柄,因此需要向前擦好看k个输入符号的LR分析。

LR(0)分析法

LR(0)项目

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Q7GassE8-1655442866545)(C:\Users\86135\AppData\Roaming\Typora\typora-user-images\1653144489078.png)]

增广文法

引入这个新的开始产生式的目的是使得文法开始符号仅出现在一个产生式的左边,从而使得分析器只有一个接受状态。
在这里插入图片描述
当一个项目圆点后面是一个非终结符的时候,是存在等价项目的。

把等价的项目组成一个项目集合,成为项目集闭包,每个项目集闭包对应自动机的一个状态
在这里插入图片描述

LR(0)自动机

下图中,每个方框内的项目都是等价的。
在这里插入图片描述
当得到的一组项目都是归约项目时,这时说明流程结束,可以根据自动机转换得到分析表。

在分析表中,如果某个状态是归约状态,则根据对应的产生式做出归约动作。

LR(0)分析表的问题

移进/归约冲突
在这里插入图片描述
从转换好的分析表中可以直接看出冲突
在这里插入图片描述

归约/归约冲突
在这里插入图片描述
如果LR(0)分析表中没有语法分析动作冲突,那么给定的文法则称为是LR(0)文法。

定义回顾:

CFG:上下文无关文法

消解冲突:可以通过SLR分析法、LR(1)分析法解决这类冲突问题。

SLR分析法

基本思想

本质上,其实就是LR(0)分析法的延申,对于归约动作做出了相关的约束。下面是SLR分析法的基本思想,但也是十分的难懂,所以可以直接看后面的示例进行理解。
在这里插入图片描述

示例解析

还是通过之前冲突示例进行分析,首先需要把所有的FOLLOW集列出来。
在这里插入图片描述
对于I2,可以看到存在移进/归约冲突。根据SLR的基本思想,下一个输入符号为 * ,假设我们进行归约,查看FOLLOW(E)的集合,不存在即将输入的符号 * ,因此应该采用移入的操作。I9中的分析同理,也可以知道应该采用移入的操作。因此得到的SLR分析表如下图所示。

SLR分析法核心要点:对于有冲突项目的状态(移进-规约冲突和归约-归约冲突)判断将要移入的符号是否在该产生式左部的FOLLOW集中,如果在则采取归约动作,否则采取移进动作。

在这里插入图片描述

可以通过下面这个例子,加深理解。

从图中可以看到,根据Follow(B)可以推出d采用归约动作,产生式为(4);

根据Follow(T)可以推出$,b采用归约动作,产生式为(2);

a不再任何一个FOLLOW集中,采用移入动作。
在这里插入图片描述

SLR分析表构造算法

在这里插入图片描述

构造算法表述十分严谨,但是一般不好理解。

SLR分析法,只对在Follow集中的输入符号采取归约动作,通过Follow确定能否归约。而LR(0)并没有考虑上下文环境,不需要Follow集的帮助。

注意:s是移入,r是归约,不要混淆。

在这里插入图片描述

SLR分析表中不存在冲突动作,不代表SLR分析法不存在冲突问题。

SLR分析法的问题

I2中,既可以采用移入动作,把 = 移入栈中,又满足 = 在Follow®中,可以采取归约动作,因此对于 = 号的输入,存在移入/归约冲突。由此可见,只是简单的根据Follow集中的信息进行冲突消解,并不能完全的解决冲突问题。

通过Follow集进行判断,SLR文法并不能确保冲突的完全消解,归约-归约冲突和移进-归约冲突都可能存在。

用 follow集来处理即出现移进-归约冲突的两条产生式,如果其 follow集相交为空则为 SLR文法,反之不是。当然,如果以上两种冲突都不存在自然是了。

在这里插入图片描述

示例补充

在这里插入图片描述
FOLLOW集
在这里插入图片描述
SLR分析表(自行推导)
在这里插入图片描述根据下面的输入,分析每一步的动作。
在这里插入图片描述

LL(1),LR(0),SLR(1),LR(1),LALR(1)的 联系与区别
baidu136973的博客
11-05 3113
一:LR(0),SLR(1),规范LR(1),LALR(1)的关系 首先LL(1)分析法是自上而下的分析法。LR(0),LR(1),SLR(1),LALR(1)是自下而上的分析法。自上而下:从开始符号出发,根据产生式规则推导给定的句子。用的是推导自下而上:从给定的句子规约到文法的开始符号。用的是归约 1:...
LR(0)文法
03-23
通过构造文法的有限自动机(DFA),得出LR(0)分析表和分析程序,并且能够判别字符串是否属于当前文法,内含C++源代码和实验报告说明
LR(0)文法分析(通过例题穿插讲解)
热门推荐
weixin_57165154的博客
05-01 1万+
LR(0)文法分析,加上一个简单的例子来进行分析,每一步过程都有的,非常详细。
LR(0)、SLR(1)、LR(1)和LALR(1)四类文法的相互关系
qq_41870170的博客
03-12 2615
LR(0)、SLR(1)、LR(1)和LALR(1)四类文法的相互关系 一个LR(0)LR(0)LR(0)文法肯定是SLR(1)SLR(1)SLR(1)文法;一个SLR(1)SLR(1)SLR(1)文法一定是LALR(1)LALR(1)LALR(1)文法; 而一个LALR(1)LALR(1)LALR(1)文法一定是LR(1)LR(1)LR(1)文法。 反之,不成立。 ...
编译原理【词法分析】—LR(0)、SLR(1)、LR(1)、LALR(1)文法之间的关系
我们都是被分成两半的人,一边热爱生活,一边憎恨生活。面对生活,我们总是在矛盾的两端摇摆,在反复的矛盾和犹豫中,一边踉跄前行,一边重振旗鼓。我渴望改变,渴望变得更好,渴望找到出口……就像一个溺水人的挣扎,就像一个救生圈。我是一个矛盾集合体,想要变得快乐,但是
10-22 4497
SLR(1)、LR(1)、LALR(1)文法之间的关系,什么是LL(1)、LR(0)、LR(1)文法,什么是句柄、什么是自上而下、自下而上分析,何时需要消除左递归,如何消除左递归,如何判断二义文法及消除文法二义性,什么是上下文无关文法、最左推导和最右推导
LR文法整理LR文法概念LR(0)、SLRLR(1)、LALR】(下)
weixin_47365232的博客
06-18 4147
LR文法整理LR文法概念LR(0)、SLRLR(1)、LALR】(下)
LR0,SLR1,LR1,LALR1的判断以及分析表的构造
05-14
该程序能够根据给定的文法判断它是否为LR0,SLR1,LR1,LALR1文法; 打印项目集,分析表,Go函数; 若文法属于LR1,将进行LALR1文法的判断,若属于LALR1文法,将继续打印LALR1文法的项目集,分析表和Go函数。
slr(1).rar_SLR(1)构造器_lr(0) slr_slr(1)_slr1文法 项目_slr规范集族
09-20
SLR(1)分析法是编译原理中的一个重要概念,它是LR(0)分析法的扩展,用于处理更复杂的语法结构。在理解SLR(1)之前,我们首先要了解LR(0)分析器的工作原理。 LR(0)分析器是一种自底向上的解析方法,它基于文法的产生...
LR.rar_LR分析法_LR文法_编译原理LR
09-14
LR文法是一种特殊的上下文无关文法,它满足LR分析器的要求,即每个产生式的右部要么为空,要么以一个非终结符开始,后面跟着若干个终结符。这样的文法使得LR分析器能够有效地进行预测,确定下一步的操作。 在实现LR...
编译原理LR(1)文法.rar
01-05
LR(1)相比于LALR(1)或SLR(1),其优势在于能够处理更多的文法,因为它们增加了前瞻符号以解决某些冲突。 Python在编译原理领域中被广泛用于实现各种解析器和词法分析器,因为Python的简洁性和强大的数据结构支持这种...
编译原理LR分析法 LR文法
04-16
LR分析法,讲解的还不错,还能看懂,呵呵,希望有帮助
LR(0)完整的语法分析方法(拓广文法、识别活前缀状态机、LR0表、识别字符串)内有word详细说明
01-07
LR(0)完整的语法分析方法(拓广文法、识别活前缀状态机、LR0表、识别字符串)内有word详细说明
LR(0)文法分析器
06-19
LR(0)分析器,能进行LR(0)文法的判断,分析句子,输出语法树
Java实现的LR0文法
06-19
Java语言实现的LR0文法,编译原理作业
LR0文法分析器
12-17
LR(0)文法分析器(LR (0) grammar parser)对于实现整个编译器而言,语法分析器是整个过程的核心部分,同时对构造整个编译器起到了关键作用,对程序的进一步扩展,以后有机会涉及对编译器的编写而言,将会是很容易便上手,当然,对于复杂的文法,复杂的语言而言,需要对文法的识别进一步扩展
编译原理 LR(0),SLR(1),LR(1), LALR(1) 词法分析
最新发布
03-04
总的来说,LR(0),SLR(1),LR(1) 和 LALR(1) 都是编译器设计中用于词法分析的重要工具,它们各有优缺点,适用于不同的文法结构。理解并熟练掌握这些方法,对构建高效且健壮的编译器至关重要。在 cc 文件中,可能包含...
第四章 语法分析(下)——LR文法
将晨的博客
11-13 1万+
LR(k)文法中,L指对输入进行从左到右的扫描,R表示反向构造一个最右推导序列。k表示在做出语法分析决定时向前看k个输入符号。 常用的LR(k)文法包括: - SLR:简单LR - LR(1):规范LR - LALR:向前看LR(Look ahead)
编译原理之LR(1)文法
Mr1998520的博客
11-20 1万+
LR(0)分析方法是一种自底向上分析方法,自底向上分析方法是一种移进归约过程,当分析的栈顶符号串形成句柄或可归约串时就采取归约动作。若是限定采用规范规约,那么自底向上分析法的关键问题是在分析过程中如何确定句柄。LR 分析法正是给出一种能根据当前分析栈中的符号串(通常以状态表示)和向右顺序查看输人串的k(k≥0)个符号就可唯一地 确定分析器的动作是移进还是归约和用哪个产生式归约,因而也就能唯一地确定...
编译原理——第五章-LR(0)文法的分析与-LR(0)文法分析表的构造
大胖东的博客
05-19 7708
一、 LR(0)文法分析表的构造 LR(0)文法,这里的L表示从左往右扫描输入串,R表示构造一个最右推导的逆过程 ①首先要学会书写出各个产生式的项目 例: ②学习增广文法(也叫拓广文法),引进一个非终结符S’,使得开始符只在产生式的左部出现一次。 ③现在我们把前俩个知识点连贯起来,求得S"->S…的增广文法的项目 ④可以把所有等价的项目组成一个项目集(I),称其为项目集闭包 如:(1)(2)等价,(3)(7)(11)等价,(5)(13)等价 ⑤现在我们开始构造LR(0)自动机(DFA)
判断lr(0)文法
05-25
判断一个文法是否是LR(0)文法,需要检查该文法的所有产生式右部的所有前缀是否相互不同。如果存在两个产生式右部的前缀相同,那么该文法就不是LR(0)文法。 具体地,一个文法LR(0)文法,当且仅当对于文法的每个产生式A -> α,在A的任何一个产生式的右部的前缀中,都不会出现形如A -> αβ的产生式。其中,α和β是任意符号串。 例如,考虑以下文法: ``` S -> A A -> a | aB B -> b | ε ``` 对于该文法,我们需要检查它的所有产生式右部的所有前缀是否相互不同。可以发现,对于A -> a和A -> aB,它们的前缀a是相同的。因此,该文法不是LR(0)文法。 如果一个文法LR(0)文法,那么它可以通过LR(0)分析器进行分析,并且可以使用LR(0)自动机进行分析。
写文章

热门文章

  • 编译原理—LL(1)文法 10687
  • LR文法整理【LR文法的概念、LR(0)、SLR、LR(1)、LALR】(上) 8137
  • 删除链表中倒数第N个节点 5814
  • LR文法整理【LR文法的概念、LR(0)、SLR、LR(1)、LALR】(下) 4146
  • 可重入锁的理解及公平锁和非公平锁的具体实现 2418

分类专栏

  • 论文阅读笔记 5篇
  • 算法题 10篇
  • MindSpore入门 3篇
  • 编译原理 5篇

最新评论

  • ShuffleNet系列论文阅读笔记(ShuffleNetV1和ShuffleNetV2)

    静繇: 你好up,想问一下有没有这个网络后期相关的研究文章,我查找了一下没有找到。

  • ByteTrack论文阅读笔记

    CSDN-Ada助手: 你好,CSDN 开始提供 #论文阅读# 的列表服务了。请看:https://blog.csdn.net/nav/advanced-technology/paper-reading?utm_source=csdn_ai_ada_blog_reply 。如果你有更多需求,请来这里 https://gitcode.net/csdn/csdn-tags/-/issues/34?utm_source=csdn_ai_ada_blog_reply 给我们提。

  • Vision Transformer论文阅读笔记

    Kwan的解忧杂货铺@新空间代码工作室: 博主的文章总是内容丰富,讲解得非常清晰,每次都是一次启发,你的博客如同一本知识宝典,每次阅读都充实了我的思维,期待博主下次更新。真的很感谢你的贡献。

  • EfficientNet-V2论文阅读笔记

    CSDN-Ada助手: 你好,CSDN 开始提供 #论文阅读# 的列表服务了。请看:https://blog.csdn.net/nav/advanced-technology/paper-reading?utm_source=csdn_ai_ada_blog_reply 。如果你有更多需求,请来这里 https://gitcode.net/csdn/csdn-tags/-/issues/34?utm_source=csdn_ai_ada_blog_reply 给我们提。

  • EfficientNet-V1论文阅读笔记

    CSDN-Ada助手: 你好,CSDN 开始提供 #论文阅读# 的列表服务了。请看:https://blog.csdn.net/nav/advanced-technology/paper-reading?utm_source=csdn_ai_ada_blog_reply 。如果你有更多需求,请来这里 https://gitcode.net/csdn/csdn-tags/-/issues/34?utm_source=csdn_ai_ada_blog_reply 给我们提。

大家在看

  • Python输出2进制8位数排列组合彩色图像程序代码
  • 磁翻板液位计介绍
  • 推荐一款功能强大的智能语言交互软件:豆包桌面客户端
  • Java复习10(PTA) 24
  • Redis学习:十大数据类型、RDB持久化

最新文章

  • 远程连接服务器安装和配置环境
  • U-net和U²-Net网络详解
  • ByteTrack论文阅读笔记
2024年10篇
2022年24篇
2021年4篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

玻璃钢生产厂家广东景区玻璃钢雕塑销售厂家呼市商场美陈致电柳州玻璃钢雕塑小品商场春季美陈蝴蝶江苏玻璃钢雕塑报价泰州玻璃钢雕塑安装连云港小区玻璃钢雕塑公司天津水果玻璃钢雕塑生产厂家金色玻璃钢花盆组合黑龙江定制玻璃钢雕塑制作汨罗雕塑玻璃钢玻璃钢古代人物雕塑设计哪里有玻璃钢吉祥公仔雕塑宁夏玻璃钢雕塑专业厂家楼盘玻璃钢园林艺术雕塑内蒙古广场玻璃钢雕塑定做宝安商场美陈枣庄市玻璃钢人物雕塑商场美陈布置装饰广东透明玻璃钢雕塑定做东莞美陈玻璃钢雕塑安顺商场美陈拱门西安广场玻璃钢雕塑价格永新玻璃钢花盆定制厂家玻璃钢李时珍人像雕塑批发随州玻璃钢动物雕塑定制厂家玉树商场美陈骆驼玻璃钢雕塑商场门口美陈公司重庆个性化玻璃钢雕塑定做价格香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化