当前课程知识点:软件理论基础 >  第五章 正则文法和正则语言 >  5.3 正则文法与正则语言 >  Video

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

Video在线视频

Video

下一节:Video

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

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

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

我们现在讲这一章的第三节

是正则文法和正则语言

在上一节里面我们介绍了正则文法

正则文法它就是右线性文法

或者左线性文法

正则文法 它产生的语言

实际上是正则语言

也就是说正则文法和正则语言之间

它有一个密切的关系

这个密切的关系

就是我们用这个定理来表示

我们把正则文法产生的语言

放在一个集合里面

把正则语言放在另外一个集合里面

这两个集合是相等的

那可以把定理分解为两个部分

第一个部分

就是正则文法产生的语言的集合

一定包含在正则语言这个集合里面

这也就是说正则文法产生的语言

一定为正则语言

这是我们定理的第一部分

定理的第二部分

它是这个包含了另外一个方面

就是正则语言这个集合

包含在正则文法产生的语言

这个集合里面

这也就是说你给了一个正则语言

一定能够找到一个文法

它产生的语言就是正则语言

所以我们要证明这个定理

就要从两个部分来证明

首先我们看第一部分

就是正则文法产生的语言

一定包含在正则语言这个集合里面

那我们给了一个正则文法G

它产生的语言是L(G)

要证明L(G)一定是正则语言

那怎么证明L(G)是正则语言呢

假如有一个NFA或者DFA

那产生这个语言

那这个语言就肯定是正则语言

那下面我们就说根据文法

我们能不能去构造一个DFA或者NFA

我们首先看这个例子

我给了这样的一个文法

这个文法它是一个右线性文法

它就是一个正则文法

我们希望通过它

来构造一个自动机NFA

我构造自动机的这个状态

它用一个变量来对应

首先这样 你比如它这里面 文法里面

有哪些变量呢

SAB这些变量

那我对应的这里面的NFA的状态

有S 有A 有B

那另外我还要增加一个特殊的状态

就是终态

接下来我怎么去根据这个文法产生式

来对应自动机的转移

在这个文法里面

我们给了这个自动机

首先我确定这个自动机的开始状态

开始状态 我就对应它的开始变量

这跟原来的文法是对应的

接下来我就根据它的产生式

S产生a大A

S产生a大A

S对应的是这一个状态

A对应这一个状态

那这个产生式

我就可以判断前面这一个终结符a

是它边上面或者输入符号产生的

所以这样一个产生式

我就对应了 它是S到a的

有一个变迁或者转移

这个转移它的终结符就是它的输入

这是对这样的一个产生式

我们对应状态转移

那另外一个产生式S产生b

S是这个S

b对应状态是这样

它没有对应的终结符

那我们认为它的左边

应该就是对应一个空串这个终结符

所以它对应的状态转移

就是S输入空串到b

这是这两个产生式

我们对应的它的状态转移

我们再看另外一个产生式

大A产生小a小a再b

它这个b的左边有两个终结符

这一个终结符我们好表示

那两个终结符我们该怎么表示呢

那通过前面我们扩展了

自动机里面那个方法

我可以在这个两个a这个之间

我增加一个状态

也就是我加一个状态

这个状态它就是a到这个状态

是通过输小a到达它

然后从这个状态再输a再到b

这就实现了从大A到B的一个转移

也就是通过了这一个串aa转移得到的

这是从这个产生式

到这个状态转移的一个表示

我们再看这个产生式

B产生小b大B

这个B和这个B是相同的

对应的状态

实际上它就相当于对应的有一个自环

这个自环上面是输入b有一个自环

那b产生一个终结符的a

b产生终结符a 这没有对应的变量

也没有对应的状态

那这个时候我们就把这个b

就到终态这里面就有一个转移

转移这个边上面

就是由我们输入a来产生的

那从这个文法的展示

最后得到这个自动机

实际上你看它那个机制完全是类似的

它最后到这里结束的字符串

跟这里产生的句子

你看完全是一样的

所以它们得到的语言应该是相同的

通过这个例子

总结对一般的右线性文法

我们都可以产生这个方法

你看我们假设给了G是个右线性文法

我们现在关键就是

通过这个文法构造一个NFA

这个NFA就是M

构造这个M的语言

跟这个文法的语言是相等的

那根据刚才的例子

我们构造首先通过文法的变量

来构造自动机的它的状态

通过它的产生式来构造它的变迁

那下面我们假设这里右线性文法

它的变量是V0、V1、V2

产生式因为这两类吧

要么它含一个变量

这个变量是在这个串里面最右边

也就是这种形式

要么它就是一个终结符的串

那么下面我们对这两类

怎么去构造它的产生式

首先对于这样的右线性文法

每一个变量

都对应其中的一个状态

你像刚才的变量 我们都对应了

你像变量有V0、V1、V2、V3、V4等等

这个是文法的变量

我们对应NFA的状态就是这些

那另外我们要根据刚才的例子的做法呢

我们增添一个终态

这个终态是之前V的变量

我们对应的这一个状态

这是我们自动机的状态选择

当然我们还要根据构造

增加一些新的状态

就是根据后面的需要我们再增加

像对这个产生式

Vi产生a1、a2 一直到am 这是终结符

然后Vj 这是一个变量

