搜索
查看
编辑修改
首页
UNITY
NODEJS
PYTHON
AI
GIT
PHP
GO
CEF3
JAVA
HTML
CSS
搜索
IT小白
这个屌丝很懒,什么也没留下!
关注作者
热门标签
jquery
HTML
CSS
PHP
ASP
PYTHON
GO
AI
C
C++
C#
PHOTOSHOP
UNITY
iOS
android
vue
xml
爬虫
SEO
LINUX
WINDOWS
JAVA
MFC
CEF3
CAD
NODEJS
GIT
Pyppeteer
article
热门文章
1
全方位解析废柴如何逆袭 1w+?
2
vue3.0项目实战系列文章 - 登录页面_vue3 登录页面
3
不压缩、不降质!快速在电脑手机间互传高清文件的秘诀
4
【FPGA】摄像头模块OV5640
5
留守在家,如何提升和精进FPGA设计能力?
6
ETL工具-nifi干货系列 第一讲 揭开nifi神秘面纱_nifi中bulk controller status
7
Windows下Spark开发环境的搭建_windows搭建spark环境
8
Python机器翻译包Translate:多语种翻译利器
9
49. 【Android教程】HTTP 使用详解
10
工业AGV(含AMR)工程师要求汇总220331_agv项目实施工程师需要对哪些硬件了解
当前位置:
article
> 正文
编译原理复习——语法分析(自底向上)_lr分析法自底向上规约可找出出错的地方
作者:IT小白 | 2024-04-29 12:58:54
赞
踩
lr分析法自底向上规约可找出出错的地方
方法描述
自左向右逐个扫描输入串,一边把输入符号
移进
分析栈
,一边检查位于栈顶的一串符号是
否与某个产生式的右部相同,如果相同,就把
栈顶的这串符号
归约
为左部的非终结符;如果
不同,则继续移入输入符号,进行判断。上述
过程一直重复到
输入串结束
,栈内
恰好为
S
。
归约
自底向上分析法是“移进
—
归约”法
①移进
——读入一单词并压入栈内,指针下移一位
②归约
——检查栈顶若干符号是否为分析表中产生式右部,
若是,用左部替换
③识别成功
——栈内为文法开始符号,指针指向#
④其他出错
自底向上分析的思路
在自左向右移进输入串的过程中,一旦发现
栈
顶呈现可归约串
就立即归约。
所以自底向上分析的中心问题是:
怎么判断栈顶符号串的可归约性和
如何归约
句柄的另一种定义
:
句型的句柄是和某产生式右部匹配的子串,并且,
把它归约成该产生式左部的非终结符代表了
最右推
导过程的逆过程
的一步
规范规约
假定
α
是文法
G
的一个句子,称序列
α
n
,
α
n
-
1,
… α
0
是
α
的一个规范归约,则此序列满足:
α
n
=
α
α
0
为文法开始符,即
α
0
=
S
对任何
i
,
0<i≤n,
α
i
-
1
是从
α
i
经把
句柄
替换为
相应
产生式
的
左部
符号而得到的
最右推导的逆过程
等价于
最左归约
等价于
规范归约
在求解语法分析自顶向下分析中我们采用的是LL(1)分析,那么在语法分析自底向上分析中我们采用的是LR(1)分析。
LR(K)
L
:
自左向右扫描输入串
R
:
最右推导的逆过程
(
规范归约,最左规约
)
K
:
向右查看
输入串符号的个数
(K
省略时
,
表
示
K
等于
1
,
当
K=1
时,能满足当前绝大多数
高级语言编译程序的需要
)
LR
分析过程是规范归约过程
LR
分析法的特点
LR
分析器(程序)基本上
可以识别所有
上下
文无关文法写的编程设计语言的结构,分析能
力强且适用范围广
LR
分析法是当前
最一般
“
移进
-
归约
”分析方
法
LR
分析法在
自左向右
扫描输入串时能发现其
中错误,并能
指出出错地点
LR
分析程序可以自动生成
LR
分析表的分类
LR(0)
:最简单分析表,分析表的局限性大
,
是
其它
LR
分析法的
基础
SLR(1)
:简单分析表,分析表稍有局限性,
但较易实现
LR(1)
:分析表能力最强,但代价过高
LALR(1)
:称为向前看
LR
分析表,分析表能
力介于
SLR(1)
和
LR(1)之
间,适用于大多数程
序设计语言的结构,并且可以比较有效地实现
说明:四种分析表对应四类文法
LR
分析方法的基本思想
LR
分析器的每一步工作都是由
栈顶状态
和
现
行输入
符号
所唯一决定的。
一个
LR
分析器实质上是一个
DFA
S是移进操作 r是规约操作 GOTO则是状态转换的操作当一个状态遇到了非终结符是会进行GOTO
下面是一个LR分析表来举一下例子:
最后我们也是希望通过学习得到这样的一个分析表来实现
我们看到有两个部分一个是ACTION部分还有一个是GOTO状态转换部分
Action[s
n
, a
i
]:
当前状态
s
n
面对输入符号
a
i
时采叏的动作
(1) 移进 –
s
j
(2) 归约 –
r
j
(3) 接受 –
acc
(4) 报错 –
空白 / ‘出错’ / ‘error’ 一般都是空白
(1)
移进
–
Action[s
n
, a
i
] =
s
j
把现行输入符号
a
i
和下一状态
j
分别移进状态栈和符号栈
状态栈和符号栈的个数是一样的
GOTO
[ s
n
,
a
i
]
=
j
(2)
归约
-
Action[s
n
, a
i
] =
r
j
用第
j
条产生式
A→
β
归约
.
|β| =r
(3)
接受
–
Action[s
n
, a
i
] = acc,
宣布分析成功
(4)
报错
–
Action[s
n
, a
i
] =
空白,出错标识,报错
例子:
声明:
本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:
https://www.wpsshop.cn/w/IT小白/article/detail/507866
推荐阅读
article
设计
模式
——
迭代
器
模式
_某
商品
管理系统
的
商品
名称存储在
一个
列表中,现需要自定义
一个
双向
迭代
器
(myi...
迭代
器
模式
(Iterator Pattern)定义:提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游...
赞
踩
article
JAVA如何
获取
服务器
ip
_
java
获取
服务器
ip
...
在使用代理
服务器
时,如果想要
获取
代理
服务器
的IP地址,可以使用其他方法来实现,例如可以发送一个HTTP请求到一个公共的I...
赞
踩
article
STM32
+
KEIL5
+Cubmax(
定时器
的使用)_
htim
->
instance
==...
8.开启了
定时器
1,和
定时器
2,4.开启中断(高级
定时器
)5.开启中断(普通
定时器
)7.中断服务函数编写。_
htim
->...
赞
踩
article
CentOS7
下部署
Django
项目_
centos7
部署
django
...
CentOS7
下部署
Django
项目_
centos7
部署
django
centos7
部署
django
...
赞
踩
article
windows
下安装
chromedriver
驱动...
4.将下载的驱动文件:
chromedriver
.exe 放在浏览器的安装目录下:C:\Program Files (x8...
赞
踩
article
八款好用
的
IDEA
插件
,
强烈推荐
!!!不容错过_
idea
中文
插件
...
然后在右侧CodeGeeX中
,
他就会跟我们说这段代码
的
逻辑
,
做了什么事
,
在你接手别人
的
项目时
,
没有注释就直接选中问Cod...
赞
踩
article
Cpolar
快速
入门教程
:
Ubuntu
系列...
网:我们通常说的是互联网;站:可以理解成在互联网上的一个房子。把互联网看做一个城市,城市里面的每一个房子就是一个站点,房...
赞
踩
article
编译
原理:
编译
过程
和
编译
程序
的
结构
_
编译
过程
的
六个
阶段
...
编译
过程
概述:
编译
程序
完成从源程序到目标程序
的
翻译工作,是一个复杂
的
整体
的
过程
。从概念上来讲,一个
编译
程序
的
整个工作过...
赞
踩
article
阿里云
视频点播
服务(上传,删除,
获取
播放地址,
获取
播放凭证)_
aliyun
-
java
-
vod
-upl...
阿里云
视频点播
服务(上传,删除,
获取
播放地址,
获取
播放凭证)_
aliyun
-
java
-
vod
-
upload
aliyun
-...
赞
踩
article
有哪些
人工智能
/
数据分析
领域
可以
考取
的
证书
?...
面向学生、开发者、数据科学家等人群,一文帮你厘清AI或者DA方向当下热门
的
证书
有哪些
人工智能
/
数据分析
领域
可以
考取
的
证书
...
赞
踩
article
Git
仓库
完整迁移全过程_
gitee
将
a
仓库
的
克隆
到
b
仓库
...
从A
仓库
迁移到B
仓库
首先要创建一个新
仓库
B 然后按下列任一方法操作方法一:1
克隆
A
仓库
到本地注意是mirror:gi...
赞
踩
article
数据挖掘
文本
分类
知乎
问题
单
分类
(一):背景介绍和需求
分析
...
数据挖掘
文本
分类
知乎
问题
单
分类
(一):背景介绍和需求
分析
背景介绍和需求
分析
题目实验要求实验内容):背景介绍和需求
分析
...
赞
踩
article
华为
存储
服务器
的
通信协议
,
云
服务器
通信协议
...
云
服务器
通信协议
内容精选换一换
华为
云
帮助中心,为用户提供产品简介、价格说明、购买指南、用户指南、API参考、最佳实践、...
赞
踩
article
【
数据结构
】
时间
复杂度
(详细解释
,
例子
分析
,
易错
分析
,
图文并茂
)...
时间
复杂度
详细解释
,
配上样例进行理解_
时间
复杂度
时间
复杂度
...
赞
踩
article
JS实现
二叉树
的
创建
和
遍历
...
1、先说
二叉树
的
遍历
,
遍历
方式: 前序
遍历
:先
遍历
根结点,然后左子树,再右子树 中序
遍历
:先
遍历
左子树,然后根结...
赞
踩
article
java
迭代
器模式_
java
迭代
器模式...
迭代
器模式是与集合共生共死的,一般来说,我们只要实现一个集合,就需要同时提供这个集合的
迭代
器,就像
java
中的Colle...
赞
踩
article
基于
单片机
的
导盲
拐杖
设计
_智能
导盲
拐杖
论文...
目 录引言 11 系统概述 11.1
设计
研究的背景和意义 11.2 本次
设计
内容 12 系统
设计
的整体方案 2...
赞
踩
article
Git
使用 从入门到入土 收藏吃灰系列 (十一)
下载
所有
远程
仓库
分支
_
git
下载
远程
分支
...
????????????????????????哈喽!大家好,我是【张时贰】,一位热爱学习的博主!???????????...
赞
踩
article
2023最常
用
且好
用
的
IDEA
插件
_
generateo2o
...
开发常
用
的
IDEA
插件
,一定有你需要
的
一款
_
generateo2o
generateo2o
...
赞
踩
article
TOGAF
架构
开发
方法
(ADM)--
架构
准备
阶段
_
adm
预备
阶段
的
方法
...
1.1 准备
阶段
(Preliminary) 企业
架构
开发
方法
各
阶段
——
预备
阶段
1.1.1 目标
预备
阶段
的目标...
赞
踩
相关标签
设计模式
迭代器模式
java
服务器
tcp/ip
stm32
嵌入式硬件
单片机
centos
网络
python
intellij-idea
ide
ubuntu
linux
运维
编译过程
编译程序结构
阿里云
音视频
云计算
人工智能
数据分析
数据挖掘