空产生式可能会出现移进-规约冲突和规约-规约冲突,消除方法如下:

从以下去除空产生式:

S → ASA | aB | b
A → B
B → b | ∈

我们首先消除 B -> ε

S -> ASA | aB | b | a
A -> B| b | ε
B -> b

现在消除 A -> ε

S→ASA | aB | b | a | SA | AS | S
A → B| b
B → b

基本思想就是将空产生式不断上移,那么下面的空产生式就没有了,然后到最后(或者规约-规约冲突的地方)进行空产生式的排列组合即可。

每日小常识:

能够在编写的过程中发现两种冲突吗?

起始两种问题的本质都是往下走的时候你不知道走哪一个。

对于bison来说,它用的是二义性的文法,它会将你的文法拆开,实际上,一条文法不等同于一个状态机的集合对吧,状态机的切割是自动的,无法预知的,它可能会将一部分拆开,将另一部分合并,大致的推断可以按照各种文法的相同部分合并,相同文法集的不同部分拆开来算,大致就是这样的。如果在不同地方出现选择不清的问题,就是规约-规约冲突和移进-规约冲突。

而空产生式,是非常容易产生冲突的地方,而且还不容易察觉,察觉到还不容易改,所以就是空产生式必须死的原因。

一般来说,规约-规约冲突不是致命冲突,往往可以运行,但是移进-规约冲突往往是致命冲突,是文法上的致命缺点。

编译原理(八)消除空产生式相关推荐

  1. (编译原理)正规文法转正规式(原代码)

    (编译原理)正规文法转正规式 一.实验要求 输入:正规文法 输出:正规式 例: 输入:S->aB B->b 输出:ab 输入:S->aS S->b 输出:a*b 输入:S-&g ...

  2. 编译原理 | 实验四 | 逆波兰式

    目录 一.问题分析 二.算法思想 1.关于分词器 2.关于逆波兰式分析器: 三.实现代码 1.头文件  &  类视图 2.预处理部分 3.逆波兰分析过程 4.计算,输出部分 四.总结 一.问题 ...

  3. 编译原理实验二-逆波兰式生成程序

    一.实验目的和要求: 1. 掌握语法分析的基本思想,并用高级语言编写逆波兰式生成程序 2. 要求利用逆波兰式生成算法编写程序,将从键盘上输入的算术表达式 (中缀表达式)转化成逆波兰式 二.实验平台: ...

  4. 编译原理(四) 消除回溯提取左因子法

    概念简述 回溯:分析工作部分地或全部地退回到之前的一个阶段,在当前阶段采取与之前不同的决策重新推进工作 FIRST(α):令G是一个不含左递归的文法,对G的所有非终结符的每个候选α定义它的终结首符集F ...

  5. 【编译原理】词法分析(正规式与自动机)

    文章目录 一·单词的形式化描述工具 二·有穷自动机(有限自动机) 三· 正规式和有穷自动机的等价性 四· 正规文法和有穷自动机的等价性 一·单词的形式化描述工具 ▶ 正规文法 即3型文法,是一个四元式 ...

  6. 编译原理_正规集和正规式_有限自动机

    ** 正规集和正规式 ** 也就是说程序设计语言的合法单词是 正规集,而正规式可以用来表示正规集 正规集是集合 正规式的等价可以转换为集合的等价来证明 将每一类的单词符号写成一个正规式,通过或运算将这 ...

  7. 【C++实现】编译原理 免考小队 消除一切左递归

    背景 期末考试免考,冲! 实验名称 消除一切左递归 实验时间 2020年5月27日 到 2020年5月31日 院系 信息科学与工程学院 组员姓名 Chocolate.kry2025.钟先生.leo.小 ...

  8. 编译原理之语法分析(预测分析法)

    编译器之语法分析 自顶向下 上下文无关文法 语法树 NFA→CFG 预测分析法 改写CFG 原因 消除二义性 消除左递归 消除左公因子 消除空产生式 消除回路 自顶向下 上下文无关文法 CFG本质上就 ...

  9. 编译原理MOOC笔记

    编译原理笔记 正规文法和正规式 词法分析 前端 词法分析器的任务 词法分析器的实现方法 正则表达式 有限状态自动机 正则表达式到非确定有限状态自动机 语法分析 自上而下的语法分析 直接左递归的消除 间 ...

  10. 【编译原理】-- 第二章(三)(文法的化简改造、无用产生式、产生式的消除、文法的其他表示方法、例题)

    目录 一.文法的化简与改造 1.文法的实用限制 (1)不含无用产生式 (2)不含有害规则 (3)无用符号和无用产生式的消除 2.产生式的消除 算法3: 算法4:ε不属于L(G) 算法5:ε属于L(G) ...

最新文章

  1. 深度学习、人工智能领域顶级书籍推荐
  2. Vue入门三、过滤器filter
  3. 处理 Oracle SQL in 超过1000 的解决方案
  4. const和readonly
  5. MSM--Memcached_Session_Manager介绍及使用
  6. 小工匠聊架构-超高并发秒杀系统设计 07_Plan B 的设计
  7. shell脚本之变量的作用域
  8. 改变静态文本notify 属性_CocosCreator脚本属性个性化定制——下拉列表属性、滑动条属性...
  9. SpringMVC(四)——Ajax技术
  10. Unity的几个特殊文件夹
  11. java cpu 内存使用情况_java高cpu占用和高内存占用问题排查 (转)
  12. 因“突发肾结石” 孙宇晨宣布取消与巴菲特的午餐会面
  13. python thread 多线程
  14. SQL SERVER中的二种获得自增长ID的方法
  15. 3.Python 进阶知识
  16. 西安电子科大2010年的硕士博士考试推荐书
  17. 期货交易常用术语中英文对照表
  18. 范德堡计算机科学硕士,美国范德堡大学计算机科学专业怎么样?
  19. 云专网和云专线的区别_什么是云网融合?
  20. 个人所得税计算函数 Oracle可用

热门文章

  1. 【python】python读取命令行选项参数
  2. Linux中对的tac命令
  3. 华为手机热点无法连接_华为P7手机WLAN热点连接失败解决方法介绍
  4. 为什么要用深浅拷贝、什么是深浅拷贝、以及如何实现
  5. Pyramidal Convolution Rethinking Convolutional Neural Networks for Visual Recognition
  6. css改变透明背景png图片的图标颜色
  7. sql中interval用法总结
  8. oracle10g迁移到11g配置,Windows下Oracle10g32位迁移到11g64位
  9. java 权限 部分截图
  10. 服务器被攻击 显示503,打开网页后出现503 service unavailable等字样,什么意思