当前课程知识点:编译原理 >  第2章 编译理论基础 >  2.2 文法和语言的形式定义 >  文法和语言的形式化定义

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

文法和语言的形式化定义在线视频

下一节:文法和语言的形式化定义

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

文法和语言的形式化定义课程教案、知识点、字幕

这节课给大家介绍

文法和语言的形式定义

如何实现语言的形式化描述

我们需要瞄准语言的结构

用组成规则进行描述

我们先来看文法的概念

文法G 我们可以定义为四元组

包含四部分

Vn VT P S

其中的Vn

我们称之为非终结符集

它是语法实体或变量的集合

VT是终结符集

Vn 和VT的交集为空

这里我们令V为Vn 和VT的并集

V称之为文法的字母表或者是词汇表

P是产生式或者叫规则的集合

规则的描述形式是这样子的

其中α β是字母表中的符号

α是V的正闭包

β是V的闭包

α不可以为空

β可以为空

S是识别符号

或者开始符号

是一个非终结符

至少出现在一条规则中  

我们上一节课讲过的汉语句子

我们可以用文法来描述

大家看这种描述形式

四元组(Vn,VT,P,S)

终结符集VT

非终结符集Vn

那开始符号S={〈句子〉}了

规则和产生式集合列出了

对句子的所有定义的规则

再来看一个文法G

非终结符集中只含有一个元素S

终结符集中由两个元素0和1组成

产生式集中有两条产生式

开始符号是S

一般我们约定

第一条产生式的左部

是识别符号也就是开始符号

用尖括号括起来的是非终结符

不用尖括号括起来的是终结符

或者可以用大写字母表示非终结符

小写字母表示终结符

这里是一个标识符的文法

大家看

Vn={标识符,字母,数字}

VT={a,b,c,…,x,y,z,0,1,…,9}

S是开始符号

它只包含有〈标识符〉

大家看这里是规则集合

这里的规则我们也可以简写

规则左边相同的我们可以写在一起

右边用或符号就可以了

比如说〈字母〉→a|b|c|…|z

〈数字〉→0|1|2|3|4|5|6|7|8|9

一般文法有四种描述形式

大家看这里

第一种是常规的书写方式

列出了四元组的每一部分

第二种不用列出四元组

这里约定第一条规则的左部

是文法的识别符号

按照约定可以从规则中

读出终结符和非终结符

第三种是将开始符号或者是识别符号

标注在G的后面

第四种 更加简化

将有相同左部的统一写在一起

右部用或符号分隔

有了文法

如何产生语言的句子呢

我们来看推导的定义

如果α->β是文法 G的规则

是文法G中的规则或者是一个产生式

γ和δ是字母表或者是词汇表V*中的任意符号

有两个符号串

v和w

v=γαδ

那么w=γβδ

那么我们就说v应用规则

α->β

我们直接可以产生w

或者说

w是v的直接推导

我们可以记作这种形式

大家来看标识符文法

那么对于<标识符>

我们直接可以推导出 来

<标识符><字母>

句型abc<数字>

我们可以运用规则<数字>::=5

直接推导出来abc5

再来看多步推导的定义

如果存在直接推导的序列就是

v=w0=> w1 =>w2… =>  wn=w

wn就是w

这个时候n>0

那么我们就称

v推导出来w

它的推导的长度为n

也就是进行了多步推导

从v能够得到w

那么我们可以使用推导符号

上面加一个加号

来表示多步推导

这里就是这种表示形式

如果v经过多步推导到w

如果存在v=w

那么我们就可以使用推导符号

上面加一个乘号来表示

我们记做这种形式

来看这个文法

它有一个句型V

是0S1

还有一个句型是w

w=00001111

那么我们可以说从V

可以经过多步推导到w

我们可以记做这种形式

再来看标识符文法中

那标识符文法中有一个句型V

是〈标识符〉〈数字〉

还有一个句型W=ab1

那么我们可以从V经过若干步

依次运用规则

可以推导出来w

在这个过程中

运用了多条规则进行推导

我们可以把它记做这种形式

或者是这种形式

再来看句子的定义

假设有一个文法G

如果符号串x是从识别符号推导出来的

那么我们可以称

x是文法G[S]的一个句型

如果x中只有终结符

那么这个x就是文法G[S]的句子

比如说这里这个文法

0S1 是句型

000111就是句子

语言是句子的集合

文法G所产生的语言

我们可以把它定义为

从文法开始符号推导出的

所有句子的集合

我们用 L(G)表示

很明确的

L(G)中的句子满足两个条件

第一个 符号串x可以从识别符号推出

也就是x是句型

第二个条件 就是x仅由终结符组成

那么x就是文法G的句子

比如这个文法

语言集合L(G)

那就是0的n次方

链接1的n次方

如果有两个文法

G1和G2

它们产生的语言集合是相等的

那么我们就可以称

这两个文法是等价的

这节课就讲到这里

谢谢大家

编译原理课程列表:

第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 循环优化

--循环优化

--循环优化

-代码优化作业

-讨论:代码优化

文法和语言的形式化定义笔记与讨论

也许你还感兴趣的课程:

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