编译原理:语法分析之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.rhkb.cn/news/349734.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【成品设计】基于STM32的单相瞬时值反馈逆变器

《基于STM32的单相瞬时值反馈逆变器》 整体功能: 图13 软件框图 如图13所示,由于本设计中需要通过定时器中断执行一些程序,故首先对中断进行初始化。中断初始化以后即为对串口进行初始化,总共初始化了两个串口,第一个…

关于投标中的合理均价基准差径靶心法(KIMI回答)

投标中的合理靶心法到底是什么呢?用了KIMI来进行回答:

VMware Workerstation开启虚拟机后,产生乱码名称日志文件

问题情况 如下图所示,我的虚拟机版本是16.1.2版本,每次在启动虚拟机之后,D盘目录下都会产生一个如图下所示的乱码名称文件。同时,虚拟机文件目录也是杂乱不堪,没有按照一台虚拟机对应一个文件夹的形式存在。 问题处理…

windows10使用触控板、鼠标(magic trackpad)———附带BootCamp6驱动下载链接

文章目录 0 背景1 步骤1.1 下载1.2 解压1.3 安装驱动 参考 0 背景 最近在台式机(windows10系统)上使用mac设备,键盘magic keybord连上数据线就可以直接使用,但是触控板magic trackpad却不行,只有鼠标左键,…

【6】第一个Java程序:Hello World

一、引言 Java,作为一种广泛使用的编程语言,其强大的跨平台能力和丰富的库函数使其成为开发者的首选。对于初学者来说,编写并运行第一个Java程序是一个令人兴奋的时刻。本文将指导你使用Eclipse这一流行的集成开发环境(IDE&#…

解决CentOS 7无法识别ntfs的问题

解决CentOS 7无法识别ntfs的问题 方式一: Centos默认不支持ntfs文件格式,直接在Centos7上插U盘或移动硬盘无法识别,安装 ntfs-3g即可: # yum install epel-release -y # yum install ntfs-3g -y[rootbogon ~]# rpm -qa | grep nt…

个人关于Leecode 49题见解(保姆级)

题目: 49. 字母异位词分组 中等 相关标签 相关企业 给你一个字符串数组,请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs ["eat", "…

Vector VH6501使用CANoe工程CANDisturbanceMain进行模拟干扰测试

系列文章目录 文章目录 系列文章目录一、文档介绍二、打开工程 CANDisturbanceMain三、模拟干扰3.1 CAN_H或CAN_L短接到地3.2 CAN_H和CAN_L短接3.3 CAN_H或CAN_L短接到电源3.4 CAN_H和CAN_L反接3.5 CAN_H和CAN_L之间的电阻/电容值调整一、文档介绍 本文档主要介绍如何使用CANo…

递归解析 LXML 树并避免重复进入某个节点

1、问题背景 我们在使用 LXML 库解析 MathML 表达式时,可能会遇到这样一个问题:在递归解析过程中,我们可能会重复进入同一个节点,导致解析结果不正确。例如,我们希望将以下 MathML 表达式解析为 Python 表达式&#x…

数据通信与网络(二)

如何构建网络协议 这些协议采用分层的结构,每层协议实现特定功能,同时也需要依靠低层协议所提供的服务。 网络协议可以理解为三部分组成: 1、语法:通信时双方交换数据和控制信息的格式,是对通信时采用的数据结构形式…

学了这篇面试经,轻松收割网络安全的offer

网络安全面试库 吉祥学安全知识星球🔗除了包含技术干货:Java代码审计、web安全、应急响应等,还包含了安全中常见的售前护网案例、售前方案、ppt等,同时也有面向学生的网络安全面试、护网面试等。 0x1 应届生面试指南 网络安全面…

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

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

如何在 Vue 3 中使用 vue3-print-nb 实现灵活的前端打印

你好,我是小白Coding日志,一个热爱技术的程序员。在这里,我分享自己在编程和技术世界中的学习心得和体会。希望我的文章能够给你带来一些灵感和帮助。欢迎来到我的博客,一起在技术的世界里探索前行吧! 前言 在前端开…

Java语言+前端Angular+后台Java+Spring开发的云his系统源码 一站式解决诊所经营管理需求 云HIS住院业务流程

Java语言前端Angular后台JavaSpring开发的云his系统源码 一站式解决诊所经营管理需求 云HIS住院业务流程 HIS系统住院业务流程是什么? HS系统为医院提供了一套完整的住院业务流程解决方案,旨在提高住院管理的效率和精确度。通过HS系统,医院工…

大数据------JavaWeb------前端知识点汇总

额外知识点 W3C标准:W3C是万维网联盟,这个组成是用来定义标准的。他们规定了一个网页是由三部分组成 结构:对应的是 HTML 语言表现:对应的是 CSS 语言行为:对应的是 JavaScript 语言 HTML定义页面的整体结构&#xff1…

c#中上传超过30mb的文件,接口一直报404,小于30mb的却可以上传成功

在一次前端实现上传视频文件时,超过30mb的文件上传,访问接口一直报404,但是在Swagger中直接访问接口确是正常的,且在后端控制器中添加了限制特性,如下 但是却仍然报404,在apifox中请求接口也是报404, 网上说: 在ASP.NET Core中,配置请求过来的文件上传的大小限制通常…

火爆全网《pvz植物大战僵尸杂交版》最新安装包,支持Android、Windows、iOS!

我是阿星,今天跟大家聊聊最近在B站火得一塌糊涂的老游戏——《植物大战僵尸》。你没听错,就是那个曾经让我们熬夜奋战,一关又一关的游戏。 话说回来,这游戏怎么就突然又火起来了呢? 原来,是因为它的最新整…

如何舒适的使用VScode

安装好VScode后通常会很不好用,以下配置可以让你的VScode变得好用许多。 VScode的配置流程 1、设置VScode中文2、下载C/C拓展,使代码可以跳转3、更改编码格式4、设置滚轮缩放5、设置字体6、设置保存自动改变格式7、vscode设置快捷代码8、下载插件并学会…

智慧检务大数据平台解决方案

1.1. 政务目标分析 1.1.1. 业务功能分析 为履行检察职能,人民检察院需开展职务犯罪查办和预防、刑事诉讼监督、民事行政监督、检务支持、内部管理与办公、检察队伍管理、检务保障支持等工作,分为 7 大类业务,主要功能如下: 1、…

[工具探索]富士mini90拍立得使用指南

文章目录 1. 基本功能介绍1.1 相机外观1.2 电池与胶片 2. 设置相机2.1 装入电池2.2 装入胶片 3. 拍摄模式3.1 标准模式3.2 儿童模式3.3 远景模式3.4 双重曝光模式3.5 Bulb(B)模式3.6 **派对模式**3.7 微距模式3.8 **亮度模式**3.9 **定时拍摄模式**3.10 …