LR语法分析器

特点:
1)由表格驱动
2)几乎适用所有程序设计语言
3)无回溯的移入归约技术
4)可以尽早检测到错误

什么是项?这里所说的项是一种状态,用来在LR语法分析中对集合进行描述。
例如产生式 A -> XYZ 会有四个项
A -> ▪XYZ
A -> X▪YZ
A -> XY▪Z
A -> XYZ▪

产生式 A -> ε 只有一个项 A -> ▪

一个规范的LR(0)项族集提供了构建确定有穷自动机的基础。称为LR(0)自动机。
LR(0)项集中的项共分为四大类:
1)归约项目:归约结束,原点在最右端。如:A -> a▪
2)接收项目:左端为 S’ 的归约项目。如:S’ -> a▪
3)待约项目:原点后为非终结符的项目。如:A -> α▪Bβ
4)移进项目:原点后为终结符的项目。如:A -> α▪aβ

LR(0)自动机

构建一个LR(0)自动机,会涉及到一个增广文法和两个函数(CLOSURE和GOTO)两个函数之前都有了解了,分别用于求闭包和移进。增广文法含义如下:如果 G 是一个以 S 为开始符号的文法,那么 G 的增广文法 G’ 就是在 G 中加上新开始符号 S‘ 和产生式 S’->S 而得到的文法。
这里以示例文法来讲解自动机的构成

E ——> E + T | T
T ——> T * F | F
F ——> ( E ) | id

  1. 先画出I0,使用增广文法,构造E’->E,然后求E的闭包得到E -> E + T、E -> T、T -> T * F、T -> F、F -> ( E )、F -> id,以上构成I0集合,然后在他们前面都加上一个点,得到

  2. 对 E 进行GOTO操作,就是把I0中所有包含有 ▪E 的项拿出来,变成 E▪,构建成为I1

  3. 对 T 进行GOTO操作,得到I2

  4. 对F进行GOTO操作,得到I3

  5. 对( 进行GOTO操作,得到I4,由于此时▪后为非终结符,故可以进行闭包操作,对F求闭包

  6. 对 id 进行GOTO操作,得到I5

此时对I0的操作全部结束,图应为这样

  1. 对I1中的E’->E进行归约操作,得到accept,注意只有开始符号才可以进行这样的操作。

  2. 对+进行GOTO操作,得到I6

  3. 之后,对I2、I3由于已经为归约项目,所以无操作)、I4、I5(由于已经为归约项目,所以无操作)都进行跟之前类似的操作,可以得到I7、I8


    第二轮画完后是这样,为了便于区分,这里使用红色标记第二轮,值得注意的是I4部分很容易出现漏画的情况。

  4. 对新生成的I6、I7、I8进行处理,得到I9、I10、I11



    此时自动机的图为这样:

  5. 最后对I9、I10、I11处理得到完整的自动机。

至此,LR(0)自动机构建完毕。

此时我们再对归约式分析时就可以采用这样的方法来进行分析

id * id =》 F * id =》 T * id =》 T * F =》 T =》 E

