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

这篇具有很好参考价值的文章主要介绍了LR(0)项目集规范族的构造及LR(0)分析表的构造。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

求出文法的所有项目,按一定规则构造识别活前缀 NFA, 再确定化为 DFA 确定化的 工作量较大 ,而且 容易出错 实际应用中并不使用 ,这 里介绍的目的仅仅是为了 便于理解。具体见 识别活前缀的有限自动机构建方法_用编程写诗的博客-CSDN博客
因此这里为了减轻工作量介绍一种实用的方法:
通过 闭包函数 转换函数 直接求出 LR(0) 项目集规范族,再由转换函数建立 状态之间的连接关系得到识别活前缀的 DFA。
闭包函数:构造项目集 I Closure(I)
I 的任何项目都属于 Closure I
A→α .Bβ 属于 Closure I),则对 任何 关于 B 的规则 B→γ , 项目 B→·γ 也属于 Closure I
重复执行上述两步骤,直到 Closure I )不再增大为止
例:
LR(0)项目集规范族的构造及LR(0)分析表的构造
状态转换函数 GO(I,X)
假定 I 是拓广文法 G′的任一项目集,X 为一 文法符号 ,状态 转换函数 GO(I,X) 的定义如下:
GO(I,X) = Closure(J)
其中,J={ A→αX.β│A→α.Xβ∈ I }
新状态的初始项目即圆点移动后的项目称为核。 即 J 称为
LR(0)项目集规范族的构造及LR(0)分析表的构造
识别文法所有活前缀的DFA
使用 GO 函数可以将拓广文法 G′的 LR(0)项目集规范族联结 成一个识别文法活前缀的DFA。具体步骤如下:
a) 置项目
S′→ ·S 为初态集的 核心 项目,然后对其求闭包, CLOSURE({S′→·S} 得到 初态的项目集
b) 对初态集或其它所构造的项目集应用转换函数 GO(I X)= Closure J
c) 重复 b) 直到不出现新的项目为止
d) 状态转换函数 GO(I X) 建立项目集之间的关系
例子:
LR(0)项目集规范族的构造及LR(0)分析表的构造

 LR(0)分析表的构造文章来源地址https://www.toymoban.com/news/detail-485621.html

LR(0) 项目集规范族为 C={I 0 ,I 1 ,…,I n } S’→. S 称为初态
(1) A→ α·aβ I k GO( I k ,a)= I j ,
若a V T Action [k,x]=S j ( 表示移进 )
若a V N Goto [k,x]=j ( 表示归约 )
(2) A→ α· I k , a ∈V T ( 包括 #) ACTION[ k,a ]= rj (假定产生式 A→ α 是文法 G’ 的第 j 个产生式)
(3) S’箭头 I k , ACTION[ k,# ]= acc
(4) GO(I k ,A)=I j , GOTO[k,A]=j
(5) 分析表中凡是不能用以上规则填入信息的空白格均置 上“报错标志”
根据这个构造方法我们可以得到上面文法的LR(0)分析表
LR(0)项目集规范族的构造及LR(0)分析表的构造

到了这里,关于LR(0)项目集规范族的构造及LR(0)分析表的构造的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【编译原理】LR(1)分析法:C/C++实现

    🌈 个人主页: Sarapines Programmer 🔥 系列专栏: 《编译原理奇遇记》 🔖墨香寄清辞:空谷幽篁风动,梦中仙鹤月明。 辗转千秋豪情在,乘风翱翔志不移。 目录结构 1. 编译原理之LR(1)分析法概念 1.1 编译原理 1.2 LR(1)分析法 2. 逆波兰式的产生及计算 2.1 实验目的 2.2 实验要求

    2024年02月03日
    浏览(36)
  • QT练手小项目-——天气播报小狗(ui展示分析,构造实现,json格式数据分析,界面交互,天气图标处理,小狗语音)

    前言         经过之前一段时间的QT学习,做出一个小软件来总结自己掌握关于qt的知识点。网络上有许多免费的天气接口(api),有xml格式的,也有json格式的。具体xml和json有什么区别,这里我就不去深究了,我们这里用的是一个json格式的数据,所以 重点是对json格式的数据

    2023年04月17日
    浏览(75)
  • 最长公共子序列(详细代码 注释 分析 以及求出最长公共子序列内容方法)

    文章有些长,希望能够耐心看完,并且对你有帮助,文章是自己看了书之后,总结的,如果有什么错误的地方,欢迎指出。 一些基本的概念: 子序列: 原序列中删除若干个元素得到的序列,即原序列中可以不连续的一段 子串: 原序列中任意个连续的序列元素组成的序列,

    2023年04月15日
    浏览(46)
  • 编程导航算法通关村第1关 | 单链表的基础与构造方法

    什么是链表 不强制要求数据在内存集中存储,可以分散存储在内存中。例如数据{1,8,6,2},在链表的存储状态可能如图示: 只要让每一个元素知道它下一个元素的位置,就可以依次找出各个元素。 那么,链表是如何实现这种存储数据间的关系呢?为每一个元素配置一个指针,

    2024年02月14日
    浏览(33)
  • 编程导航算法通关村第 1 关|青铜 - C++是如何构造出链表的

             在C++中,链表是由一系列节点构成的,每个节点包含一个值和一个指向下一个节点的指针。         我们可以用结构体定义出一个节点:               在定义完后,我们将链表进行初始化,并插入5条数据:   接着我们在主函数中进行测试,看看是否能成

    2024年02月13日
    浏览(40)
  • 项目规范 编写规范(范例)

    目录接口参考 项目目录结构设计,增加部分领域模型后缀强制定义,方便统一编码风格。 controller:请求处理 @RestController module:按大业务区分,对多个业务对象数据聚合处理  @Component manager:按业务对象区分,对同一业务对象的数据聚合处理 @Component service:按业务对象区分

    2024年02月14日
    浏览(29)
  • Revit SDK 介绍:ManipulateForm 体量族的修改

    这个例子介绍体量族的修改。包含了创建体量,用API 移动体量族的顶点、边、轮廓(面)。 效果分步骤展示。 整理: 创建拉伸体 m_revitDoc.FamilyCreate.NewLoftForm(true, profiles) 增加一个截面 form.AddProfile(connectingEdge.Reference, param) 移动截面的边 两个函数连用无法得到有有效的值 fo

    2024年02月09日
    浏览(35)
  • Revit中窗族的立面出图设置和构件显隐

    ​ 一、窗族的立面出图设置 Revit中,除了平面的出图设置以外还有立面的出图设置。 例如:如何在立面中,使窗户在精细详细程度显示的是窗的全部主体结构而在粗略/中等详细程度下是显示这样的样式呢?   在窗族样板中,打开立面,绘制所需要的符号线   利用过滤器辅助

    2024年02月07日
    浏览(29)
  • HBase API设置列族的VERSION【留给有缘人】

    关于如何使用 hbase api去设置hbase中数据的version这个问题,本人浏览器都快搜烂了,没找到!无奈只能找找源码,有所得,遂记录,留给有缘人。 想使用hbase的VERSION功能需要两步,一个是在创建列族的时候指定存储多少个VERSION,一个是在scan的时候指定要读多少个VERSION,缺一

    2024年02月17日
    浏览(37)
  • 编译原理笔记(二)文法和语言

    文法概述 :文法是对一种语言的句子的结构描述,是以有穷的集合刻画无穷的集合的一个工具。 字母表的概念 :字母表是元素的非空有穷集合,字母表中的元素称为符号,因此字母表也被称为符号集。 符号串的概念 : 符号串的定义 :由字母表中的符号组成的任何有穷序列

    2024年02月02日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包