搜索
查看
编辑修改
首页
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
第一阶段-第一章 你好Python_第一章 你好python csdn
2
【RabbitMQ | 第六篇】消息重复消费问题及解决方案_rabbitmq怎么解决重复消费
3
helm安装mysql集群_helm mysql主从
4
图神经网络,如何变深?
5
helm命令部署mysql_helm部署mysql tgz的示例
6
4、内网安全-隧道&内网穿透上线&Ngrok&FRP&NPS&SPP&EW项目_内网安全-隧道搭建&穿透上线&frp&nps&ngrok
7
命名实体的识别_命名实体识别流程
8
axios 传递参数的方式(data 与 params 的区别)_axios post data
9
Vue+Elementui历史导航标签实现_elementui tabs历史页面
10
热仿真中稳态与瞬态的区别_fulent仿真稳态与瞬态的区别
当前位置:
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
centos7
配置
zookeeper
本地
模式
与集群
模式
的详细教程_
zookeeper
standal...
主要介绍
zookeeper
的本地
模式
于集群
模式
的
配置
,包含集群
启动
于关闭脚本,以下为
配置
步骤。_
zookeeper
st...
赞
踩
article
Android
中
Gradle
与
AGP
版本
对应关系表_
android
gradle
版本
对应...
主要展示
android
Gradle
与
AGP
版本
对应_
android
gradle
版本
对应
android
gradle
...
赞
踩
article
负载
均衡
算法
-
最少
连接数
均衡
_
负载
均衡
最小链接 如何实现...
最少
连接数
均衡
:客户端的每一次请求服务在服务器停留的时间可能会有较大的差异,随着工作时间加长,如果采用简单的轮询或随机均...
赞
踩
article
「
应用
架构
」
TOGAF
建模之
应用
架构
:
系统
用例
图
...
系统
用例
图
显示了
应用
程序服务的使用者和提供者之间的关系。
应用
程序服务被参与者或其他
应用
程序服务使用,而
应用
程序
用例
图
通过...
赞
踩
article
如果你觉得
功能
测试
只是
点
点
点
,
那请离开
测试
这行_
点
点
点
就是
功能
测试
吗...
功能
测试
只是
点
点
点
,
那请你离开
测试
这行 面试过一些应届生
,
都很坦诚 “我技术不太好
,
先做
测试
,
以后有机会转开发”。 国外...
赞
踩
article
flask
-
restful
与
flask
的
restful
风格下
安全
认证
_
flask
restful
r...
flask
实现
flask
Restful什么是
restful
网上解释很多,怎么用
flask
实现
restful
例子也数...
赞
踩
article
学习
安卓
开发
!想找工作
的
你
还
不
看这份资料就晚了!
面试
必问_自学
的
安卓
开发
如何
找工作...
前言最近有
不
少人问我这样一个问题:「我刚接触编程,准备学习下Android
开发
,但是担心现在市场饱和了,Android开...
赞
踩
article
leetcode
python
-
Longest
Substring
Without Repeat...
# Given a string, find the length of the
longest
substring
w...
赞
踩
article
TOGAF
架构
开发方法
—G阶段:
实施
治理
_
togaf
实施
治理
...
TOGAF
架构
开发方法
的G阶段旨在
实施
治理
,确保项目符合目标
架构
,执行适当的
架构
管理功能,并建立
架构
契约。
togaf
实...
赞
踩
article
CTP
开发爬坑指北(
一
)_
报单
编号
和
报单
引用
的
区别...
众所周知,天下大坑共
一
石,
CTP
独占八斗。进行
CTP
开发时,里面需要注意
的
地方比较多。今天给大家聊
一
聊
CTP
中暗藏
的
一
些...
赞
踩
article
使用Java代码实现
进制
转换——十
进制
转十六
进制
、八
进制
、
二
进制
_
java24
的
二
进制
八
进制
十
进制
1...
使用Java代码对十
进制
数进行
二
进制
、八
进制
、十六
进制
转换_
java24
的
二
进制
八
进制
十
进制
16
进制
的代码
java24
的...
赞
踩
article
关于
kafka
的
isr
机制
_
kafka
isr
机制
...
1. 问题Data ReplicationKafka 的 Data Replication 需要解决如下问题:怎样 Pr...
赞
踩
article
leetcode
-#3
Longe
s
t
Sub
s
tr
in
g
Without Repeat
in
g Ch...
The code writen
in
leetcode
, thi
s
s
nap
s
hot code could pa
s
s
.i...
赞
踩
article
深度解析:2023年
软件
测试
的10个
新
趋势
和
挑战
_
测试
新
技术
与
新
方向...
随着
技术
的飞速发展,
软件
测试
的角色和责任也在经历重大转变。我们在2023年目前所面临的一些
新
趋势
和
挑战
值得所有从业人员关...
赞
踩
article
git
如何
删除
分支_
git
删除
分支...
在Git中
删除
分支的操作分为两种:
删除
本地分支和
删除
远程分支。_
git
删除
分支
git
删除
分支 ...
赞
踩
article
Flink
CDC
_
flink
cdc
表变更...
Flink
社区开发了
flink
-
cdc
-connectors 组件,这是一个可以直接从 MySQL、PostgreS...
赞
踩
article
什么是
STC89C52
单片机
...
什么是
STC89C52
单片机
_stc89c52stc89c52
STC89C52
是一个低功耗,...
赞
踩
article
js
-
时间
复杂度
和
空间
复杂度
的计算方式_
js
的
时间
复杂度
为 (lg n) 的
算法
...
时间
复杂度
和
空间
复杂度
是考量
算法
性能的重要指标,尤其是
时间
复杂度
,因为计算
时间
的快慢,直接影响到用户的体验,而占用的内存...
赞
踩
article
阿里
云
视频
点播
获取
视频播放信息
nodejs
版
_
阿里
云
点播
获取
播放记录...
语言:
nodejs
参考文档:https://help.aliyun.com/document
_
detail/101416...
赞
踩
article
Lambda
表达式
下
访问
外部
变量
_
lambda
表达式
里面怎么用
外部
变量
...
Lambda
表达式
可以
访问
给它传递的
变量
,
访问
自己内部定义的
变量
,同时也能
访问
它
外部
的
变量
。不过
lambda
表达式
访问
外...
赞
踩
相关标签
hadoop
zookeeper
虚拟机
VMware
centos
android
架构
测试
软件质量
python
restful
flask-restful
c++
金融
leetcode-#3 Longest Substring Witho
lengthOfLongestSubstring
软件测试
自动化测试
程序人生
功能测试
性能测试
git
flink
数据库