2013年最新清华大学编译原理编译原理(第2版)ppt课件合集
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
n 自顶向下的语法分析。可以看作是为一个输入串寻找 一个最左推导的过程,也等价于从根开始,按前序生成 结点,为输入串构造分析树的过程。讨论一种有效的 无回溯的自顶向下分析程序,这种分析程序称 如 何自动的构造预测分析程序。
n 自底向上(自下而上)语法分析方法,也称移进-归 约分析法。它的实现思想是对输入符号串自左向右进 行扫描,并将输入符逐个移入一个后进先出栈中,边 移进边分析,一旦栈顶符号串形成可归约串,就用相 应非终结符代替可归约串,这称为一步归约,重复这 一过程,直到归约到栈中只剩文法的开始符号时,则 为分析成功,并确认输入串是文法的句子。本章介绍 LR分析法,分析过程中归约的是当前句型的句柄, 称为规范归约。重点讲解LR类(LR(0)、SLR(1 )、LALR(1)、LR(1))文法的分析表的构造原 理。
4 各部分权重
– 书面练习抽查 – 课堂小测(两次) 10% – 实践20%或35% (必做: Project1占10%; 选做: Project2占
25%, Project3占10% ;任选:Project4待定) – 期末考试 70%或55%
教材及主要参考书
n 教材:《编译原理》(第2版),张素琴、 吕映芝、蒋维杜、戴桂兰,清华大学出版社 2004
《编译原理》课程信息
n 教学目的与要求: 编译程序是现代计算机系统的基本组成部 分之一。本课程重点讲述编译程序的设计 原理和常用实现技术。通过课程的学习和 实验的完成,应该清楚的理解一个编译程 序是如何工作的;如果在以后遇到了任何 一个程序设计语言,应该知道如何实现这 个语言的多数机制;应具有一定的使用编 译构造工具开发编译程序的经验;会将所 学的常用技术和算法应用于类似的软件的 设计和实现中。
9 代码优化和目标代码生成
代码优化是对代码作一些等价变换,以使得 最后生成的目标代码更为高效。介绍优化技 术,优化分类以及优化工作的基础-控制流 和数据流分析问题。
编译的最后一个逻辑阶段是目标代码生成。 目标代码生成程序的设计细节要考虑目标语 言和操作系统的特点。讨论目标代码生成程 序设计的一般问题,包括指令选择,寄存器 分配和计算顺序选择。
the source program’s phrase structure.This process is also called parsing.The source program is parsed to check whether it conforms to the source language’s syntax,and to construct a suitable representation of its phrase structure.
教学内容
1 编译程序概述 编译程序是现代计算机系统的基本组成部分之 一.编译程序一般由词法分析程序,语法分析程 序,语义分析程序,中间代码生成程序,目标 代码生成程序,代码优化程序,符号表管理程 序和错误处理程序等成分构成。本章概要介绍 编译成分的主要功能以及编译阶段的逻辑关系 。
2 PL/0 编译程序剖析 给出一个简单的类Pascal语言,其编译程序用 高级语言(C和Pascal)实现。通过剖析该高 级语言程序以理解各编译成分的功能及手工实 现方法。
教学内容
6 语义分析和中间代码生成 在词法分析和语法分析之后,编译程序下一 个逻辑阶段的任务是语义分析和生成中间代 码。引入属性文法和语法制导的翻译的概念 ,介绍中间代码的形式,针对一些语法成分 讨论相应语义处理工作的描述。
7 符号表 介绍符号表的一般组织和使用方法,讨论分 程序结构语言的名字作用域分析及符号表设 计方案。
自动构造工具如lexyacc编译基础设施多源语言多目标机体系结构的编译程序构造和编译技术研究平台编译程序的实现方式一些编译基础设施编译基础设施compilerinfrastructurencinationalcompilerinfrastructureprojectsuifstanforduniversityzephyrvirginiauniversityprincetonuniversitytrimarancompilerinfrastructureimpactuiuccarhewlettpackardlaboratoriesreactilpnyugnuprojecteveryonecangetmaintainfreelycompilerresearchersviewtrimaraninfrastructure源语言1语法树源语言n机器描述文件machinemd目标机描述宏文件tmhrtl表示汇编语言代码语法分析器1rtl生成器语法分析器n优化器代码生成机器描述文件machinemd目标机描述宏文件tmhgcc结构现代编译技术的一些研究领域一些编译优化相关的研究领域依然为hottopicsprofiling技术软件流水softwarepiplines技术指令调度instructionscheduling技术兴起一些新的hottopics动态编译dynamiccompiling技术如powerwareresourceware等技术如certifyingcompilation技术thankyou
double f = sqrt(-1); 的Parsing ?
n 语言的语法规则规定了如何从单词符号 形成更大的结构(即语法单位)
语法分析
n 又例:
position := initial + rate * 60 ; (Pascal)规则 <赋值语句>::=<标识符>“:=”<表达式>
<表达式>::=<表达式>“+”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数>
教学内容
3 高级语言的认识
要学习和构造编译程序,理解和定义程序设计语言 是必不可少的。每个程序设计语言都有一定的规则用 以规定合适程序的语法结构,也需要有对一个程序的 含义的描述。上下文无关文法给出程序设计语言的精 确的,易于理解的语法说明。尚没有公认的形式系统 描述程序含义,但也有流行的描述语义规则的方法— 属性文法。
n 参考书:《Compilers: Principles, Technigues, and Tools》 Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman, AddisonWesley,1986. 影印版:人民邮电出版社, 2001
n 参考书:《程序设计语言 编译原理》(第3版 ),陈火旺、刘春林等,国防工业出版社 2000
n 编译程序(compiler) n 编译程序的源语言(源程序) (source
language)(source program) n 编译程序的目标语言(目标程序) (object or
target language)(object or target program) n 编译程序的实现语言(implementation
n 单词---token n 保留字---reserved word n 标识符 ---identifier(user-defined
name)
例
n 程序文本If x = y then z := 1 else z := 2; 经词法分析,变成一个个单词 n if, x, =, y, then, z, n :=, 1, else, z, :=, 2, ; n 语言的单词符号是由词法规则所确定的
第1章 概述
1.1 什么是编译程序 1.2 程序设计语言的实现 1.3 处理源程序的软件工具 1.4 编译技术的发展
1.1什么是编译程序(compiler)
编译程序是现代计算机系统的基本组 成部分. 从功能上看,一个编译程序就是一个 语言翻译程序,它把一种语言(称作源 语言)书写的程序翻译成另一种语言(称 作目标语言)的等价的程序.
Expression FuncCall TIDENT TLPAREN Expression TRPAREN TIDENT TLPAREN UnaryExpression TRPAREN TIDENT TLPAREN TOP Expression TRPAREN TIDENT TLPAREN TOP TINTCONSTANT TRPAREN
什么是编译程序
功能
高级语言 书写的程序
编译程序
术语
编译程序的源语言(源 程序)
编译程序的目标语言( 目标程序)
编译程序的实现语言
SO I
低级语言程序
ST I
什么是编译程序
n 分类
– 软件 – 系统软件 – 语言处理系统
编译系 统 操作系统
裸机
分类
n 软件:计算机系统中 的程序及其文档
n 系统软件:居于计算 机系统中最靠近硬件 的一层,其他软件一 般都通过系统软件发 挥作用。他和具体的 应用领域无关,如编 译系统和操作系统 等。
language) n 语言处理程序(language processor) n 语言转(变)换(language transformation)
编译逻辑过程
词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成
词法分析—第一步识别单词
英文句子由单词构成 This line is a longer sentence. (字母组成的有集体含义的最小成分) n 句子开头的单词第一个字母要大写 n 空格是单词分隔符 n 句点是句子结尾
词法分析
double f = sqrt(-1);
TDOUBLE TIDENT TOP TIDENT
(“double”) (“f”) (“=“) (“sqrt”)
TLPAREN (“(“)
TOP
(“-”)
TINTCONSTANT (“1”)
TRPAREN (“)”)
TSEP
(“;”)
词法分析
n 词法分析(lexical analysis or scanning) --The stream of characters making up a source program is read from left to right and grouped into tokens,which are sequences of characters that have a collective meaning.
课程架构:
1 理论和实践并重的课程 2 理论部分的题目出现于书面练习,课堂小测和期末考试 3 实践题目(Project)
– Project1: 用高级语言(C或Pascal)实现扩充的PL/0编译程序
– Project2: 使用编译构造工具实现面向对象语言Tool的编译程序 – Project3: 使用编译构造工具实现扩充的PL0编译程序 – Project4: 用GCC裁制一个编译器(任选)
赋值语句 标识符 := 表达式
表达式 + 表达式
标识符 表达式 * 表达式
标识符
整数
id1:=id2+id3*N
:=
id1
+
Position
id2
*
initial
id3
N
rate
60
语法分析
n 语法分析(syntax analysis or parsing) The purpose of syntax analysis is to determine
。词法规则规定了字母表中哪样的字符 串是一个单词符号。
词法分析 position := initial + rate * 60;
单词类型 标识符1(id1) 算符(赋值) 标识符2(id2) 算符(加) 标识符3(id3) 算符(乘) 整数 分号
单词值 position
:= initial
+ rate
4 词法分析程序的自动构造
词法分析程序是编译程序的一个构成部分,它的主要 任务是扫描源程序,按构词规则识别单词,并报告发 现的词法错误。正则表达式和有穷状态自动机分别作 为单词的描述工具和识别机制,成为词法分析程序的 自动构造原理,学习Lex(Flex)工具的使用方法。
教学内容
5 语法分析程序的构造
* 60 ;
语法分析 Syntax Analysis 功能:层次分析.依据源程序的语法规则把源 程序的单词序列组成语法短语(表示成语法 树).
n 也称为 “parsing” n 使用 context-free grammars n 结构上的合法性Structural validation (可生成语法树或推导Creates parse tree
教学内容
8 运行时的存储组织和管理 编译的最终目标是生成目标程序。在目标代 码生成前,编译程序必须对目标程序运行时 的数据空间进行组织和安排. 介绍目标程序运 行时的数据空间的存储分配策略,说明程序 设计语言本身关于名称的作用域和生存期的 规则与存储分配策略的关系,重点讨论栈式 动态存储方案.
教学内容
ist his linealo gerse nte nce.
词法分析
从左至右扫描字符流的源程序、分解构成 源程序的字符串,识别出(拼)一个个的 单词(符号)
单词符号是语言中具有独立意义的最基 本结构。多数程序语言中,单词符号一 般包括 —各类型的常数、保留字、标识 符、运算符、界符等等。
例如
double f = sqrt(-1);
or derivation)
This line is a longer sentence
分析程序成分
double f = sqrt(-1);
“sqrt(-1)”的推导
规则 Expression -> UnaryExpression Expression -> FuncCall Expression -> TINTCONSTANT UnaryExpression -> TOP Expression FuncCall -> TIDENT TLPAREN Expression TRPAREN
n 语言处理系统:把软 件语言书写的各种程 序处理成可在计算机 上执行的程序。
n 软件语言:用于书写 软件的语言。它主要 包括需求定义语言, 功能性语言,设计性 语言,程序设计语言 以及文档语言。
什么是编译程序
n 语言转(变)换系统
C++
C++编译器
Java
Java编译器
C Bytecode
术语
n 自底向上(自下而上)语法分析方法,也称移进-归 约分析法。它的实现思想是对输入符号串自左向右进 行扫描,并将输入符逐个移入一个后进先出栈中,边 移进边分析,一旦栈顶符号串形成可归约串,就用相 应非终结符代替可归约串,这称为一步归约,重复这 一过程,直到归约到栈中只剩文法的开始符号时,则 为分析成功,并确认输入串是文法的句子。本章介绍 LR分析法,分析过程中归约的是当前句型的句柄, 称为规范归约。重点讲解LR类(LR(0)、SLR(1 )、LALR(1)、LR(1))文法的分析表的构造原 理。
4 各部分权重
– 书面练习抽查 – 课堂小测(两次) 10% – 实践20%或35% (必做: Project1占10%; 选做: Project2占
25%, Project3占10% ;任选:Project4待定) – 期末考试 70%或55%
教材及主要参考书
n 教材:《编译原理》(第2版),张素琴、 吕映芝、蒋维杜、戴桂兰,清华大学出版社 2004
《编译原理》课程信息
n 教学目的与要求: 编译程序是现代计算机系统的基本组成部 分之一。本课程重点讲述编译程序的设计 原理和常用实现技术。通过课程的学习和 实验的完成,应该清楚的理解一个编译程 序是如何工作的;如果在以后遇到了任何 一个程序设计语言,应该知道如何实现这 个语言的多数机制;应具有一定的使用编 译构造工具开发编译程序的经验;会将所 学的常用技术和算法应用于类似的软件的 设计和实现中。
9 代码优化和目标代码生成
代码优化是对代码作一些等价变换,以使得 最后生成的目标代码更为高效。介绍优化技 术,优化分类以及优化工作的基础-控制流 和数据流分析问题。
编译的最后一个逻辑阶段是目标代码生成。 目标代码生成程序的设计细节要考虑目标语 言和操作系统的特点。讨论目标代码生成程 序设计的一般问题,包括指令选择,寄存器 分配和计算顺序选择。
the source program’s phrase structure.This process is also called parsing.The source program is parsed to check whether it conforms to the source language’s syntax,and to construct a suitable representation of its phrase structure.
教学内容
1 编译程序概述 编译程序是现代计算机系统的基本组成部分之 一.编译程序一般由词法分析程序,语法分析程 序,语义分析程序,中间代码生成程序,目标 代码生成程序,代码优化程序,符号表管理程 序和错误处理程序等成分构成。本章概要介绍 编译成分的主要功能以及编译阶段的逻辑关系 。
2 PL/0 编译程序剖析 给出一个简单的类Pascal语言,其编译程序用 高级语言(C和Pascal)实现。通过剖析该高 级语言程序以理解各编译成分的功能及手工实 现方法。
教学内容
6 语义分析和中间代码生成 在词法分析和语法分析之后,编译程序下一 个逻辑阶段的任务是语义分析和生成中间代 码。引入属性文法和语法制导的翻译的概念 ,介绍中间代码的形式,针对一些语法成分 讨论相应语义处理工作的描述。
7 符号表 介绍符号表的一般组织和使用方法,讨论分 程序结构语言的名字作用域分析及符号表设 计方案。
自动构造工具如lexyacc编译基础设施多源语言多目标机体系结构的编译程序构造和编译技术研究平台编译程序的实现方式一些编译基础设施编译基础设施compilerinfrastructurencinationalcompilerinfrastructureprojectsuifstanforduniversityzephyrvirginiauniversityprincetonuniversitytrimarancompilerinfrastructureimpactuiuccarhewlettpackardlaboratoriesreactilpnyugnuprojecteveryonecangetmaintainfreelycompilerresearchersviewtrimaraninfrastructure源语言1语法树源语言n机器描述文件machinemd目标机描述宏文件tmhrtl表示汇编语言代码语法分析器1rtl生成器语法分析器n优化器代码生成机器描述文件machinemd目标机描述宏文件tmhgcc结构现代编译技术的一些研究领域一些编译优化相关的研究领域依然为hottopicsprofiling技术软件流水softwarepiplines技术指令调度instructionscheduling技术兴起一些新的hottopics动态编译dynamiccompiling技术如powerwareresourceware等技术如certifyingcompilation技术thankyou
double f = sqrt(-1); 的Parsing ?
n 语言的语法规则规定了如何从单词符号 形成更大的结构(即语法单位)
语法分析
n 又例:
position := initial + rate * 60 ; (Pascal)规则 <赋值语句>::=<标识符>“:=”<表达式>
<表达式>::=<表达式>“+”<表达式> <表达式>::=<表达式>“*”<表达式> <表达式>::=“(”<表达式>“)” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数>
教学内容
3 高级语言的认识
要学习和构造编译程序,理解和定义程序设计语言 是必不可少的。每个程序设计语言都有一定的规则用 以规定合适程序的语法结构,也需要有对一个程序的 含义的描述。上下文无关文法给出程序设计语言的精 确的,易于理解的语法说明。尚没有公认的形式系统 描述程序含义,但也有流行的描述语义规则的方法— 属性文法。
n 参考书:《Compilers: Principles, Technigues, and Tools》 Alfred V.Aho, Ravi Sethi, Jeffrey D.Ullman, AddisonWesley,1986. 影印版:人民邮电出版社, 2001
n 参考书:《程序设计语言 编译原理》(第3版 ),陈火旺、刘春林等,国防工业出版社 2000
n 编译程序(compiler) n 编译程序的源语言(源程序) (source
language)(source program) n 编译程序的目标语言(目标程序) (object or
target language)(object or target program) n 编译程序的实现语言(implementation
n 单词---token n 保留字---reserved word n 标识符 ---identifier(user-defined
name)
例
n 程序文本If x = y then z := 1 else z := 2; 经词法分析,变成一个个单词 n if, x, =, y, then, z, n :=, 1, else, z, :=, 2, ; n 语言的单词符号是由词法规则所确定的
第1章 概述
1.1 什么是编译程序 1.2 程序设计语言的实现 1.3 处理源程序的软件工具 1.4 编译技术的发展
1.1什么是编译程序(compiler)
编译程序是现代计算机系统的基本组 成部分. 从功能上看,一个编译程序就是一个 语言翻译程序,它把一种语言(称作源 语言)书写的程序翻译成另一种语言(称 作目标语言)的等价的程序.
Expression FuncCall TIDENT TLPAREN Expression TRPAREN TIDENT TLPAREN UnaryExpression TRPAREN TIDENT TLPAREN TOP Expression TRPAREN TIDENT TLPAREN TOP TINTCONSTANT TRPAREN
什么是编译程序
功能
高级语言 书写的程序
编译程序
术语
编译程序的源语言(源 程序)
编译程序的目标语言( 目标程序)
编译程序的实现语言
SO I
低级语言程序
ST I
什么是编译程序
n 分类
– 软件 – 系统软件 – 语言处理系统
编译系 统 操作系统
裸机
分类
n 软件:计算机系统中 的程序及其文档
n 系统软件:居于计算 机系统中最靠近硬件 的一层,其他软件一 般都通过系统软件发 挥作用。他和具体的 应用领域无关,如编 译系统和操作系统 等。
language) n 语言处理程序(language processor) n 语言转(变)换(language transformation)
编译逻辑过程
词法分析 语法分析 语义分析 中间代码生成 代码优化 目标代码生成
词法分析—第一步识别单词
英文句子由单词构成 This line is a longer sentence. (字母组成的有集体含义的最小成分) n 句子开头的单词第一个字母要大写 n 空格是单词分隔符 n 句点是句子结尾
词法分析
double f = sqrt(-1);
TDOUBLE TIDENT TOP TIDENT
(“double”) (“f”) (“=“) (“sqrt”)
TLPAREN (“(“)
TOP
(“-”)
TINTCONSTANT (“1”)
TRPAREN (“)”)
TSEP
(“;”)
词法分析
n 词法分析(lexical analysis or scanning) --The stream of characters making up a source program is read from left to right and grouped into tokens,which are sequences of characters that have a collective meaning.
课程架构:
1 理论和实践并重的课程 2 理论部分的题目出现于书面练习,课堂小测和期末考试 3 实践题目(Project)
– Project1: 用高级语言(C或Pascal)实现扩充的PL/0编译程序
– Project2: 使用编译构造工具实现面向对象语言Tool的编译程序 – Project3: 使用编译构造工具实现扩充的PL0编译程序 – Project4: 用GCC裁制一个编译器(任选)
赋值语句 标识符 := 表达式
表达式 + 表达式
标识符 表达式 * 表达式
标识符
整数
id1:=id2+id3*N
:=
id1
+
Position
id2
*
initial
id3
N
rate
60
语法分析
n 语法分析(syntax analysis or parsing) The purpose of syntax analysis is to determine
。词法规则规定了字母表中哪样的字符 串是一个单词符号。
词法分析 position := initial + rate * 60;
单词类型 标识符1(id1) 算符(赋值) 标识符2(id2) 算符(加) 标识符3(id3) 算符(乘) 整数 分号
单词值 position
:= initial
+ rate
4 词法分析程序的自动构造
词法分析程序是编译程序的一个构成部分,它的主要 任务是扫描源程序,按构词规则识别单词,并报告发 现的词法错误。正则表达式和有穷状态自动机分别作 为单词的描述工具和识别机制,成为词法分析程序的 自动构造原理,学习Lex(Flex)工具的使用方法。
教学内容
5 语法分析程序的构造
* 60 ;
语法分析 Syntax Analysis 功能:层次分析.依据源程序的语法规则把源 程序的单词序列组成语法短语(表示成语法 树).
n 也称为 “parsing” n 使用 context-free grammars n 结构上的合法性Structural validation (可生成语法树或推导Creates parse tree
教学内容
8 运行时的存储组织和管理 编译的最终目标是生成目标程序。在目标代 码生成前,编译程序必须对目标程序运行时 的数据空间进行组织和安排. 介绍目标程序运 行时的数据空间的存储分配策略,说明程序 设计语言本身关于名称的作用域和生存期的 规则与存储分配策略的关系,重点讨论栈式 动态存储方案.
教学内容
ist his linealo gerse nte nce.
词法分析
从左至右扫描字符流的源程序、分解构成 源程序的字符串,识别出(拼)一个个的 单词(符号)
单词符号是语言中具有独立意义的最基 本结构。多数程序语言中,单词符号一 般包括 —各类型的常数、保留字、标识 符、运算符、界符等等。
例如
double f = sqrt(-1);
or derivation)
This line is a longer sentence
分析程序成分
double f = sqrt(-1);
“sqrt(-1)”的推导
规则 Expression -> UnaryExpression Expression -> FuncCall Expression -> TINTCONSTANT UnaryExpression -> TOP Expression FuncCall -> TIDENT TLPAREN Expression TRPAREN
n 语言处理系统:把软 件语言书写的各种程 序处理成可在计算机 上执行的程序。
n 软件语言:用于书写 软件的语言。它主要 包括需求定义语言, 功能性语言,设计性 语言,程序设计语言 以及文档语言。
什么是编译程序
n 语言转(变)换系统
C++
C++编译器
Java
Java编译器
C Bytecode
术语