当前课程知识点:编译原理 >  第2章 编译理论基础 >  2.3 文法的类型 >  文法的类型

返回《编译原理》慕课在线视频课程列表

文法的类型在线视频

下一节:文法的类型

返回《编译原理》慕课在线视频列表

文法的类型课程教案、知识点、字幕

这节课

给大家介绍一下文法的类型

Chomsky将文法分为四种类型

0型文法

1型文法

2型文法

3型文法

这几类文法的差异是在于

对产生式施加了不同的限制

0型文法是这样子的

如果文法中的产生式集合p中

任何一个产生式都有一般的形式

α定义为β

α属于V的正闭包(V+)

β属于V的闭包(V*)

而且对α和β不加任何限制

那么我们称文法G就是0型文法

也叫作短语结构文法

由0型文法生成

或者说定义的语言

称之为0型语言

或者称之为递归可枚举语言

它可以由图灵机识别

比方说这里这个文法

它就是0型文法

大家看 这里就是它所产生的语言集合

对于程序设计语言来说

0型文法有很大的随意性

还需要加以限制

如果一个0型文法中所有的产生式

都具有这种形式

其中 α1 α2属于V的闭包(V*)

β属于V的正闭包(V+)

A是非终结符(VN)

那么我们称这个文法是1型文法

或者是上下文有关文法

我们把它记作CSG

1型文法产生的语言称之为

上下文有关语言

它可以由线性限界自动机识别

它命名的由来

大家可以看到

只有当非终结符A的前后

分别是α1和α2时

才可以将A替换为β

1 型文法还有另外一种定义形式

就是对于文法中每个产生式

α定义为β它满足

α的长度小于等于β的长度

α和β都属于V的正闭包

那么G就是1型文法了

这两种定义形式是等价的

这里需要注意

根据定义

产生式的文法不是1型文法

由于实际需求

作为1型文法的特例接受它

大家看这个文法

它含有

所以它不是一个严格意义上的1型文法

它的语言集合大家看

就是这种形式

如果一个1型文法G

所有的产生式都具有这样的形式

就是非终结符A定义为β

β是字母表中的符号串

A是一个非终结符

那这个文法就称之为2型文法

或者叫做上下文无关文法

我们把它记为CFG

2型文法所产生的语言我们称之为

上下文无关语言

它可以由下推自动机识别

产生式存在

那么产生式的形式A定义为β

这其中β就属于V的闭包(V*)

这里这个文法就是

上下文无关文法

这是它产生的语言

如果一个2型文法中

具有这样的一个产生式

就是A->aB A->a

其中 A B是非终结符

a 是终结符

那么我们把这个文法就称之为

右线性正规文法

类似地

如果文法中

含有的产生式或者规则是这种形式

就是A->Ba A->a

那么这个文法我们就称之为

是左线性正规文法

左线性正规文法和右线性正规文法

我们统称为3型文法

也就是正规文法

3型文法产生的语言称之为

3型语言或者叫正规语言

它可以由有限自动机识别

正规语言可用正规表达式表示

如果一个文法即含有左线性

又含右线性的产生式

那么它不一定是3型文法

我们还可以把3型文法继续推广

α是一个终结符串

我们来看几个实例

这是一个上下文有关文法

再来看这里这个文法

是上下文无关文法

每一个产生式

它的左边只有一个非终结符

再来看这里是一个标识符的3型文法

也就是正规文法

四种文法之间的关系

是将产生式做了一步一步的限制而得来的

他们之间呈现出来逐级“包含”的关系

每一种正规文法

它都是上下文无关的

每一种上下文无关文法

都是上下文有关文法

每一种上下文有关文法

又都是0型文法

这节课就讲到这里

谢谢大家

编译原理课程列表:

第1章 编译原理概述

-1.1 什么是编译原理

--什么是编译原理

--什么是编译程序

--讨论:翻译程序、汇编程序、编译程序、解释程序的区别和联系。

--练习1

-1.2 编译的基本过程

--编译的基本过程

--编译的基本过程

--讨论:表格管理和出错处理

--练习2

-1.3 编译程序的组织

--编译程序的组织

--编译程序的组织

--练习3

-编译原理概述

第2章 编译理论基础

-2.1 文法与语言

--文法与语言

--文法与语言

-2.2 文法和语言的形式定义

--文法和语言的形式化定义

--文法和语言的形式化定义

--讨论:高级语言的一般特点

--练习1

-2.3 文法的类型

--文法的类型

--文法的类型

--练习2

-2.4 上下文无关文法及语法树

--上下文无关文法及语法树

--上下文无关文法及语法树

--练习3

-2.5 上下文无关文法的句型分析

--上下文无关文法的句型分析

--上下文无关文法的句型分析

--练习4

-编译理论基础作业

-讨论:识别不同文法的实验方法

第3章 词法分析

-3.1 词法分析概述

--词法分析概述

--词法分析概述

--练习1

-3.2 正规文法和状态转换图

--正规文法和状态转换图

--正规文法和状态转换图

--练习2

