当前课程知识点:Compilers Techniques >  3 Syntax Analysis >  3.4 Top-Down Parsing >  3.4.3 Recursive Descent Analysis

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

3.4.3 Recursive Descent Analysis在线视频

下一节:3.4.4 Nonrecursive Descent Analysis

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

3.4.3 Recursive Descent Analysis课程教案、知识点、字幕

各位同学大家好

这节课

我们继续来学习语法分析部分

这节课我们主要来学习

自上而下分析方法中的递归下降分析方法

根据这个文法

我们可以将对应的文法改写为对应的程序

所有产生式的左部作为一个函数出现

产生式的右部作为程序的内容来出现

比如说对于第1个产生式

S可以产生BA

我们可以写出S对应的函数

S这个函数中

首先我们进行B的匹配

然后我们来匹配A

而B和A都是非终结符

每一个非终结符对应一个函数

所以S中包含两个函数

首先是B这个函数

然后是A这个函数

对于A可以产生BS或d

我们需要根据A的 first集合来进行决策

A这个函数中

首先我们需要去用if语句来进行判定

如果我们看到的是First(B)

也就是a b c这三个符号

那么 我们需要将A展开为BS

也就是 我们在看见a b c之后 将A展开为BS

对应的 也就是 B的函数和S的函数

如果接下来我们看到的是d

那么我们应该将A展开为d

所以if语句的else部分 我们需要去匹配d

针对B对应的产生式

我们仍然可以直接

将产生式写为对应的程序

首先我们用if语句进行判定

如果我们看到的是a 那么需要去匹配a

接下来 我们需要匹配的是A这个函数

否则 如果我们看到的是B 那应该将B推导为BS

所以我们匹配b 然后匹配S这个函数

否则的话 我们需要去匹配c这个符号

根据这个文法

我们其实观察到

每一次来写递归下降的分析程序

只需要根据本法的内容把它改写出来

我们再来看一个一般的递归下降程序

也就是在进行递归下降分析的时候

我们为每一个非终结符 写一个分析过程

这些过程可能是递归的

所以我们将它称为递归下降的分析程序

比如说有这样的一个文法

type可以产生simple 或者 ↑ id 或者array [simple] of type

simple可以产生整数 或者字符型的 或者是数字类型的

我们可以有一个辅助的过程,是match这个过程

如果我们看到了一个终结符t

那么 我们就可以去读取下一个符号

否则的话 出错

我们可以看到 对type来说

我们可以根据它的文法

直接将它的程序写出来

type这个函数

我们首先用if语句去看一下看到的是不是整数

如果 看到的是整数 或者是符号 或者是数字

我们就匹配simple类型

否则 如果我们看到一个向上的箭头 ↑

那么我们匹配向上的箭头 ↑

然后匹配id

否则如果我们看到的是数组array的话

我们就匹配数组

然后匹配左括号 然后匹配simple 再匹配右括号

然后我们再匹配of

然后我们再匹配type的类型

否则的话 就是一个出错的结果

我们看对于simple这个函数来说

同样根据它的文法来写出对应的程序

如果我们看到的是整型 我们就匹配整型

否则如果看到的是字符类型 匹配字符

如果看到的是数字类型

我们去匹配数字 匹配小数点 然后再匹配数字

如果看到的是其它类型

我们就会去进行报错

递归下降的分析程序

我们就学习到这 这一小节结束

谢谢大家

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.4.3 Recursive Descent Analysis笔记与讨论

也许你还感兴趣的课程:

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