当前课程知识点:软件理论基础 >  第七章 上下文无关文法和推导 >  7.2 规约和推导 >  Video

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

Video在线视频

Video

下一节:Video

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

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

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

现在介绍第七章 第二节

规约和推导

在上一节里面我们介绍了

上下文无关文法

以及上下文无法文法的表示形式

这里我们要介绍上下文无关文法

它怎么样去操作的

一个字符串是不是属于文法的语言

我们在上一节的例子里面

会看到它可以推导

那怎么推导呢

我们推导有两种方法

一种是规约 一种是推理

规约是自下而上的一种推理

也就是从下面往上面

来进行推理的一个过程

我们也叫递归推理

另外还有一个是自上而下地推理

我们叫推导

规约的过程

它是把它的产生式的右边

替换为产生式的左边

而推导的过程 它跟它是相反的

是把产生式的左边

也就是它的head替换产生式的右边

那下面我们看这个规约过程的举例

我们还是给出之前的上下文法

这个文法 它的变量 终结符

以及开始变量 产生式

大家前面已经看过了

下面我们要用递归推理

要推这么一个字符串

(v+d)×d

看这里是不是可以通过这个文法

把它归结出来

如果能够归结到开始变量E

那说明这个串是由这个文法产生的

那下面我们给出这个串

首先用第六个产生式 把×规约成O

然后用第五个产生式 把+规约成O

再用第四个产生式 把d 规约成E

这个d规约成E

再用第四个产生式

就把这个d规约成E

然后再用第三个产生式 把v规约成E

再用第一个产生式把EOE规约成E

再用第二个产生式把这个(E)规约成E

最后用第一个产生式

把EOE规约成开始变量E

你看这个过程

是首先我们给出了这个字符串

也是最下一层的

在这个文法里面

我们就用递归推理或者规约

它的右边替换左边

最后得到了它的开始变量E

这是我们的规约过程

下面我们再看一个它的推导过程

我们还是用这个文法

还是用这样的字符串

那跟刚才不同的是

我们现在是希望在这个文法里面

是自上而下把这个字符串推出来的

那上最开始是什么呢

最开始是从开始符 开始变量E

在这个文法里面

我们能不能推出这个字符串

如果能够推出出来

说明这个字符串是由这个文法产生的

那么我们下面根据开始给了开始变量E

因为第一个产生式E产生EOE

再用第二个产生式E产生(E)

然后再用第一个产生式这个E产生EOE

再用第三个产生式把这个E产生V

再用第四个产生式把E产生这个d

再用第四个产生式把这个E产生这个d

再第五个产生式把这个O产生+

再用第六个产生式 把这个O产生×

最后得到的是这个终结符串

这是从开始变量在这个文法里面

把它这样推出来的

这是自上而下推出来的

给了这样的文法

那我们的推导实际上始终是(06:02)产生式的

假如有这么一个串 αAβ

A是这个文法当中的一个变量

那如果A有一个A产生γ

那我们怎么样利用这个串

得到后面的串呢

实际上我们就是把这个A就替换成γ

这个推导跟产生式不同的就是

这是这样一个箭头 这是双的

也就是在这个串当中

它运用了这个产生式

把这个α会看作A的它的上文

把β看作A的下文

那整个这个串从它变到它

实际上是用了这个产生式

而跟它的上文和下文是没有关系的

所以我们这个文法是上下文无关文法

如果在这个文法里面推导

我们对这个文法记忆很清楚

我们也可以在这个推导里面

把这个G 就把它省略掉

另外在这个推导里面

用到一个叫传递闭包

我们假如在整个推导过程当中

我们只关心结果

不大关心中间的推导步数

这跟我们之前讲的那个状态转移

实际上有状态转移闭包是很类似的

我们定义是这样的

在这个文法里面

我们定义这个推导闭包

我们用G这个箭头上面给*来表示

我们是用归纳定义的

首先对这里面任何一个串α

