1. LR分析

  • LR分析是干什么用的?简单来说就是你在编程时编译器用来判断你输入的符号串是否合法以及时哪一种类型。官方的说法时LR分析是一种能根据当前分析栈中的符号串和向右顺序查看输入串的k个符号就能唯一确定分析器的动作是移进还是归约和使用哪一个产生式规约。现在学习编译原理一个月了,到现在所学的内容只感到正则文法判别、自上向下分析、自下向上分析、有限自动机这几个主题有点用,但这些也是在设计编程语言的初始阶段,还有很多的内容需要学习。

2. LR组成部分

  • 总控程序:名字高达上,其实就是流程判别的实现代码
  • 分析表:这个最为重要,后面就是讲如何构建分析表。
  • 分析栈:分析栈包括符号栈和状态栈,很简单,属于数据结构的内容。

3:LR(0)项目集规范族的构建

  • 项目集规范族的构造方式有三种,这里采用第三种方式:把拓广文法的第一个项目{S’->*S}作为初态集的核,通过求核的闭包和转换函数,求出LR(0)项目集规范族,在由转换函数建立状态之间的连接关系。哇!好多陌生的词?什么叫拓广文法?什么叫核?…其实都很简单,看一个例子就能全部明白,不要被专业名词吓倒。

    利用上面的内容构建项目集规范族时,请记住下面的内容:若状态中包含如A->a*…B的项目,则型如B->*y的项目也在u此状态中。B为非终结符,y可为终结符或非终结符。

LR(0)分析表的构造

  • 分析表由两部分构成,一部分为动作表,表示当前状态下面临输入符号时应该做的动作为移进、归约、接受还是出错。动作表的列标只包含终结符和结束符#;另一部分为转换表,它表示在当前状态下面临文法符号时应该转向的下一个状态。
    若项目A->a*属于I(K),则对任何终结符a和#置ACTION[K,A]和ACTION[K,#]为rj_{j}j​,j为在文法G‘中某产生式A->a的序号。rj_{j}j​动作的含义为把当前文法符号栈顶的符号串a归约为A,并将栈指针从栈顶向下移动|a|个长度,符号栈中弹出|a|个符号,非终结符A编程当前面临的符号。
  • 有限状态自动机的实现请看我的另一篇博客。

LR(0)项目集规范族和分析表的构造相关推荐

  1. LR(0)项目集规范族的构造及LR(0)分析表的构造

    求出文法的所有项目,按一定规则构造识别活前缀的NFA, 再确定化为DFA确定化的工作量较大,而且容易出错,实际应用中并不使用,这里介绍的目的仅仅是为了便于理解.具体见识别活前缀的有限自动机构建方法_用 ...

  2. 编译原理LR(0)项目集规范族的构造和分析的构造

    学编译原理的时候,感觉什么LL(1).LR(0).SLR(1).LALR(1)思想满天飞. 而且做题的时候,一不留意,一道题就写了三页纸了. 就拿今天这个玩意儿来讲,我真的是考试前花了最多的时间,搞懂 ...

  3. 编译原理中LR(0)项目集规范族的构造

    本文转载自:  http://www.cnblogs.com/lazycoding/archive/2012/05/12/2497065.html 此文略长.我也没想到这写起来这么多,但对构造过程绝对 ...

  4. 编译原理LR(0)项目集规范族的构造详解

    学编译原理的时候,感觉什么LL(1).LR(0).SLR(1).LALR(1)思想满天飞. 而且做题的时候,一不留意,一道题就写了三页纸了. 就拿今天这个玩意儿来讲,我真的是考试前花了最多的时间,搞懂 ...

  5. lr0文法分析表示例_LR(0)和SLR分析表的构造

    上篇文章中,我已经说到了,LR(0)分析表是LR(0)分析器的重要组成部分,它是总控程序分析动作的依据,他是由LR(0)项目集规范族来进行构造的.他的结构主要有两个部分ACTION 和GOTO 先看看 ...

  6. 编译原理,C语言实现LR(0)分析(扩展文法的生成、项目集规范簇的生成、ACTION GOTO表的生成、句子的分析)

    编译原理,C语言实现LR0分析扩展文法的生成.项目集规范簇的生成.ACTION GOTO表的生成.句子的分析 演示 演示所用文法和句子 (1)根据提示输入文法的个数 (2)输入文法 (3)扩展文法的生 ...

  7. [编译原理]构造LR分析器和SLR移进归约分析表

    目录 目标 1.基础知识引入 1.1 文法 1.2 拓广文法 1.3 全部的项目集 2. 计算文法的LR(0)项目集的.识别活前缀的DFA 2.1 分析得到各个项目集 2.2 构建SLR分析表中的移进 ...

  8. 4.2.5 预测分析法与预测分析表的构造

    4.2.5 预测分析法与预测分析表的构造 预测分析法也称为 LL ( 1 )分析法.这种分析法是确定的自上而下分析的另一种方法,采用这种方法进行语法分析要求描述语言的文法是 LL ( 1 )文法. 一 ...

  9. C++实现LR(1)分析表的构造

    构造LR(1)分析表的算法参考了龙书本科教学版: 龙书给的例子:(1)S′→S(2)S→CC(3)C→cC∣d\begin{aligned} &(1) S' \rightarrow S \\ ...

最新文章

  1. C++ string字符串的比较是否相等
  2. 01、WPF 中 URI 解析
  3. IT菜鸟,希望大家赐教
  4. 王元编辑口语资料-中国传统之节日
  5. 面向 CPython GIL 的多线程编程要点
  6. 串行通信------字符串发送和十六进制发送
  7. c语言实现辗除法,辗除法什么东西哦?
  8. SAP UI5 应用开发教程之十二 - 使用 CSS 类对 UI 进行进一步美化
  9. 图说:为什么Java中的字符串被定义为不可变的
  10. BlockingQueue的使用
  11. html中设置边框形状为齿状,在CSS中制作锯齿状的三角形边框
  12. 女员工采购电影票抽中黄金 老板:必须上交 不上交就开除
  13. 线程池选择使用的hash算法
  14. HttpClient工具类 HttpClientUtils.java
  15. django restframework Serializers
  16. iOS安全攻防(十三):数据擦除
  17. 兰勃特等角圆锥(Lambert Conformal Conic)投影正反变换
  18. 三星android智能手机usb驱动程序,三星智能手机USB驱动
  19. 惠普打印机墨盒更换教程_hp打印机墨盒怎么安装 hp打印机墨盒安装方法【详解】...
  20. 静态路由 华三静态路由

热门文章

  1. echart 世界地图发光_Echarts世界地图中国分区显示
  2. cad尺寸标注快捷键_为什么在CAD布局中标注模型空间图形尺寸差别很大?
  3. Idea 使用技巧(MAC)
  4. 【懒人必备】一款Android自动设置代理神器
  5. 【OCR】CTC loss原理
  6. x小学计算机知识竞赛方案,竞赛方案精编小学竞赛方案
  7. 微信小程序:地图导航功能实现完整源代码附效果图,讲解
  8. Simulink方法总结和避坑指南(一)——Simulink入门与基本调试方法
  9. 2021-10-15 二、链表
  10. 基于stm32f103的LM6029-12864液晶屏开发(代码资源地址在最后)