编译原理:文法及其二义性(判定及消除)

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净

学编译原理时,会学到文法,老师在介绍完文法的相关定义后又介绍了文法的二义性,但是没说到底是如何避免文法的二义性的。

这篇博文就是我的学习结果

文法的二义性:如果文法G中的某个句子存在不只一棵语法树,则称该句子是二义性的。如果文法含有二义性的句子,则称该文法是二义性的。

我举个例子,来说明文法的二义性及其避免方法:

有下面这个文法:

S - >S and S | S or S | not S | p | q | (S)

那么要是得到 not p and q:

其推导过程如下:都用最左推导

A、S -> not S

         -> not S and S

         -> not p and S

         -> not p and q

B、S -> S and S

         -> not S and S

         -> not p and S

         -> not p and q

显然这两个推导过程不同,说明与两个过程相对应的语法树也不同,所以,此文法具有二义性

那么怎么修改呢?

这就到了消除二义性的方法了:

1、人为规定其中的“not”,“and”,“or”的优先级

依照此法,可将上述文法修改为:

S -> S or T | T

T -> T and F | F

F -> not F | (E) | p | q

2、第二种方法就是重写文法

文中的文法例子来源于:如何消除文法的二义性_dianaaaaa的博客-CSDN博客_消除二义性,这个博客是我在寻找方法的时候学习的,但是他写的没我的详细,哈哈!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/531104.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C语言(CED)与long long相关的知识

在写代码时,有时int、double定义的变量的范围远远小于题目要求的范围,那么现在就是使用long long的时候 1、 long long 是C99标准对整型类型做的一个扩展,每个long long类型的变量可以占8字节,每个字节8位,一共64位。…

C语言(CED)对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式(递归求解)

又涉及到递归问题,这道题的大致内容是这样的: (请用递推方式求解)对于一个2行N列的走道。现在用1*2,2*2的砖去铺满。问有多少种不同的方式。下图是一个2行17列的走道的某种铺法。 提示:观察前n个结果,可以…

C语言(CED)王老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数(递归求解)

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 题目大意:王老师爬楼梯,他可以每次走1级或者2级,输入楼梯的级数,求不同的走法数。例如:…

C语言(CED)查找最接近的元素(分治法/二分查找):在一个非降序列中,查找与给定值最接近的元素。(递归实现)

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 一、题目大意 查找最接近的元素(分治法/二分查找):在一个非降序列中,查找与给定值最接近的元素。…

C语言(CED)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。

)输出前k大的数(分治法/局部快速排序):给定一个数组,统计前k大的数并且把这k个数从大到小输出。 [输入] 第一行包含一个整数n,表示数组的大小。 第二行包含n个整数,表示数组的元素,整数之间以一个空格分…

C语言(CED)最长公共子序列----动态规划第一题

一、动态规划算法与分治法的异同 相同点: A、二者均是将待求解的问题分成若干子问题来求解。 B、二者在编写代码的时候,都要用到递归。 不同点: A、分治法求解的问题,在将问题分成若干子问题之后,其子问…

C语言(CED)01背包——动态规划第二题

一、问题描述 给定n种物品和一个背包。物品i的质量Wi,其价值Vi,背包的容量为c。问如何选择装入背包中的物品,使得装入背包中的物品总价值最大? 二、解题思想 01背包和最长公共子序列都是动态规划题目中求最优解的问题&#xff0…

C语言(CED)gameboy接馅饼问题

一、题目大意 都说天上不会掉馅饼,但有一天gameboy正走在回家的小径上,忽然天上掉下大把大把的馅饼。这馅饼别处都不掉,就掉落在他身旁的10米范围内。馅饼如果掉在了地上当然就不能吃了,所以gameboy马上卸下身上的背包去接。但由…

C语言(CED)递归实现汉诺塔问题

一、问题大意 大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,任何时候,在小圆盘上都不能放大圆盘,…