LR技术——LR(0)自动机的构建相关推荐

  1. 技术系列课|从0到1 构建实时音视频引擎

    随着5G和AI时代的到来,在线实时互动在越来越多的场景中被使用,支撑这一功能实现的关键性技术--RTC也受到了空前的关注.本节技术系列课,来自网易云信的讲师将以做菜的过程为比喻,深入浅出地讲述如何从0 ...

  2. 推荐书籍:WebRTC技术详解 从0到1构建多人视频会议系统

    WebRTC技术应用领域: 5G商用.在线教育.视频会议.在线医疗.直播短视频 为什么学习WebRTC这么难? NO.1 中文技术规范少 NO.2 从业人员少,专业技术性强 NO.3 技术覆盖面广,难 ...

  3. 从0到1构建数据科学竞赛知识体系,有夕,鱼佬,茂霖等竞赛大咖将特邀分享...

    从0到1构建数据科学竞赛知识体系 这是怎样的数据竞赛知识体系 为了帮助更多竞赛选手入门进阶比赛,通过数据竞赛提升理论实践能力和团队协作能力.DataFountain 和 Datawhale 联合邀请了 ...

  4. 从0到1构建大数据生态系列1:数据蛮荒中的拓荒之举

    缘起 我们都知道,当前大数据的需求基本属于遍地开花.无论是帝都.魔都,还是广州.深圳,亦或是全国其他各地,都在搞大数据:不管是不到百人的微小公司,还是几百上千人的中型公司,亦或是上万的大型公司,都在需 ...

  5. 企业如何从 0 到 1 构建整套全链路追踪体系

    简介:本文将分享 ARMS 在全链路追踪领域的最佳实践,分享主要分为四部分.首先,是对分布式链路追踪的整体简介.其次,是对 ARMS 在分布式链路追踪领域的核心能力进行介绍.然后,介绍如何从 0 到 ...

  6. 73页PPT,教你从0到1构建用户画像系统(附下载)

    导读:用户画像就是给用户打标签,那么有哪些标签类型?用户画像的开发包括哪些阶段?每个阶段有哪些输出?用户画像系统有哪些数据结构?--你将在本文分享的PPT中找到这些问题的答案,这份干货将带你全面了解用 ...

  7. 从0到1构建支撑企业自动化运维体系

    关注我们获得更多内容 精彩预告:第八届数据技术嘉年华大会将于2018年11月16日~17日在北京市朝阳区东三环中路61号富力万丽酒店盛大开启.本次大会邀请互联网领先企业的数据库专家,国产数据库的领军人 ...

  8. 【干货】如何从0到1构建用户画像系统.pdf(附76页pdf下载链接)

    随着数字化浪潮的到来,用户画像系统也被提及的越来越多,在整个精细化运营过程中,用户体画像体系的搭建起着不可或缺的作用. 今天给大家分享一份干货文档<如何从0到1构建用户画像系统.pdf>, ...

  9. 一块链习公开课:从 0 到 1 构建去中心化应用 | ArcBlock 预告

    2019 年 6 月 16 日 上午 10 点,ArcBlock 区块基石研发副总裁陈天将出席"一块链习"主办的第 30 期<区块链技术公开课 100 讲>,探讨分享今 ...

最新文章

  1. 语言输出换行符号是什么_世界上最难的5种编程语言
  2. c 连接oracle的参数,[20210203]19c登录连接改变一些参数.txt
  3. java异常——捕获异常+再次抛出异常与异常链
  4. 160个Crackme034拆解KeyFile验证升级版
  5. php中$_get和$_post如何使用,怎么使用超级全局变量$_POST与$_GET
  6. kingcms php 排序 标签,修改PHPCMS V9列表排序,listorder、order排序功能的方法
  7. js变量和java变量相等,js中变量和jsp中java代码中变量互相访问解决方案
  8. [2020-ECCV]PIPAL-a Large-Scale Image Quality Assessment Dataset for Perceptual Image Restoration论文简析
  9. 力扣812.最大三角形面积
  10. linux看mysql日志命令_Linux日志查看之cat 命令使用介绍
  11. proc wifi 开启_49.Linux-wpa_cli使用之WIFI开启,扫描热点,连接热点,断开热点,WIFI关闭(49)...
  12. IE7 下载EXCEL注意地方
  13. 读《深入浅出设计模式》
  14. 查看磁盘文件夹大小工具WinDirStat
  15. VMware的XP虚拟机联网
  16. 理论综述与创新---结构洞的新应用
  17. 微信小程序 实现路线规划
  18. 全国2012年1月高等教育考试
  19. php下对港澳台身份证进行验证
  20. 为activity设置主题theme

热门文章

  1. 腾讯文档-协同更新操作
  2. PartitionMagic合并分区后无法打开合并目录的解决办法
  3. 逻辑复制mysql_物理复制 vs 逻辑复制,该如何选择?
  4. 宅基地信息调查系统(补充调查)
  5. 阶乘和数(python3)
  6. php课程实验总结报告_php实训心得体会范文
  7. 你好,明天!再见,传智!----致全体传智播客同仁的一封公开信
  8. SuperMap iManager k8s许可模块介绍
  9. 20个可用于商业用途的免费 CC0 授权的高分辨率图库
  10. 如何干净地删除labview