LR分析法从理解到运用
1、 LR分析器
解释:
分析栈包括符号栈和相应状态栈
分析表包括ACTION表和GOTO表
Ⅰ动作表元素action[Si,aj] 表示当前栈顶状态为S,输入符号为a时所执行的动作。有四种情况:S(移进),r(归约),acc(接受),error(出错)。
Ⅱ状态转换表元素goto[Si,xj] 表示当前栈顶状态为S,文法符号为x时应转入的状态。
所有LR分析器的总控(驱动)程序都一样,区别他们的是分析表。
工作原理:是在总控程序的控制下,从左到右扫描输入符号串,根据分析栈中的状态和文法及当前输入符号,按分析表完成相应的分析工作。
2.LR分析过程
当我们已经具备了LR分析器,来看看它是怎样工作的吧!
(1) 让初始状态S0进状态栈,句子的左界符#进符号栈。
(2) 句子除去左界符的部分为输入符号,根据输入符号和状态栈栈顶元素,再查动作表,执行相应动作。
移进:S下面会有个下标,代表不同的状态,查动作表查到S,则Si进状态栈,输入符号进符号栈。
归约:r下面也有个下表,代表不同的产生式,查动作表查到r,则按ri代表的产生式进行规约,即符号栈里产生式右边的弹栈,再将产生式左边的压进符号栈。注意,此时要查状态转换表了,goto[Si-n,xj]中n表示产生式右边符号串的长度,xj对应此时符号栈栈顶元素。然后原Si,Si-1,Si-n+1和xj都要弹栈,查表查到的Si(表中可能只会显示i)进栈。
接受:查动作表查到acc则表明分析成功,停止分析。
出错:查动作表查到空白,则报告出错信息。
我们用到GOTO表iff在ACTION表中查到reduce(归约)
- 自底向上分析法的关键问题=>确定句柄=>求可归前缀
最左规约作为规范规约,我们容易观察到用哪个产生式规约完全取决于当前句型的前部
可归前缀:每次采取归约动作前的符号串部分(识别它就是LR分析法的关键)
活前缀:规范句型中形成可归前缀之前包括可归前缀的所有前缀
可归前缀是句柄在后端的活前缀
对任何一个上下文无关文法,只要能构造出它的识别可归前缀的有限自动机,就可以构造其相应的分析表。
相关文章:

Android 判断SD卡是否存在及容量查询
转载:http://blog.csdn.net/xinzheng_wang/article/details/7827775 Android 判断SD卡是否存在及容量查询的简单方法如下:首先要在AndroidManifest.xml中增加SD卡访问权限 [html] view plaincopy <!-- 在SDCard中创建与删除文件权限 --> <uses…
Spring Boot 教程(三): Spring Boot 整合Mybatis
教程简介 本项目内容为Spring Boot教程样例。目的是通过学习本系列教程,读者可以从0到1掌握spring boot的知识,并且可以运用到项目中。如您觉得该项目对您有用,欢迎点击收藏和点赞按钮,给予支持!!教程连载中…

电子学会 软件编程(图形化)一级训练营
「青少年编程竞赛交流群」已成立(适合6至18周岁的青少年),公众号后台回复【Scratch】或【Python】,即可进入。如果加入了之前的社群不需要重复加入。 电子学会 软件编程(图形化)一级训练营 试题来源 青少…

win10 安装 python报错-已安装这个产品的另一版本
尝试清理干净电脑上关于之前安装的Python3,在 输入winR 输入cmd 回车 输入 python 回车 却看到 C:\Users\86136>python ‘python’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 但是再安装,又报出严重错误。 最终解决方案&am…

POJ1276Cash Machine
http://poj.org/problem?id1276 题意 : 给你一个目标钱数,再给你钱币的种数和钱币的面值,让你用这些钱凑出不大于目标钱数的钱然后输出这个最接近且不大于目标钱数的钱。 思路 : 背包问题,还是多重背包,就…

