当前课程知识点:Compilers Techniques >  8 Design and Implementation of a Simple Compiler >  8.2 Basic >  8.2.4 SA

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

8.2.4 SA在线视频

下一节:8.3 SimpleJava

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

8.2.4 SA课程教案、知识点、字幕

各位同学

大家好

我们在学习完编译器

基本的知识之后

我们是不是可以自己来编写一个编译器呢?

从这节课开始

我们就来学习一下

基于Python的简易编译器实现

我们可以从头到尾

来学习一下

如何自己来编写一个编译器

我们看一下语义分析的部分

语义分析的作用

主要是利用属性文法和分析树

实现上下文有关分析

在语义分析的部分

需要针对不同的产生式

给定不同的属性文法

在这里

我们利用装饰器

来建立产生式和函数的映射关系

下面我们来看一下

Parse Tree的实现方法

在语法树相关的部分

我们设计了TreeNode这个类

由于后面还有抽象语法树

因此

在这里我们提取公共的部分

实现了一个公有的父类TreeNode

在TreeNode类当中

我们需要注意

在这里包含了

重载属性相关的函数

这样我们可以将属性

映射到私有的字典

在这里

我们需要简单的封装一下根结点

把它封装到class Tree

语法树当中包含PTNode

PTNode类继承自TreeNode

在PTNode类当中

我们需要记录

每个结点的产生式编号

以便为装饰器映射函数做准备

那么语义分析

可以用来做什么呢

语义分析可以用来直接求取数值

比如说

针对计算器的编译器来说

我们可以直接用来求数值

针对计算器

如果编写好了编译器之后

我们输入对应的计算语句

比如说24×500+15×30

就可以看到语义分析的结果

语义分析这一步

除了求取值以外

还可以生成中间表示

我们记为IR

中间表示

大家回忆一下有常用的几种

比如说可以用抽象语法树

如左边所示

还可以使用三地址代码

如右边所示

在设计中间表示的时候

还需要考虑

需要记录符号表和作用域

下面我们看一下

属性文法的实现方法

这部分放入PaserTreeActionRegister类当中实现

在这部分当中

我们利用装饰器

来实现基于属性文法的语义分析

从语义分析开始

我们发现

所有的规则都必须针对具体的语言本身

来进行设计

所以从这里开始

我们以一个架空的语言

也就是一个小的语言

作为例子来进行说明

这里我们以simpleJavaCompiler

做一个简单的例子

来说明编译器的开发过程

SimpleJava编译器的说明

放在下一讲

谢谢大家的学习

这一讲就到这里

谢谢大家

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

8.2.4 SA笔记与讨论

也许你还感兴趣的课程:

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