编译原理:语法分析之LR分析

news2025/6/25 23:03:15

自底向上分析方法(LR分析算法)bottom-up parsing

  • 引言
    • . 运算符
  • LR(0)
    • LR(0)的项(构建有穷自动机的状态)
    • LR(0)的项目闭包(构建有穷自动机的状态)
    • GOTO函数
    • 有效项目
    • LR(0)有穷自动机的构建
  • SLR
  • LR(1)
  • LALR

引言

LR的含义
L:算法由左向右的处理输入符号(tokens)。
R:它为输入串描绘出一个最右推导。(由最右推导构造分析树)
数字:算法使用输入中的“多少个符号”来作预测分析。与之对应的有LR(0),SLR(1),LR(1)等算法。

LR分析法是自底向上分析算法中最重要,也是应用最广泛的一类算法。
优点:效率高、有现成工具(YACC(Unix)、bison(Linux)、Java CUP、以及C#YACC),因此应用广泛。

与LL分析法相比较
相同点:都是表驱动的分析算法。
不同点:

-LLLR
表内元素文法规则移进、规约
表格的纵列非终结符号状态
状态转移是(goto)

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

. 运算符

标记语法分析器已经读入了多少个输入,引入点记号“·”
在这里插入图片描述
两个关键步骤:

  1. 移进 将一个记号移入栈。
    在这里插入图片描述

  2. 归约:弹出栈顶n个符号,恰好组成某个产生式的右部,压入该产生式的左部。例如:对于某个产生式A → β 1 β 2 … … β n \beta 1 \beta 2 …… \beta n β1β2……βn,从栈顶依次弹出 β \beta βn, β \beta βn-1,……, β \beta β 1,压入非终结符A。

在这里插入图片描述

拓广文法:如果G是一个以S为开始符号的文法, 那么G的拓广文法G’就是在G中加上新开始符号S’和产生式S’ → S而得到的文法。
在这里插入图片描述在这里插入图片描述

LR(0)

LR(0)的项(构建有穷自动机的状态)

定义:一个文法G的LR(0)项(简称项,item)是G的一个产生式,同时加上它右部体中某处的点。(在文法产生式右部某个位置标有“·”的产生式)
例如: A → XYZ 的项包括:
A → · XYZ
A → X · YZ
A → XY · Z
A → XYZ
A → ε 的项包括: A → ·

格式是:已识别的·期望识别的,前面是已处理的,后面是待输入的
非终结符、终结符均可状态转移

形如 A→ · α \alpha α 的项目称为初始项目;
形如 A→ α \alpha α · 的项目称为归约项目(完整项目);
形如 A→ · B β \beta β 的项目称为待约项目(基本项目) B∈N;
形如 A→ α \alpha α · a β \beta β 的项目称为移进项目(基本项目) a∈T

LR(0)的项目闭包(构建有穷自动机的状态)

设I是文法G的一个LR(0)项目集合,I的项目闭包CLOSURE(I)定义如下:

  1. I ⊆ \subseteq CLOSURE(I)。
  2. 若项目A -> α \alpha α · B β ∈ \beta \in β CLOSURE(I),且 B -> η \eta η 是G的产生式,则项目B -> · η ∈ \eta \in η CLOSURE(I)。(有几条闭包几条,可以一直往后闭包)
  3. CLOSURE(I)仅包含上述两条规则确定的LR(0)项目。

GOTO函数

若I是文法G的一个LR(0)项目集,X是G中的文法符号
GOTO(I, X) = CLOSURE(J) 其中J ={A − > α ->\alpha >αX · β \beta β | A-> α \alpha α · X β ∈ I \beta \in I βI },称函数GOTO(I, X)为转移函数
项目A − > α ->\alpha >αX · β \beta β称为项目A-> α \alpha α · X β \beta β后继

有效项目

右句型:最右推导中的终结符和非终结符的每个中间串称为右句型(最右推导形成的剖面)
在这里插入图片描述

右句型的可行前缀(活前缀):当前栈和输入串之间发生了间隔,分析栈的符号序列被称为右句型的可行前缀。(也就是点的前半部分)
右句型的句柄:在右句子格式中发生的位置以及用来归约它的产生式被称为右句型的句柄。
在这里插入图片描述

LR(0)有穷自动机的构建

在这里插入图片描述在这里插入图片描述
NFA->DFA 子集构造法
在这里插入图片描述
在这里插入图片描述

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

熟练工可以直接写出DFA
在这里插入图片描述在这里插入图片描述

SLR

LR(1)

LALR

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1822888.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

树莓派4B学习笔记7:(Python)_TTL串口收发数据_

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi) 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1: 今日尝试使用树莓派的TTL串口进行收发数据: …

Web应用安全测试-业务功能滥用(二)

Web应用安全测试-业务功能滥用(二) 7、未验证的URL跳转 漏洞描述:服务端未对传入的跳转url变量进行检查和控制,可能导致可恶意构造任意一个恶意地址,诱导用户跳转到恶意网站。由于是从可信的站点跳转出去的&#xff…

无线MODBUS通讯模块在供水系统中的应用

一、项目背景 我国是人口大国、农业大国,同时也是贫水大国。由于大量工业废水污染了部分河流、地表的浅层水资源,并且有逐年加重的趋势,再加上农业、绿化等灌溉对水资源的大量消耗,这些因素综合作用进一步加剧了我国水资源紧缺的…

计算机网络:网络层 - IPv6

计算机网络:网络层 - IPv6 IPv6 数据报IPv6 地址冒号十六进制记法地址分类 IPv4 到 IPv6 过渡双栈协议隧道技术 IPv6 是互联网协议的最新版本,它被设计用来取代现有的 IPv4 协议。这是因为 IPv4 存在一些根本性的限制,而 IPv6 则可以解决这些…

