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

自底向上分析方法(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.xdnf.cn/news/1451502.html

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

相关文章

解析FTP服务器:从基础知识到vsftpd实战操作

✨✨ 欢迎大家来访Srlua的博文(づ ̄3 ̄)づ╭❤~✨✨ 🌟🌟 欢迎各位亲爱的读者,感谢你们抽出宝贵的时间来阅读我的文章。 我是Srlua小谢,在这里我会分享我的知识和经验。&am…

另辟蹊径的终端防病毒

在数字时代的浪潮中,网络安全问题愈发凸显,防病毒成为了保护信息安全的重要一环。而白名单作为一种有效的安全策略,在防病毒方面发挥着不可或缺的作用。 首先,我们需要明确白名单的概念。白名单是一种管理和安全实践,用…

【leetcode--单词规律】

题目要求: 跟上一个字符串的思路一致,只是要进行单词的拆分,用.split()函数即可。 class Solution:def wordPattern(self, pattern: str, s: str) -> bool:word s.split()if(len(pattern) ! len(word)):return Falsereturn len(set(patt…

吴恩达2022机器学习专项课程C2W3:2.25 理解方差和偏差(诊断方差偏差正则化偏差方案搭建性能学习曲线)

目录 引言名词替代影响模型偏差和方差的因素1.多项式阶数2.正则化参数 判断是否有高偏差或高方差1.方法一:建立性能基准水平2.方法二:建立学习曲线 总结 引言 机器学习系统开发的典型流程是从一个想法开始,然后训练模型。初次训练的结果通常…

【docker】Linux安装最新版Docker完整教程

这里写目录标题 一、安装前准备工作1.1、安装依赖包1.2、设置阿里云镜像源 二、安装Docker2.1、docker-ce安装2.2、启动docker2.3、启动docker并设置开机自启 三、 优化docker配置3.1、访问阿里云官方镜像加速器地址3.2、设置阿里云加速地址 一、安装前准备工作 1.1、安装依赖…

资源分享—2021版乡级制图规范符号库

汇总整理超图平台软件相关的各类资源(包括但不限于符号库、地图模板、地理处理模型等),助力项目的高效制图、提高数据生产效率等业务。 本次分享新版国土空间规划【2021版乡级制图规范符号库】,提供SuperMap格式符号库下载。 符…

信号与系统实验MATLAB-实验1-信号的MATLAB表示及信号运算

实验1-信号的MATLAB表示及信号运算 一、实验目的 1、掌握MATLAB的使用; 2、掌握MATLAB生成信号波形; 3、掌握MATLAB分析常用连续信号; 4、掌握信号运算的MATLAB实现。 二、实验内容 编写程序实现下列常用函数,并显示波形。…

python返回每个数 青少年编程电子学会python编程等级考试三级真题解析2021年9月

python返回每个数 2021年9月 python编程等级考试级编程题 一、题目要求 1、编程实现 给定一个整数 num,从1到 num 按照下面的规则返回每个数! 如果这个数被 3 整除,返回 Apple。 如果这个数被 5 整除,返回Pie’。 如果这个数能同时被 3 和…

竟然与 package-lock.json 更新有关!部分用户 H5 页面白屏问题!

一.问题 1 场景 现象 接到部分用户反馈进入xxx H5 页面空白; 研发测日志里问题用户的线上页面URL地址可以正常访问,没有复现问题!!! 定位问题 监控平台和客户端日志报错: SyntaxError: Unexpected toke…

百递云·API开放平台「智能地址解析API」助力地址录入标准化

地址信息的正确录入,是保证后续物流配送环节能够顺畅运行的必备前提,错误、不规范的收寄地址将会产生许多困扰甚至造成损失。 ✦地址信息通常包含国家、省、城市、街道、楼宇、门牌号等多个部分,较为复杂,填写时稍有疏忽就会出现…

数据结构:手撕代码——顺序表

目录 1.线性表 2.顺序表 2.1顺序表的概念 2.2动态顺序表实现 2.2-1 动态顺序表实现思路 2.2-2 动态顺序表的初始化 2.2-3动态顺序表的插入 检查空间 尾插 头插 中间插入 2.2-4 动态顺序表的删除 尾删 头删 中间删除 2.2. 5 动态顺序表查找与打印、销毁 查找 …

使用fvm切换flutter版本

切换flutter版本 下载fvm 1、dart pub global activate fvm dart下载fvm 2、warning中获取下载本地的地址 3、添加用户变量path: 下载地址 终端查看fvm版本 fvm --version 4、指定fvm文件缓存地址 fvm config --cache-path C:\src\fvm(自定义地址&…

使用Zed 实现测距

目录 1. 导入相关库 2. 相机初始化设置 3. 获取中心点深度数据 4. 计算中心点深度值 5. 完整代码 此代码基于官方代码基础上进行改写,主要是获取zed相机深度画面中心点的深度值,为yolo测距打基础。 Zed相机是由Stereolabs公司开发的一种先进的立体视觉相机。这种相机专…

LinkFinder使用记录

在Windows上使用linkfinder报出如下错误: 解决办法: 进入linkfinder.py中将如下代码注释掉即可~ print("URL to access output: file://%s" % os.path.abspath(args.output))

使用Leaflet库创建交互式地图:技术解析与实践

一:引言 在现代Web开发中,地图可视化已成为许多项目不可或缺的一部分。Leaflet是一个开源的JavaScript库,用于在Web页面上创建交互式地图。它简单易用、轻量级且高度可定制,使得开发者能够快速地创建出具有丰富功能的地图应用。本…

618有什么值得推荐?2024数码产品推荐,轻松拿捏选购!

随着618购物节即将来临,你是否已被琳琅满目的商品所吸引,难以抉择?团团特意为你筛选出一系列经过亲身试验的优质好物,旨在帮助你在这场购物盛宴中迅速锁定心仪之选。这些推荐不仅走在时尚的前沿,更能满足你日常生活的各…

java:spring使用【XXXPostProcessor】添加bean定义,修改bean定义、代理bean

# 项目代码资源&#xff1a; 可能还在审核中&#xff0c;请等待。。。 https://download.csdn.net/download/chenhz2284/89433361 # 项目代码 【pom.xml】 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-start…

GaussDB技术解读——GaussDB架构介绍(三)

目录 9 智能关键技术方案 智能关键技术一&#xff1a;自治运维系统 智能关键技术二&#xff1a;库内AI引擎 智能关键技术三&#xff1a;智能优化器 10 驱动接口关键技术方案 GaussDB架构介绍&#xff08;二&#xff09;从数据持久化存取层(DataNode)关键技术方案、全局事…

list容器的基本使用

目录 前言一&#xff0c;list的介绍二&#xff0c;list的基本使用2.1 list的构造2.2 list迭代器的使用2.3 list的头插&#xff0c;头删&#xff0c;尾插和尾删2.4 list的插入和删除2.5 list 的 resize/swap/clear 前言 list中的接口比较多&#xff0c;与string和vector类似&am…

全面解说Facebook代投菲律宾真金游戏pwa广告全流程

全面解说Facebook代投菲律宾真金游戏pwa广告全流程 随着数字营销的不断发展&#xff0c;社交媒体平台如Facebook已成为广告主们争相投放的热门渠道。对于希望拓展菲律宾市场的真金游戏企业来说&#xff0c;了解并掌握在Facebook上投放广告的具体流程显得尤为重要。本文将详细介…