当前课程知识点:Compilers Techniques >  3 Syntax Analysis >  3.1 Context-free Grammars >  3.1.1 The Role of the Parser

返回《Compilers Techniques》慕课在线视频课程列表

3.1.1 The Role of the Parser在线视频

下一节:3.1.2 The Formal Definition of a Context-free Grammar

返回《Compilers Techniques》慕课在线视频列表

3.1.1 The Role of the Parser课程教案、知识点、字幕

各位同学大家好

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

在这节课当中

我们主要来学习

语法分析器相关的内容

源程序

经过词法分析器分析之后

变成了一个一个的记号

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

会输送给语法分析器

语法分析器

用这些记号来构造分析树

那么在这一章

我们就重点来学习

语法分析器

是如何利用这些记号

来构建分析树的

我们在这一章

首先来学习上下无关文法

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

去构造语法分析树

那么包括自上而下分析

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

在这一章重点

我们是围绕语法分析器的

自动生成展开的

我们先来看一下

语法分析所做的工作

它将词法记号流

变成语法短语

也就是变成了一棵分析树

我们来对比一下

在中文当中

优秀的大工学子

它是形容词名词

这样的名词短语结构

那么在程序当中

我们写的 initial + rate * 60

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

会得到 id + id * num

然后我们再看中文当中

形容词名词

我们会把它进一步解析

它是在句子当中

来作为宾语的

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

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

“优秀的”是做定语

那么名词是“大工学子”

这是一个名词的短语

回到我们的程序当中

其实它也是类似的

id+id*num

这是一个表达式

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

第一个表达式

是一个标志符

我们识别出来

它是一个id

是 initial 组成的

第二个表达式

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

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

来组成第二个表达式

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

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

也就是非叶子节点

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

我们再来看一下

语法分析的任务

字符组成了字符串

那么字符串

它会形成对应的词法记号

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

我们在上一章当中

用到了词法分析器当中的

正规式去识别它

那么到了语法分析这一步

我们需要把记号

变成对应的表达式

表达式去组成语句一块

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

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

那么这一部分的解析

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

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

然后我们会把

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

给它们组合起来

把它变成语法分析树

从而我们去判断一下

在语法上

是不是符合要求

那么语法分析

它的目标就是

我们把线性的词法记号流

组成一个有结构的语法树

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

转换成有结构的数据

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

使用上下文无关文法

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

所以在这一讲当中

我们首先来学习

上下文无关文法的定义

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

会学习分析树是什么

还会说一下

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

如何去解决二义性

这一讲就介绍到这

谢谢大家

Compilers Techniques课程列表:

1 Overview of Compilers Techniques

-1.1 Overview of Compilers Techniques

--Chapter 1 Overview of Compilers Techniques

--Overview of Compilers Techniques

2 Lexical Analysis

-2.1  Lexical Tokens, Strings and Language

--2.1  Lexical Tokens, Strings and Language

--2.1 Lexical Tokens, Strings and Language

-2.2  Regular form

--2.2 Regular form

--2.2 Regular form

-2.3  Finite automata

--2.3 Finite automata

--2.3 Finite automata

-2.4  DFA construction, Subset construction, Simpleset DFA

--2.4  DFA construction, Subset construction, Simpleset DFA

-2.5 Lex

--2.5 Lex

3 Syntax Analysis

-3.1 Context-free Grammars

--3.1.1 The Role of the Parser

--3.1.2 The Formal Definition of a Context-free Grammar

--3.1.3 Derivations

--3.1.4 Ambiguity

-3.2 Writing a Grammar

--3.2.1 Elimination of Left Recursion

--3.2.2 Left Factoring

--3.2 Top-Down Parsing

-3.3 Languages and Grammars

--3.3 Languages and Grammars

--3.3 Language and Grammars

-3.4 Top-Down Parsing

--3.4.1 First and Follow

--3.4.2 LL(1) Grammers

--3.4.3 Recursive Descent Analysis

--3.4.4 Nonrecursive Descent Analysis

-3.5 Bottom-up Parsing

--3.5.1 Reductions and Handle

--3.5.2 Shift- Reduce Parsing

--Bottom-up Parsing

-3.6 LR Parsing

--3.6.1 LR Parsing

--3.6.2 Viable Prefixes

--3.6.3 Simple LR

--3.6.4 LR(1)

--3.6.5 LALR

--3.6.6 Characteristics of LR Parsing

--3.6.7 Non Ambiguous and Not LR Context-Free Grammars

4 Syntax-Directed Translation

-4.1 Syntax-Directed Definitions

--4.1.1 Attribute Grammars

--4.1.2 Attribute Dependency Graphs and Ordering the Evaluation of Attributes

--Syntax-Directed Definitions

-4.2 Bottom-Up Calculation of S Attribute

--4.2.1 Bottom-Up Calculation of S-Attributed

--4.2.2 Stack Code

-4.3 L-Attributed Definitions

--4.3.1 L-Attributed Definitions

--4.3.2 Translation Schemes

--4.3.3 Design of Predictive Translator

--L-Attributed Definitions

-4.4 Bottom-Up Parsing of L-Attributed Translation

--4.4.1 Bottom-Up Parsing of L-Attributed Translation

--4.4.2 Simulate the Parsing of Inherited Properties

--Bottom-Up Parsing of L-Attributed Translation

5 Organization and Management of Run-Time Storage Space

-5.1 Overview

--5.1 Overview

--Overview

-5.2 Global Stack Storage

--5.2 Global Stack Storage

-5.3 Calling Sequences

--5.3 Calling Sequences

-5.4 Non Local Names

--5.4 Non Local Names and dynamic scope

--Non Local Name

6 Intermediate Code Generation

-6.1 Overview of Intermediate Code Generation

--6.1 Overview of Intermediate Code Generation

-6.2 Declaration Statements

--6.2 Declaration Statements

7 Code Generation

-7.1 Issues in the Design of Code Generator

--7.1 Issues in the Design of Code Generator

-7.2 Target Machine

--7.2 Target Machine

--Target Machine

-7.3 Basic Blocks and Flow Graphs

--7.3 Basic Blocks and Flow Graphs

-7.4 A Simple Code Generator

--7.4 A Simple Code Generator

8 Design and Implementation of a Simple Compiler

-8.1 Demonstration of Compiler Framework based on Python

--8.1 Demonstration of Compiler Framework based on Python

-8.2 Basic

--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 The Role of the Parser笔记与讨论

也许你还感兴趣的课程:

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