Python中处理时间 —— time模块
time模块 逝去的秒数 逝去的秒数表示从某个时间(Python中是“Thu Jan 1 07:00:00 1970”)开始到现在所经过的秒数。 使用 time.time() 函数可以获得逝去的秒数: >>time.time() 1388330058.8643time.time()返回一个浮点数,可…

学编程必看:逻辑思维测试
2021.09 电子学会图形化一级考试有这样的一个题目: 如下图所示,井深7米,有个蜗牛从井底往上爬,白天爬3米,晚上往下坠2米,问蜗牛几天能从井里爬出来?( ) A. 4B. 5C. 6D. …

explicit specialization of ‘Race‘ after instantiation ,implicit instantiation first required here。
报错1: E:\project\qt\Pokemon3\PokemonServer\pokemon.cpp:470: error: specialization of ‘Race::Race() [with int N 0]’ after instantiation Race<0>::Race() : PokemonBase(ATK) ^ 报错2: explicit specialization of ‘Race’ after ins…

(转载)Linux usbtouchscreen驱动分析
在Linux内核中自带USB触摸屏驱动,以linux-2.6.33.3\drivers\input\touchscreen.c为例,进行解析: 1.驱动加载: static int __init usbtouch_init(void){return usb_register(&usbtouch_driver); //驱动注册} 其中usbtouch_dr…

关于事务隔离级别
2019独角兽企业重金招聘Python工程师标准>>> 第一种 read uncommitted 此状态下脏读,不可重复读,虚读都有可能发生。此状态下两个人同时操作一个数据库表一边开启事务没有提交,另一边也开启事物开始更改数据但是也没有提交&#x…

Datawhale组队学习周报(第047周)
本周报总结了从 2021年01月03日至2022年01月09日,Datawhale组队学习的运行情况,我们一直秉承“与学习者一起成长的理念”,希望这个活动能够让更多的学习者受益。 第 32 期组队学习一共 11 门开源课程,共组建了 11 个学习群&#…

讲座记录:从码农到架构师(精简版)
1.框架学习 不要过于在乎细节 学封装思想 不追新 否则太累 每个框架的设计理念不同 spring 比structs 优秀在哪? 关注增量而非全量 2.如何快速学习一门新技术 “新框架的产生速度远大于个人的学习速度” 先快速学习:了解模板,套路-重复出现的代码 类似做…

Enterprise Library 4 数据访问应用程序块
Enterprise Library 数据访问应用程序块简化了实现常规数据访问功能的开发任务。应用程序可以在各种场景中使用此应用程序块,例如为显示而读取数据、传递数据穿过应用程序层( application layers)、以及将修改的数据提交回数据库系统。应用程序块包含对存储过程和内…
虚拟货币市值回调到4100亿整数关口,EOS逆势站上100关口
虚拟货币虚拟货币市值在过去24小时中,虚拟货币整体回调,市值为4100亿美元。只有EOS逆势上扬,已经站上了100元(17.5美元)上方。虚拟货币市场距离12月份最高点几乎只有一步之遥。EOS走势EOS这种疯狂的势头是很多人预料未…

【NCEPU】韩绘锦:图信号处理与图卷积神经网络
韩绘锦是华北电力大学数理系大四的学生,LSGO软件技术团队(Dreamtech算法组)/Datawhale成员,也在天池比赛中取得了不错的成绩,现保送大连理工大学软件工程学院深造。 希望参与我们线下组队学习的同学,可以在…

什么是python第三方库
Python计算生态 标准库 第三方库 标准库:随解释器直接安装到操作系统中的功能模块 第三方库:需要经过安装才能使用的功能模块 模块的概念:库Library、包Package、模块Module 出处:北理工Python慕课

Task01:青少年软件编程(Scratch)等级考试模拟卷(二级)
试题来源 青少年软件编程(Scratch)等级考试试卷(二级)【2019.09】青少年软件编程(Scratch)等级考试试卷(二级)【2019.12】青少年软件编程(Scratch)等级考试试…

App功能测试的注意点
好几个月没有写博客记录学习心得了,这次回老家深夜闲来无事写一篇记录下这段时间的面试心得,这次面试过程很多面试官都问APP的有关测试,下面我就自己的认识和工作中的经验来谈谈自己对APP测试的认识: 1.push消息推送测试 检查push…

编程以外积累: 如何给项目生成类似VS2008的说明文档
1:【下载】 目前微软提供的官方开源工具 Sandcastle 结果跑到项目中一看,抬头就来了这么一段: The Sandcastle CodePlex project is no longer under active development by Microsoft and as such, there will be no future releases to t…

python的turtle绘图体系入门必看(一)
1 设置窗体 turtle.setup(width,height,startx,starty) 说明: setup()函数不是必须的前两个参数代表窗体的横向宽与纵向长后两个参数可选,表示窗体距离屏幕的横向距离和纵向距离(也可以理解为窗体左上角距离屏幕左上角的横向和纵向距离&…

交换两个变量的值不使用第三个变量(Java)
关于这个问题网上有好多答案,最近有人说这是个奇葩问题 个人测试了一把,如果是普通的数字的话,基本上没有问题 public static void main(String[] args) {int a 2147483647;int b 2147483646;// aab;// ba-b;// aa-b;// b a (a b) * 0; …

Task02:青少年软件编程(Scratch)等级考试模拟卷(二级)
电子学会 软件编程(图形化)二级训练营 试题来源 青少年软件编程(Scratch)等级考试试卷(二级)【2019.09】青少年软件编程(Scratch)等级考试试卷(二级)【2019…

Visual Studio 15.7预览版4改进Git、C++支持
\看新闻很累?看技术新闻更累?试试下载InfoQ手机客户端,每天上下班路上听新闻,有趣还有料!\\\对于即将到来的Visual Studio 2017 15.7,微软已经发布了多个新的预览版本。这些版本的变更很有限,似…

python库引用的3种方式比较
方法一 import 库名 使用方式: <库名>.<函数名>(<函数参数>) 方法二 from 库名 import 函数名/* 使用方式: <函数名>(<函数参数>) 第一种方法可以避免第三方库函数和自定义函数重名 第二种更简洁,适用于引用…

使用livereload实现自动刷新
livereload是一个web开发辅助工具,当我们修改完html、css和js的时候会自动刷新浏览器,解放码农的双手。这样在双屏切图、写js代码的时候会提高很多效率。livereload有很多版本,比如基于ruby的版本,我们今天介绍的是nodegruntchrom…

Task03:青少年软件编程(Scratch)等级考试模拟卷(二级)
电子学会 软件编程(图形化)二级训练营 试题来源 青少年软件编程(Scratch)等级考试试卷(二级)【2019.09】青少年软件编程(Scratch)等级考试试卷(二级)【2019…

java静态代理与动态代理
2019独角兽企业重金招聘Python工程师标准>>> 代理模式是java常见的设计模式。其目的是为其他对象提供一个代理以控制对某个真实对象的访问。通过代理类这一中间层,有效控制对真实委托类的对象的直接访问,同时可以实现自定义的控制策略。 根据…

python的turtle绘图体系入门必看(二)
1 turtle画笔控制函数 画笔操作后一直有效,一般成对出现 turtle.penup() 别名 turtle.pu() 画笔抬起,海龟在飞行(不在画布上留下图案) turtle.pendown() 别名 turtle.pd() 画笔落下,海龟在爬行 turtle.pensize(width) 别名 turtle.width(wi…

MSSQL2005外网IP的1433端口开启方法
打开SQL Server Configuration Manager,在SQL server配置管理器展开SQL server 2005网络配置-->SQLEXPRESS 的协议-->双击TCP/IP协议-->ip地址将1433端口启用,重启下MSSQL服务才能生效,示例图: 重启下MSSQL服务才能生效转…

Rokid webhook 指南 手把手教你做个懒人
若琪用户 Amadeus 在社区里分享过很多视频。当你进门10秒后还未关闭房门,若琪会一直报警提醒;当你走进门后将门反锁的那一刻,若琪会为你播报今天的天气、为你播放设定的轻音乐。 看到这些视频中对传感器、智能情景的熟练运用,你很…