Burp Suite使用及BruteForc_test靶场实战

简介 Burp Suite是用于攻击和测试Web应用程序安全性的集成平台,包含多个协同工作的工具,支持信息共享与复杂攻击。设计有加速攻击流程的接口,所有工具共享强大框架,处理HTTP消息、持久性、认证、代理、日志和警报。主要用于安全性…

【数据结构】【版本1.1】【线性时代】——单链表

快乐的流畅:个人主页 个人专栏:《算法神殿》《数据结构世界》《进击的C》 远方有一堆篝火,在为久候之人燃烧! 文章目录 引言一、顺序表的问题二、链表的概念三、单链表的模拟实现3.1 定义3.2 打印3.3 创建新节点3.4 头插3.5 尾插3…

2-3 基于matlab的NSCT-PCNN融合和创新算法(NSCT-ML-PCNN )图像融合

基于matlab的NSCT-PCNN融合和创新算法(NSCT-ML-PCNN )图像融合。NSSCTest.m文件:用于查看利用NSSC算法分解出的图像并保存。其中的nlevel可调test.m文件:用于产生融合结果,其中一个参数需要设置:Low_Coeffs…

DTU在城市智慧供热上的应用:引领供热行业的智能化革新

随着城市化的快速推进和人们对舒适生活需求的日益增长,供热系统作为城市基础设施的重要组成部分,其智能化、高效化的发展已成为必然趋势。在这一进程中,DTU(Data Transfer Unit,数据传输单元)以其独特的优势…

Java 反射机制 -- Java 语言反射的概述、核心类与高级应用

大家好,我是栗筝i,这篇文章是我的 “栗筝i 的 Java 技术栈” 专栏的第 010 篇文章,在 “栗筝i 的 Java 技术栈” 这个专栏中我会持续为大家更新 Java 技术相关全套技术栈内容。专栏的主要目标是已经有一定 Java 开发经验,并希望进一步完善自己对整个 Java 技术体系来充实自…

113.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-结构体数据更新思路分析

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容…

12_YouOnlyLookOnce(YOLOv3)新一代实时目标检测技术

1.1 回顾V1和V2 V1:05_YouOnlyLookOnce(YOLOV1)目标检测领域的革命性突破-CSDN博客 V2:07_YouOnlyLookOnce(YOLOv2)Better,Faster,Stronger-CSDN博客 1.2 简介 YOLOv3(You Only Look Once version 3)是…

【因果推断python】33_合成控制3

目录 不要外推 不要外推 假设您有下表中的数据,并被要求构建一个合成控制,以使用控制单元的任何线性组合来重现处理过的单元。 由于有 3 个单位和只有 2 个属性要匹配,因此有多个确定性的解决方案可以解决这个问题,但一个不错的解…

[vue2]深入理解路由

本节目标 单页应用程序路由概念VueRouter基本使用组件分类存放路由模块封装声明式导航其他路由配置路由模式编程式导航案例-面经基础版 单页应用程序 单页应用程序(SPA): 所有的功能都在一个HTML页面上实现 网易云音乐: 网易云音乐 多页应用程序(MPA): 不同功能通过切换不同…

数字芯片设计指南之几个微流片设计(已开源)

1 位 ALU 作者 利奥慕时 描述 书中的 1 位 ALU Structured Computer Organization: Andrew S. Tanenbaum 链接 Wokwi 链接 & GitHub 链接 图片 桶形移位器 作者 约翰内斯霍夫(Johannes Hoff) 描述 将 6 位数字向左移动 0-3 位 链接 …

【CGAL】圆柱体检测结果后处理

文章目录 文章说明算法思路代码展示结果展示 文章说明 这篇文章主要介绍,对使用CGAL中的 Region Growing 算法爬取圆柱体的结果进行后处理,以获取位置、轴向量、半径都较为合理的单个圆柱体。 在之前的一篇文章中,使用了open3D生成的标准圆…

2024 年勒索软件将比以往更加残酷

如今,世界各地的人们去学校、去医院或去药店时,都会被告知:“抱歉,我们的计算机系统瘫痪了。” 罪魁祸首往往是在世界另一端活动的网络犯罪团伙,他们会要求人们支付系统访问费用或安全归还被盗数据。 尽管警方加大打…

搜维尔科技:【应用】人形机器人将成为引领产业新浪潮的尖兵

特斯拉纷纷发表人形机器人计划,预示这项先进科技将成为下一个颠覆性的殖民地。人形机器人被视为继电脑、智能手机和电车之后,又一个将改变世界的创新产品。 全球人口结构正在快速老化,至2050年60岁以上人口将达22%,是现今的两倍。劳动人口短缺迫在眉睫&…

Koolshare 软件中无法显示 Aliddns 更新泛域名失败

华硕 AC86U 升级之后,软件中心无法显示,没有找到更好的办法,只能重新格式化,带来的问题就是升级之前安装的软件全部被清掉了。感觉升级之后,可能兼容性出了问题。 Aliddns 更新失败 Aliddns 是一款可以在路由器上动态…

仰望U8三大黑科技,重新定义智能汽车

文 | 智能相对论 作者 | 雷歌 是时候重新定义中国的“智能汽车”了。 在仰望U8出来以前,普通人对知道的智能汽车的配置认识,智能汽车是智能驾驶智能座舱,硬件上大概是这几样:毫米波雷达激光雷达智驾芯片。 仰望U8出来以后&…

力扣每日一题 6/14 动态规划+数组

博客主页:誓则盟约系列专栏:IT竞赛 专栏关注博主,后期持续更新系列文章如果有错误感谢请大家批评指出,及时修改感谢大家点赞👍收藏⭐评论✍ 2786.访问数组中的位置使分数最大【中等】 题目: 给你一个下标…