当前课程知识点:编译技术 >  第三章 语法分析 >  3.1 上下文无关文法 >  3.1.1 语法分析概述

返回《编译技术》慕课在线视频课程列表

3.1.1 语法分析概述在线视频

下一节:3.1.2 上下文无关文法定义

返回《编译技术》慕课在线视频列表

3.1.1 语法分析概述课程教案、知识点、字幕

各位同学大家好

欢迎大家来学习语法分析这一课

在这节课当中

我们主要来学习

语法分析器相关的内容

源程序

经过词法分析器分析之后

变成了一个一个的记号

那么这些词法分析器获取到的记号

会输送给语法分析器

语法分析器

用这些记号来构造分析树

那么在这一章

我们就重点来学习

语法分析器

是如何利用这些记号

来构建分析树的

我们在这一章

首先来学习上下无关文法

然后,我们利用上下无关文法

去构造语法分析树

那么包括自上而下分析

和自下而上分析两种分析方法

在这一章重点

我们是围绕语法分析器的

自动生成展开的

我们先来看一下

语法分析所做的工作

它将词法记号流

变成语法短语

也就是变成了一棵分析树

我们来对比一下

在中文当中

优秀的大工学子

它是形容词名词

这样的名词短语结构

那么在程序当中

我们写的 initial + rate * 60

我们把它进行词法分析之后

会得到 id + id * num

然后我们再看中文当中

形容词名词

我们会把它进一步解析

它是在句子当中

来作为宾语的

这个宾语是定语宾语这样的形式

定语是利用形容词来做定语

“优秀的”是做定语

那么名词是“大工学子”

这是一个名词的短语

回到我们的程序当中

其实它也是类似的

id+id*num

这是一个表达式

这个表达式是由两个表达式相加所组成的

第一个表达式

是一个标志符

我们识别出来

它是一个id

是 initial 组成的

第二个表达式

是另外两个表达式相乘得到的

也就是rate这个标志符乘以数字num 60

来组成第二个表达式

最终变成了一个大的表达式

那么表达式就是一个非终结符

也就是非叶子节点

而标志符数字 + * 这些都是终结符

我们再来看一下

语法分析的任务

字符组成了字符串

那么字符串

它会形成对应的词法记号

如何把字符串识别为对应的词法记号

我们在上一章当中

用到了词法分析器当中的

正规式去识别它

那么到了语法分析这一步

我们需要把记号

变成对应的表达式

表达式去组成语句一块

然后这个语句去组成程序块

程序块最终会组成整个程序

那么这一部分的解析

是用语法分析器来进行解析的

我们用到的是上下文无关文法

然后我们会把

记号、表达式、语句、程序块、程序

给它们组合起来

把它变成语法分析树

从而我们去判断一下

在语法上

是不是符合要求

那么语法分析

它的目标就是

我们把线性的词法记号流

组成一个有结构的语法树

那么实质就是将没有结构的数据

转换成有结构的数据

我们依据的就是上下无关文法

使用上下文无关文法

去描述我们程序当中的语法规则

所以在这一讲当中

我们首先来学习

上下文无关文法的定义

然后我们会学习推导的含义

会学习分析树是什么

还会说一下

分析树当中的二义性是怎么来的

如何去解决二义性

这一讲就介绍到这

谢谢大家

编译技术课程列表:

第一章 绪论

-1.1 编译技术绪论

--1.1 编译技术绪论

--编译原理介绍--作业

第二章 词法分析

-2.1  词法记号 串和语言

--2.1 词法记号 串和语言

--2.1  词法记号 串和语言--作业

-2.2  正规式 状态转换图

--2.2 正规式 状态转换图

--2.2  正规式 状态转换图--作业

-2.3  有限自动机

--2.3 有限自动机

--2.3  有限自动机--作业

-2.4  DFA构建 子集构造法 DAF化简

--2.4 DFA构建

-2.5 Lex

--2.5 词法分析工具Lex

第三章 语法分析

-3.1 上下文无关文法

--3.1.1 语法分析概述

--3.1.2 上下文无关文法定义

--3.1.3 推导

--3.1.4 二义性

-3.2 自上而分析中的文法

--3.2.1 消除左递归

--3.2.2 提取左因子

--3.2 上下文无关文法--作业

--3.2.3 语言和文法

--3.2.3 语言和文法--作业

-3.3 自上而下分析

--3.3.1 first follow

--3.3.2 LL(1)文法

--3.3.3 递归下降分析

--3.3.4 非递归下降分析的预测分析器

-3.4 自下而上分析

--3.4.1 归约句柄

--3.4.2 移进归约分析过程

--3.4 自下而上分析--作业

-3.5 LR分析器

--3.5.1 LR分析器

--3.5.2 活前缀

--3.5.3 SLR分析方法

--3.5.4 规范的LR分析方法

--3.5.5 LALR分析方法

--3.5.6 LR分析方法特点

--3.5.7 非二义且非LR的上下文无关文法

第四章 语法指导的翻译

-4.1 语法制导的定义

--4.1.1 属性文法

--4.1.2 属性依赖图和计算次序

--4.1 语法制导的定义--作业

-4.2 S属性的自下而上计算

--4.2.1 S属性的自下而上计算

--4.2.2 栈代码

-4.3 L属性定义

--4.3.1 L属性定义

--4.3.2 翻译方案

--4.3.3 预测翻译器的设计

--4.3 L属性定义--作业

-4.4 L属性的自下而上计算

--4.4.1 L属性的自下而上计算

--4.4.2 模拟继承属性的计算

--4.4 L属性的自下而上计算--作业

第五章 运行时存储空间的组织与管理

-5.1  概述

--5.1 概述

--概述-作业

-5.2  全局栈式存储分配

--5.2 全局栈式存储

-5.3  调用序列

--5.3 调用序列

-5.4 非局部名字的访问

--5.4 非局部名字

--5.4 非局部名字的访问--作业

第六章 中间代码生成

-6.1 中间代码生成

--6.1 中间代码生成概述

-6.2 作用域信息的保存

--6.2 声明语句-作用域信息的保存

第七章 代码生成

-7.1 代码生成器设计中的问题

--7.1 代码生成器的设计中的问题

-7.2 目标机器

--7.2 目标机器

--7.2  目标机器--作业

-7.3 基本块和流图

--7.3 基本块和流图

-7.4 一个简单的代码生成器

--7.4 一个简单的代码生成器

第八章 基于Python的编译器框架实现

-8.1 基于Python的编译器框架演示视频和代码

--8.1 基于Python的编译器框架演示

-8.2 代码介绍

--8.2.1 Scanner

--8.2.2 Parser -1LRItem

--8.2.3 Parser-2ActionGoto

--8.2.4 SA

-8.3 SimpleJava

--8.3 SimpleJava

3.1.1 语法分析概述笔记与讨论

也许你还感兴趣的课程:

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