当前课程知识点:编译原理 >  第2章 编译理论基础 >  2.4 上下文无关文法及语法树 >  上下文无关文法及语法树

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

上下文无关文法及语法树在线视频

下一节:上下文无关文法及语法树

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

上下文无关文法及语法树课程教案、知识点、字幕

同学们好

这节课给大家介绍

上下文无关文法及语法树

上下文无关文法有足够的能力

描述现今程序设计语言的语法结构

大家看

这里是赋值语句的产生式

还有下面这个是条件语句的产生式

再来看这里是一个简单的表达式文法

这里的非终结符E表示一类算术表达式

终结符i表示程序设计语言中的“变量”

有四条规则

这个文法定义了由变量i,+,*,( )

组成的算术表达式的语法结构

因此 我们关心上下文无关文法

形成语言的句子分析

和分析方法的研究

后面 如果我们不加特殊说明

文法均是指上下文无关文法

前面我们讲过推导的概念

现在再来介绍一种

描述上下文无关文法的

句型推导的直观方法

语法树

我们也称作推导树

再来有一个文法G[S]

我们来判断符号串“aabbaa”

是不是这个文法的句子

可以用这个语法树来展现推导过程

大家来看推导过程

S是树根

它的直接子孙是aAS

就对应着规则S->aAS

从图中我们可以看出有子孙的结点

必是非终结符

这里这棵树

也叫作句子aabbaa的语法树

所以 给定文法G

对于文法的任何句型

我们都能构造出来与之关联的语法树

语法树满足下列4个条件

第一 每一个结点都有一个字母表

V中的一个符号作标记

第二 根的标记就是开始符号

或者是标识符号S

第三 如果一个结点n至少有一个

除它自己之外的子孙

并且n有标记A

那么这个A就是非终结符

第四条 如果结点A的k个子孙

从左到右的次序是

n1,n2,…,nk

它的标记分别为A1,A2,…,Ak

那么A->A1A2,…Ak

一定是P中的一个产生式

语法树表示了推导过程中

用了哪个产生式

并没有标明推导的顺序

比如句子aabbaade

它的推导过程

有这里这几种

假如我们约定推导顺序

那最左推导

就对应的是在推导的任何一步

比方说从α=>β

其中α、β是句型

那么对于α中的

最左边非终结符我们先进行推导

最右推导

就是在推导过程中的任何一步

比如说α=>β

那么就是对α中的

最右边的非终结符先进行推导

我们刚给出来的几种推导过程中

第一种推导过程中总是对

当前串中的最右边非终结符先推导

我们称之为最右推导

第二种就是恰恰相反

是对当前串中的

最左边的非终结符先进行推导

我们称之为最左推导

最右推导

我们把它叫做规范推导

由规范推导所得到的句型就是规范句型

有一个问题

就是一个句型是否对应唯一的一棵语法树

我们来看这里这个文法

其中有一个句型 i*i+i

那么这个句型

它就有两种不同的最左推导

我们看它对应的这两棵语法树

如果一个文法存在某一个句子

对应两棵不同的语法树

这个文法我们就称之为

它有二义性的文法

或者说如果一个文法

存在某一个句子或者句型

有两种不同的

最左推导或者是最右推导

那么这个文法我们称之为

它就是有二义性的文法

二义性是一种常见的语法现象

但是 对于编译程序而言

二义性文法是有害的

为了解决二义性文法带来的

不确定性问题

通常的方法

一是修改文法

二是利用附加条件

对其进行改变

消除其二义性

比如说这里这个文法

我们可以约定优先级

也就是约定*的优先级大于+

那么我们就可以把这个文法的

二义性消除掉了

还可以将这个文法进行改造

改造为没有二义性的文法

比如说这个文法

我们可以进行改造得到这样一个文法

这个文法就是没有二义性的文法

这节课就讲到这里

谢谢大家

编译原理课程列表:

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

--循环优化

--循环优化

-代码优化作业

-讨论:代码优化

上下文无关文法及语法树笔记与讨论

也许你还感兴趣的课程:

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