当前课程知识点:软件理论基础 >  第八章 CFG的应用与文法的二义性 >  8.4 二义性的消除方法 >  Video

返回《软件理论基础》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《软件理论基础》慕课在线视频列表

Video课程教案、知识点、字幕

欢迎同学们来到《软件理论基础》的MOOC课堂

现在介绍上下无关文法应用

与文法二义性的第四部分

二义性的消除方法

在上一节里面我们介绍了上下无关文法

有的文法它有二义性

而二义性它带来的这个软件

可能是很大的错误

我们不希望在文法里面

有这样的二义性出现

那怎么样去消除二义性呢

对于一般的上下无关文法来说

你找不到通用的消除文法的二义性

但对一些特定的文法

我们还是可以找到一些

消除二义性的方法

看看前面介绍的那个算术文法

它这个文法是具有二义性的

发现了v+v×d

它有两个不同的文法分析树

产生这个两个不同的文法分析树的原因

在数学里面加和乘 它是两个运算符号

但是它们的运算的

它们的级别或者优先 它们是不一样的

我们从小学就知道 先乘除后加减

在这个串里面

之所以产生了二义性

是因为这个加或乘它们没有优先性

所以就造成了有两个不同的语法分析树

那为了克服这一点

我们就采用了计算的优先性

我们先乘后加

那对这个文法我们就进行改进了

原来的加或乘都用O表示

那现在加用A表示 乘用N表示

那我们乘是优先的

也就是在这个里面它的产生式

只要一进入到乘

这个乘它就一直都把它做完

就是保证了先乘后加

对这样的文法我们再看看这个字符串

那它只有唯一的一个语法分析树

那这样的文法

是不是再没有二义呢 对这个文法

我们再看这个字符串 v+v+d

这个文法生成这个字符串

我们发现了也有两个不同的语法分析树

或者有两个不同的最左推导

只要找到一个字符串 就是这里

我们就说这个文法是具有二义的

你虽然这个文法克服了

刚才的那个加和乘的二义性

但对这个字符串它还是具有二义的

也就是说这个文法是二义的

那下面我们分析产生这个二义的原因

因为我们这个v+v+d

对加法来说它可以是前面相加

也可以先后面相加

这样得到的它的结果是

语法分析树是不一样的

为了改进这一点

我们在小学里面

我们学算术的时候 我们知道

加法运算或者乘法运算里面

它应该用结合律

所以我们就采用左结合的方法

来消除它这个二义性

我们对加法来说

我采用左结合律

那同样对乘法来说

这里也成了这样类似的问题

我们两个同样的一起来解决

那我们修正这个文法

就得到下面这个文法

EAT和TMF

这个文法描述了

它是用了加或乘都是左结合律

在这种文法下面

这样的字符串

它只有唯一的一个语法分析树

我们可以检验它就是再没有二义了

下面我们介绍另外一个例子

叫悬挂的else二义性

有一个叫控制判断程序

它是有if、else来描述

就是如果 另外

你要用else之前必须要用if

如果有if 后面可以不用else

那怎么样去描述这个文法

下面我们用这个文法来表示

else产生空串

else产生if

if我们用i表示 is

else产生is

e e表示s 再s

这个文法就描述了刚才的判断语句

首先有if 再有else

或者是只有if 没有else

那这样给的这个文法

它是不是无二义的

我们下面看这个字符串

if,if,else

从这个文法生成这个字符串

实际上它有两种生成方法

首先我用s产生ises 得到这样的

然后再用s产生is

最后你用s产生空串 s产生空串

这里面得到的产物就是iie

得到这个字符串

那同样通过这个文法

我们看另外一种产生方式

首先你用这个产生式

s产生is

然后采用s产生ises

s产生ises

再之后你用s产生空串 s产生空串

这个语法分析树 它的产物也是iie

这两个语法分析树它们是不同的

但是它们产生的产物或者句子都是二义的

这说明这个文法它是具有二义的

那我们要消除这个二义性

就采用最临近的嵌套方法

来消除这个二义性

就把这个文法改成一种imes

然后写成m产生它

这个文法再产生这个判断语句

它满足了条件

而且iie它只有唯一的一个语法分析树

这个语法分析树就是这样的

但有的文法里面它是没有二义的

有的文法它是有二义的

如果是这个语言它对应的文法

有的是有二义的 有的是没有二义的

我们肯定是选取那个没二义的

如果是有二义的

利用我们的一些知识 利用我们的经验

去消除二义性

但是也有这样的语言

只要产生这个语言

它的文法是一定有二义的

这就是固有二义

这个上下无关文法语言

只要生成这个语言的文法

它一定是有二义的

什么样的语言是固有二义的

下面我们看这个例子

L等于a的n次方

b的n次方 c的m次方

或者是a的n次方

b的m次方 c的m次方

生成这个语言的文法采用这个文法

生成这个语言的文法

我们可以采用这个上下无关文法

而生成这个语言L

也就是这两个语言的并

我们只需要增加

这样的一个产生式就OK了

这里就是生成

这个语言的一个上下无关文法

那我们考虑这么一个串

a的n次方 b的n次方 c的n次方

像这个串里面

它可以用第一个文法生成

也可以用第二个文法生成

它们这两个语法分析树 大家看