-3.3 有限状态自动机

--有限状态自动机

--有限状态自动机

--讨论:有限状态自动机的应用

--练习3

-3.4 NFA与DFA的等价性

--NFA与DFA的等价性(上)

--NFA与DFA的等价性(下)

--NFA与DFA的等价性

--练习4

-3.5 正规表达式与正规集

--正规表达式与正规集

--正规表达式与正规集

--讨论:正规式的应用

--练习5

-3.6 正规文法与正规式

--正规文法与正规式

--正规文法与正规式

--练习6

-3.7 正规式与FA

--正规式与FA

--正规式与FA

--练习7

-词法分析作业

-讨论:如何实现词法分析器

第4章 自顶向下的语法分析

-4.1 自顶向下语法分析及其面临的问题

-- 自顶向下语法分析及其面临的问题

--自顶向下语法分析及其面临的问题

--自上而下语法分析中面临的问题

--练习1

-4.2 文法的等价转化

--文法的等价转化

--文法的等价转化

--讨论:什么样的文法才是等价的?

--练习2

-4.3 LL(1)文法与递归下降分析法

--LL(1)文法与递归下降分析法

--LL(1)文法与递归下降分析法

--LL(1)分析法和递归下降法的异同

--练习3

-4.4 构建FIRST集合FOLLOW集合

--构建FIRST集合FOLLOW集合

--构建FIRST集合FOLLOW集合

--讨论:FIRST集合FOLLOW集合的关系

--练习4

-4.5 LL(1)分析器工作原理

-- LL(1)分析器工作原理

--LL(1)分析器工作原理

-4.6 LL(1)分析表构造算法

--LL(1)分析表构造算法

--LL(1)分析表构造算法

--练习5

-讨论:自顶向下语法分析算法的实现方式

第5章 自底向上的语法分析

-5.1 自底向上的语法分析及优先分析

--自底向上的语法分析及优先分析

--自底向上的语法分析及优先分析

--练习1

-5.2 LR分析器

--LR分析器

--LR分析器

--练习2

-5.3 活前缀和LR(0)项目

-- 活前缀和LR(0)项目

--活前缀和LR(0)项目

--练习3

-5.4 构造识别活前缀的FA

--构造识别活前缀的FA

--构造识别活前缀的FA

--练习4

-5.5 LR(0)分析表构造算法

--LR(0)分析表构造算法

--LR(0)分析表构造算法

--练习5

-5.6 SLR(1)分析法

--SLR(1)分析法

--SLR(1)分析法

--练习6

-5.7 LR(1)分析法与LALR分析法

--LR(1)分析法与LALR分析法(上)

--LR(1)分析法与LALR分析法(下)

--LR(1)分析法与LALR分析法

--练习7

-讨论:比较四种LR分析法

第6章 语法制导翻译和中间代码生成

-6.1 语义分析和语法制导翻译概述

--语义分析和语法制导翻译概述

--语义分析和语法制导翻译概述

--练习1

-6.2 常见中间语言简介

--常见中间语言简介

--常见中间语言简介

--讨论:为什么要引入中间代码

--练习2

-6.3 简单算术表达式和赋值语句翻译

--简单算术表达式和赋值语句翻译

--简单算术表达式和赋值语句翻译

--练习3

-6.4 布尔表达式和复制语句翻译

--布尔表达式和复制语句翻译

--布尔表达式和复制语句翻译

-6.5 拉链和回填

--拉链与回填

--拉链与回填

--练习4

-6.6 程序控制语句翻译

--程序控制语句翻译

--程序控制语句翻译举例

--程序控制语句翻译

--练习5

-6.7 for循环语句的翻译

--for循环语句的翻译

--for循环语句的翻译

-6.8 GOTO语句和情况语句的翻译

--GOTO语句和情况语句的翻译

--GOTO语句和情况语句的翻译

--练习6

-6.9 含数组元素的算术表达式的翻译

--含数组元素的算术表达式的翻译

--含数组元素的算术表达式的翻译

--练习7

-6.10 数组元素赋值语句的翻译

--数组元素赋值语句的翻译

--数组元素赋值语句的翻译

--练习8

-讨论:三元式和四元式

第7章 符号表

-7.1 符号表概述

--符号表概述

--符号表概述

--练习1

-7.2 符号表的建立

--符号表的建立

-- 符号表的建立

--练习2

-讨论:符号表

第8章 运行时存储空间组织

-8.1 运行时存储空间组织概述

--运行时存储空间组织概述

--运行时存储空间组织概述

-8.2 运行时分配策略

--运行时分配策略

--运行时分配策略

--练习

第9章 中间代码优化

-9.1 线性窥孔优化

--线性窥孔优化

--线性窥孔优化

-9.2 基本块及其优化方法

--基本块及其优化方法

--基本块及其优化方法

-9.3 循环概念

--循环概念

--循环概念

-9.4 循环优化

--循环优化

--循环优化

-代码优化作业

-讨论:代码优化

文法的类型笔记与讨论

也许你还感兴趣的课程:

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