C语言(CED)智力大冲浪——贪心算法第一题

一、题目大意 小伟报名参加中央电视台的智力大冲浪节目,本次挑战赛吸引了众多参赛者,主持人为了表彰大家的勇气,先奖励每个参赛者m元。先不要太高兴!因为这些钱还不一定都是你的!接下来主持人宣布了比赛规则&#xff…

C语言(CED)钢条最优切割收益

目录 一、题目大意 二、大致思路 三、具体实现 一、题目大意 一家公司购买长钢条,将其切割成短钢条出售,切割本身没有成本,长度为i的短钢条的价格为Pi。那给定一段长度为n的钢条和一个价格表Pi,求钢条的切割方案使得收益Rn最大。提示&…

C语言(CED)如何用sort函数根据结构体里的某一属性进行排序

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 前几天在编写代码的时候,突然要根据结构体的属性进行从小到大的排序,这即是我写这篇文章的导火索。 正如大家所知…

撰写paper时,如何在word里输入图片或其他文献(PDF)里的公式?(更新时间2022.03.01)

我们在写paper时,经常会遇到在Word里编写数学公式的问题,其中大多数公式是已经存在的,所以只需要识别、复制、粘贴即可,那么接下来,我就介绍一下“Mathtype”“Mathpix”的方法,分为所需软件、软件操作、公…

家里接入某运营商300M宽带,为何网速还是很慢?(还未装修房屋的请进来)

(请先看置顶博文)本博打开方式,请详读_liO_Oil的博客-CSDN博客_怎么把androidstudio卸载干净 引言:家里接入300M的宽带,但是自我感觉网速不佳,遂结合所学知识,对此问题进行分析、研究和调察&…

(CED)列指针与行指针的联系与区别

一、列指针(竖为列) 1、列指针相关定义 列指针:被称为是指针变量指向二维数组的某个元素 一般使用时会有如下定义: int a[3][4]{1,2,3,4,5,6,7,8,9,10,11,12}; int *p;而上述代码定义的指针p,一般按照下表方式指向…

C语言(CED)C语言中双引号和单引号的区别

最简单的区别: 在字符型变量赋初值时,用单引号;为字符串变量赋初值时用双引号! 具体区别: 1、大小 单引号引起的一个字符,其大小为1个Byte。 双引号引起的字符串,因为在其结尾需加一个二进…

一、Pytho第一课——Python安装及配置路径方法(最详细小白教程,没有之一。如若不懂,不是还可以私信嘛!对吧?)

目录 一、下载软件 二、安装 三、编辑器 四、在Pycharm上成功运行Python程序(配置Python解释器) 一、下载软件 官方下载地址:https://www.python.org/downloads/(打开似乎很吃力,必要时刻“挂灯”) …

二、Python第二课——变量命名规则及字符串变量相关函数

目录 一、变量命名规则 二、字符串变量及相关函数 1、字符串变量 2、相关函数 最后琐碎杂物: 1、字符串之间的拼接 2、字符串格式控制(制表符和换行) 一、变量命名规则 正如其他编程语言一样,程序离不开声明变量&#x…

三、Python第三课——Python中数字的用法及编码原则(Python禅意)

目录 一、Python中的数字 1、整数 2、浮点数 3、整数、浮点数和字符串的联系和区别 二、编码原则 1、为代码增加注释 2、Python 禅意 A、编码精美 B、避繁就简 C、无简就繁 D、使用常规方法解决问题 E、先有效、再精巧、逐步升华 一、Python中的数字 编程中&#…

四、Python第四课——Python中列表及其操作(增删改查)

目录 一、Python中的列表 1、列表的定义和赋值 2、列表的使用 二、列表的“增删改查” 1、列表中元素的增加 A、在列表尾添加元素 B、在列表中插入元素 2、列表中“元素的删除” A、使用del语句删除元素 B、使用pop()函数删除元素 C、弹出列表中任何位置元素…