对这样的产生式 刚才我们的做法

就是按刚才的从Vi到Vj

有一个状态转移

这个状态转移因为

它的字符串中间有a1、a2、am

我就插M减1的状态里面

这里面分别是通过a1、a2 一直到am

在这里做了一个过度

所以把Vi最后转移到Vj

我们刚才的例子也是从这个方法做的

所以我们这个做法跟刚才的做法是一样的

只是我们对一般情况都采用这个方法

来定义它的自动机的变迁

这是对这一组产生式

下面我们再看右线性文法的

另外一类产生式

Vi它产生的是终结符的串

通过这个产生式

我们怎么构造NFA等价的

一个状态转移呢

首先是Vi这一个状态

另外我们增添了一个终态是Vj

然后在Vi到Vj之间

我们再增添m减1个状态

就是为了将a1、a2、am这些终结符串

把它从Vi转到Vj

这样我们就实现了这个产生式

跟它等价的一个状态转移

这样得到的自动机

一般的是具有这种形式的自动机

这是通过文法的产生式

我们给出了等价的效果相同的一个NFA

从刚才的构造看出来

他们的语言当然是相等的

也就是m它对应的语言

跟这个文法对应的语言是相等的

这是通过正则文法

也就是右线性文法

构造一个跟它等价的NFA

那当然这个文法的语言就是正则语言

我们也可以对左线性文法

来证明它们这个结论是正确的

这个我们只是把

一个大概的构造思想说一下

假如我们给了一个左线性文法G

我们就要构造一个右线性文法

根据这个左线性文法

去构造一个右线性文法

使得这个关系式相等

另外我们在构造过程的话

我们知道右线性文法

它对应的语言我们刚才讲了

它对应的那个自动机那个语言

它是正则的

证明了这个正则语言

根据它的性质转直接是正则的

最后证明这个G

它对应的自动机也是正则的

这样我们就实际上就证明了左线性文法

它得到的语言也是正则的

下面我们再看定理的第二部分

就是正则语言这个集合

一定包含在正则文法

产生的语言的这个集合里面

也就是给了一个正则语言

我们现在要构造一个文法

这个文法 它产生的语言

就是你给定的这个正则语言

那下面我们在证明这个定理之前

我们实际上关键怎么去构造这个文法

那给了一个正则语言

那怎么是正则呢

根据我们前面知道

一个正则语言

它肯定是对应一个DFA或者NFA

我们说对应一个NFAM

这个M它能够产生这个语言

这是正则语言它具有的一个特点

那我们再根据这个NFA自动机M

来构造这个正则文法

下面我们看一个例子

假设我们给这个语言是这个语言

这个语言大家看 是正则表示它的语言

肯定是正则的

实际上这个语言它的自动机

我们可以把它画出来

这个就是这个语言对应的NFA

通过这个自动机它的状态

我们去限定它的变量

这里面它有这样的一些状态

q0、q1、q2、q3等等

我们把它这一些状态

我们看着我们文法的变量

q0 经过输入a到q1

那我们在文法里面

就给这么一个产生式

q0 我看作 把这个状态给看作一个变量q0

它输入a到状态q1

那就是它产生的这个aq1

也就是我们上一步这类构造当中

我们把它逆回去的那种做法

就从这个状态转移 得到了这个文法

你看 它们左右是相等的

那么类似的方法

实际上我们把整个这个自动机对应的文法

都可以构造出来

那它对应的文法你比如说

可以q0产生aq1

q1它这里有一个自环

那它就产生一个bq1

q1还可以产生了这个aq2q1

通过这个自动机我们得到这类文法

那我们还可以得到了q2就产生bq3

那在这里面q3还可以产生 这是一个空串

也就是直接产生q1

另外我们必须还要考虑

对这个终态这一块呢

我们要加一个产生ε

完成了这个构造

你看这个文法它接受的串

跟这个自动机它接受的串

就完全是一样的

因此 他们得到的语言应该是相同的

那通过这个例子

也告诉了对一般的文法的构造

在自动机里面

如果有个状态q输入a

它到状态p1有个转移

那我们在文法里面

就有一个这是变量q产生ap

这在一般里面我们按这种方法

就把它对应的这个文法

就可以表示出来

这里面我们q是变量 p是变量

而这个a是终结符

根据这个状态转移里面有一个终态f

我们必须要增加一个qf这个变量

到空串的一个产生式

这样得到的文法跟自动机产生的语言

应该是相等的

它们因此是等价的

这样我们就证明了通过自动机

怎么构造跟它等价的上下文文法

实际上我们就完成了这个定理的证明

在本节当中我们介绍了

一个特殊的文法叫线性文法

在线性文法里面我们又介绍了一个

更特殊的文法叫正则文法

也就是右线性文法或者左线性文法

有这个文法它产生的语言

我们证明了它是正则语言

这个我们又找到了

正则语言的另外一种表示形式

你看到现在为止

我们正则语言

实际上有DFA可以表示正则语言

NFA可以表示正则语言

还有正则表示 它的语言也是正则语言

现在我们也证明了

正则文法也可以产生的是正则语言

好 这一节就介绍到此

谢谢大家

软件理论基础课程列表:

第一章 基础知识

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

也许你还感兴趣的课程:

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