它们是完全不一样的

对于刚才这个语言

有的同学说你是用的那个文法

我可以去找其他的一个

没有两个语法分析树 最后生成这样的

我们说你是找不出来的

因为你的这个语法分析树

它要么属于前面的一个文法

要么属于后面的一个文法

它这两个文法里面

它的结构是不一样的

所以它要生成这个a的n次方

b的n次方 c的n次方

它必然有两个不同的语法分析树

这样的语言是一个固有二义的语言

这个语言你要改进它 是改进不了的

这节里面我们介绍了

对一些二义的上下无关文法

我们凭自己的经验可以消除它的二义性

当然我们说也有一些语言

连二义性都消除不了的

你像这个固有二义的语言

好 这节内容介绍完毕

谢谢大家

软件理论基础课程列表:

第一章 基础知识

-1.1 概要

--第一节

-1.2 数学基础

--Video

-1.3 图

--Video

-1.4 证明方法

--Video

-1.5 语言基础

--Video

-1.6 语言运算

--Video

-习题--作业

第二章 确定有限自动机

-2.1 确定有限自动机的概念

--Video

-2.2 确定有限自动机的定义

--Video

-2.3 扩展转移函数

--Video

-2.4 正则语言

--Video

-2.5 DFA构造

--Video

-习题--作业

第三章 非确定有限自动机

-3.1 非确定有限自动机的概念

--Video

-3.2 e转移

--Video

-3.3 非确定有限自动机的定义

--Video

-3.4 扩展转移函数

--Video

-3.5 等价性证明

--Video

-3.6 文本搜索

--Video

-习题--作业

第四章 正则表示

-4.1 单一终结状态的NFA

--Video

-4.2 正则语言的运算性质

--Video

-4.3 正则表示和语言

--Video

-4.4 正则表示和正则语言

--Video

-4.5 正则语言的同态

--Video

-4.6 正则表示的代数定律

--Video

-习题--作业

第五章 正则文法和正则语言

-5.1 文法

--Video

-5.2 线性文法

--Video

-5.3 正则文法与正则语言

--Video

-5.4 自动机的积

--Video

-习题--作业

第六章 正则语言的性质与DFA优化

-6.1 基本问题

--Video

-6.2 泵引理

--Video

-6.3 非正则语言的判定 1

--Video

-6.4 非正则语言的判定 2

--Video

-6.5 DFA的优化 1

--Video

-6.6 DFA的优化 2

--Video

-习题--作业

第七章 上下文无关文法和推导

-7.1 上下文无关文法

--Video

-7.2 规约和推导

--Video

-7.3 语法分析树

--Video

-7.4 规约、推导和语法分析树之间的关系

--Video

-7.5 上下文无关语言

--Video

-习题--作业

第八章 CFG的应用与文法的二义性

-8.1 CFG的应用

--Video

-8.2 CFG的转化

--Video

-8.3 文法二义性

--Video

-8.4 二义性的消除方法

--Video

-8.5 CFG的构造方法

--Video

-8.6 CFG的构造实例

--Video

-第八章 CFG的应用与文法的二义性--习题

第九章 下推自动机

-9.1 PDA介绍

--Video

-9.2 PDA的定义

--Video

-9.3 PDA的即时描述

--Video

-9.4 PDA的语言

--Video

-9.5 PDA与CFG的关系

--Video

-习题--作业

第十章 下推自动机与CFG化简规范

-10.1 确定下推自动机

--Video

-10.2 DPDA与其他语言的关系

--Video

-10.3 终态型DPDA和空栈型DPDA

--Video

-10.4 消除无用符号

--Video

-10.5 消除e产生式

--Video

-10.6 消除单一产生式

--Video

-10.7 CFG的化简与Chomsky范式

--Video

-习题--作业

第十一章 上下文无关语言的性质

-11.1 CFL的必要条件

--Video

-11.2 CFL的Pumping引理

--Video

-11.3 CFL的闭运算性质

--Video

-11.4 CFL的同态性质

--Video

-11.5 CFL的交运算

--Video

-11.6 CFL的判定性质

--Video

-习题--作业

第十二章 Turing机

-12.1 图灵机的介绍

--Video

-12.2 图灵机的定义

--Video

-12.3 图灵机的即时描述

--Video

-12.4 图灵机的计算

--Video

-12.5 图灵机的编程技术

--Video

-习题--作业

第十三章 图灵机的扩展

-13.1 Turing理论

--Video

-13.2 图灵机带的扩展

--Video

-13.3 图灵机移动的扩展

--Video

-13.4 受限图灵机

--Video

-13.5 图灵机与其他自动机

--Video

-习题--作业

第十四章 不可判定问题

-14.1 图灵机编码

--Video

-14.2 对角线语言与通用语言

--Video

-14.3 图灵机语言的性质

--Video

-14.4 判定问题和语言

--Video

-14.5 计算复杂性问题

--Video

-第十四章 不可判定问题--习题

第十五章 自动机及应用

-15.1 时间自动机

--Video

-15.2 Buchi自动机

--Video

-15.3 软件形式化验证

--Video

-15.4 模型检测方法

--Video

-15.5 M3C模型检测系统

--Video

-习题--作业

期中考试

-期中考试

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。