α它不需要做任何变动

自己到自己也是一个*来推导它

那另外假如有α、β、γ是这么一个串

α若干步在这个文法里面可以推导出β

而β在这个文法里面

它一步可以推导出γ

这样这就是一个关联假设

那我们就可以推出来α在这个文法里面

它有若干步也能够推出γ

你看我们只关心它最后的结果

不关心它的步骤

那通过这个归纳定义

我们得出任意的

这个传递闭包的它的推导

这个定义在我们后面的

语言里面的定义非常重要

在前面我们讲的推导的时候

我们举的几个例子大家就会看出

从开始变量能够推出终结符串

我们在文法里面用产生式进行推导

这个推导可能有的同学这里也问

你在这个文法里面

这个串里面 有这么多这个变量

你该用哪个变量

用哪个产生式进行推导呢

这里在一般情况下

我们觉得它是没有规律可行的话

你推导也是杂乱无章的

所以下面我们讲一个叫最左推导

最左推导是这样的

就在你的推导过程当中

你如果是总是在这个串里面

最左边的一个变量

引用文法里面进行推导

这样我们用一个记号叫IM

也是left most这个记号

如果是传递闭包里面的

它的最左推导的传递闭包

就用IM上面摆个*

下面我们看个例子

这还是我们前面的上下文法

还是这样的串

我们对这样的文法最左推导

要推导出这个串

那我们在开始例子里面

我们也讲过推导

那里面推导的是开始变量

后面的推导是任意的

它的变量进行推导的

而我们现在是每次

都是在这个串当中最左边的一个变量

下面看开始变量E

我用第一个产生式

这是因为是最左边的 它只有一个符号

那就推导出EOE

EOE这个串里面最左边的一个变量是E

E我用第二个产生式就推出(E)左括号

就得到这个串

这个串里面

现在最左边一个变量是E

我再用第一个产生式

E产生EOE得到这样

这里最左边变量是这个E

我再用第三个产生式E产生V

得出这个关系式

那下面在这个串里面最左边是一个O

再用第五个产生式O产生+

那接下来最左边那个变量是E

E用第四个产生式E产生d 得到这样的

那接下来最左边一个变量是O

再用第六个产生式O产生×

到了这个串

最左边每个变量是E

再用第四个产生式E产生d

最后推出了(v+d)×d

整个推导过程

都是每一次都是

最左边的一个变量进行推导的

这是这一组推导

那下面我们再看另外一个推导

叫最右推导

最右推导跟刚才的方法它是很类似的

我们在推导过程当中

每一步总是在这个串当中

最右边一个变量进行推导

就用rm right most这个来表示的

所有这个最右推导里面的传递闭包

我们就用rm上面给个*表示的

我们下面也看这个例子

这个例子也是上下文法

对这个串我们采用最右推导

整个的推导

跟刚才的这种推导是很类似的

每次推导都是以右边的一个变量

右边的一个变量 右边的一个变量

对它进行推导的

最后得到这个终结符的串

这是最右推倒

在我们上下文无关文法里面

这个串里面

它可能包含有变量和终结符

我们把这样的串

给它命一个名字叫做句型

也就是说句型是一个字符串

它包含有终结符和包含有非终结符

如果从开始变量 用最左推导出的一个句型α

我们叫做左句型

那如果从开始变量用最右推导

推导出来的句型α

我们把α叫做一个右句型

如果这个串里面

全部都是终结符构成的

我们把这样的串叫做一个句子

实际上文法的语言

它都是由这个句子构成的

这节里面我们介绍了

上下文无关文法的推导

包括递归推理

也是归右或推导

我们还介绍了最左推导和最右推导

这些推导是为我们下面

怎么去用文法推导一些句子

或者推导我们的语言来做准备的

好 这节内容介绍完毕

谢谢大家

软件理论基础课程列表:

第一章 基础知识

-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笔记与讨论

也许你还感兴趣的课程:

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