1hhh第1章-概述PPT课件
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
编译程序的实现语言
(implementation language)
语言处理程序(language processor) 语言转换(language transformation)
-
8
编译过程:
词法分析 语法分析 语义分析和中间代码生成 代码优化 目标代码生成
-
9
1.词法分析(lexical analysis, scanning)
-
14
语法树:
赋值语句
position := initial+rate*60;
标识符 := 表达式 ;
表达式 + 表达式
标识符 表达式 * 表达式
标识符
整数
-
15
position := initial+rate*60;
抽象语法树: :=
position
+
initial
*
rate
60
-
16
3. 语义分析 (semantic analysis)
从左至右扫描字符流的源程序、分解构成 源程序的字符串,识别出一个个单词。
单词是语言中具有独立意义的最基本结构。 一般包括:各类型的常数、保留字、标识 符、运算符、界符等。
例如,double f = sqrt(-1);
词法分析识别出9部分: double f = sqrt ( - 1 ) ;
-
10
词法分析相关的术语: (lexical analysis or scanning)
编译原理
教材:编译原理(第2来自百度文库), 张素琴等, 清华大学出版社 2004
参考书:
[1] 胡元义等. 编译原理实践教程. 西安电子科技大学出版社, 2002
[2] Alfred V. Aho, Ravi Sethi, Jeffrey D.Ullman. Compilers: Principles, Technigues, and Tools. Addison-Wesley, 1986. 影印版:人民邮电出 版社 2000
分析过程可利用语法树或推导来表示。 (parse tree, derivation tree)
-
13
例如,position := initial + rate*60;
Pascal 语法规则(CFG): <赋值语句>::=<标识符> “:=” <表达式>; <表达式>::=<表达式> “ + ” <表达式> <表达式>::=<表达式> “ * ” <表达式> <表达式>::= “(” <表达式> “) ” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数>
源程序经过词法分析、语法分析后, 还需 进行语义分析。 语义分析对语法结构正确的程序进一步分 析其是否符合源程序的上下文约束、运算 相容性等规定,即语义检查。 语义检查分为静态语义检查和动态语义检 查两类。在语义分析阶段只进行静态语义 检查,即检查每个语法成分的静态语义。
-
17
静态语义检查: – 使用的变量声明了吗? – 允许操作运算对象吗? – 类型正确吗? –…
单词:token 保留字:reserved word 标识符:identifier //user-defined name
例如,语句 if x=y then z:=1 else z:=2; 经词法分析, 变成13个token: if, x, =, y, then, z, :=, 1, else, z, :=, 2, ;
编译系统
操作系统
裸机
-
6
语言转换系统
C++
C++编译器
Java
Java编译器
C Bytecode
-
7
编译程序(compiler)
编译程序的源语言(源程序)
(source language, source program)
编译程序的目标语言(目标程序)
(object / target language) (object / target program)
分号
-;
12
2. 语法分析(syntax Analysis, parsing)
功能:依据语法规则把源程序的单词序列组 成语法短语。如position := initial + rate*60;
语法分析是一种层次分析方法。树
使用上下文无关文法进行语法分析。
(context-free grammar, CFG)
-
11
单词符号由词法规则确定。词法规则规 定了源程序中哪样的字符串是单词。
例如,position := initial + rate*60;
单词类型
单词值
标识符1(id1) position
算符(赋值)
:=
标识符2(id2) initial
算符(加)
+
标识符3(id3) rate
算符(乘)
*
整数
60
[3] 陈意云等. 编译原理和技术. 合肥: 中国科学技术大学出版社, 2002 [4] 陈火旺等. 程序设计语言编译原理. 北京: 国防工业出版社, 2000
-
1
编译程序是现代计算机系统的基本组 成部分,主要由以下部分构成:
词法分析程序 语法分析程序 语义分析和中间代码生成程序 代码优化程序 目标代码生成程序 符号表管理程序和错误处理程序 运行时存储空间组织
-
4
1.1 什么是编译程序(compiler)
编译程序就是一个语言翻译程序,它把一 种语言(源语言)书写的程序翻译成另一种语 言(目标语言)的等价的程序。
高级语言 程序
编译程序 低级语言程序
术语:编译程序的源语言(源程序)、目标语 言(目标程序)、实现语言
-
5
分类:
– 软件 – 系统软件 – 语言处理系统
-
2
学习编译程序,需要先理解程序设计语 言。每个程序设计语言都有一定的规则 用于规定程序的语法结构,也有一定的 规则用于描述程序的语义。
上下文无关文法给出程序设计语言的精 确的语法说明。
尚无公认的形式系统用于描述程序的语 义。通常,用属性文法描述语义规则。
-
3
第1章 概述
1.1 什么是编译程序 1.2 程序设计语言的实现 1.3 处理源程序的软件工具 1.4 编译技术的发展
语义分析: :=
例如, program p(); var rate: real; var initial: real; var position: real; … position := initial + rate*60; /*warning*/
-
18
position := initial + rate*60;
(implementation language)
语言处理程序(language processor) 语言转换(language transformation)
-
8
编译过程:
词法分析 语法分析 语义分析和中间代码生成 代码优化 目标代码生成
-
9
1.词法分析(lexical analysis, scanning)
-
14
语法树:
赋值语句
position := initial+rate*60;
标识符 := 表达式 ;
表达式 + 表达式
标识符 表达式 * 表达式
标识符
整数
-
15
position := initial+rate*60;
抽象语法树: :=
position
+
initial
*
rate
60
-
16
3. 语义分析 (semantic analysis)
从左至右扫描字符流的源程序、分解构成 源程序的字符串,识别出一个个单词。
单词是语言中具有独立意义的最基本结构。 一般包括:各类型的常数、保留字、标识 符、运算符、界符等。
例如,double f = sqrt(-1);
词法分析识别出9部分: double f = sqrt ( - 1 ) ;
-
10
词法分析相关的术语: (lexical analysis or scanning)
编译原理
教材:编译原理(第2来自百度文库), 张素琴等, 清华大学出版社 2004
参考书:
[1] 胡元义等. 编译原理实践教程. 西安电子科技大学出版社, 2002
[2] Alfred V. Aho, Ravi Sethi, Jeffrey D.Ullman. Compilers: Principles, Technigues, and Tools. Addison-Wesley, 1986. 影印版:人民邮电出 版社 2000
分析过程可利用语法树或推导来表示。 (parse tree, derivation tree)
-
13
例如,position := initial + rate*60;
Pascal 语法规则(CFG): <赋值语句>::=<标识符> “:=” <表达式>; <表达式>::=<表达式> “ + ” <表达式> <表达式>::=<表达式> “ * ” <表达式> <表达式>::= “(” <表达式> “) ” <表达式>::=<标识符> <表达式>::=<整数> <表达式>::=<实数>
源程序经过词法分析、语法分析后, 还需 进行语义分析。 语义分析对语法结构正确的程序进一步分 析其是否符合源程序的上下文约束、运算 相容性等规定,即语义检查。 语义检查分为静态语义检查和动态语义检 查两类。在语义分析阶段只进行静态语义 检查,即检查每个语法成分的静态语义。
-
17
静态语义检查: – 使用的变量声明了吗? – 允许操作运算对象吗? – 类型正确吗? –…
单词:token 保留字:reserved word 标识符:identifier //user-defined name
例如,语句 if x=y then z:=1 else z:=2; 经词法分析, 变成13个token: if, x, =, y, then, z, :=, 1, else, z, :=, 2, ;
编译系统
操作系统
裸机
-
6
语言转换系统
C++
C++编译器
Java
Java编译器
C Bytecode
-
7
编译程序(compiler)
编译程序的源语言(源程序)
(source language, source program)
编译程序的目标语言(目标程序)
(object / target language) (object / target program)
分号
-;
12
2. 语法分析(syntax Analysis, parsing)
功能:依据语法规则把源程序的单词序列组 成语法短语。如position := initial + rate*60;
语法分析是一种层次分析方法。树
使用上下文无关文法进行语法分析。
(context-free grammar, CFG)
-
11
单词符号由词法规则确定。词法规则规 定了源程序中哪样的字符串是单词。
例如,position := initial + rate*60;
单词类型
单词值
标识符1(id1) position
算符(赋值)
:=
标识符2(id2) initial
算符(加)
+
标识符3(id3) rate
算符(乘)
*
整数
60
[3] 陈意云等. 编译原理和技术. 合肥: 中国科学技术大学出版社, 2002 [4] 陈火旺等. 程序设计语言编译原理. 北京: 国防工业出版社, 2000
-
1
编译程序是现代计算机系统的基本组 成部分,主要由以下部分构成:
词法分析程序 语法分析程序 语义分析和中间代码生成程序 代码优化程序 目标代码生成程序 符号表管理程序和错误处理程序 运行时存储空间组织
-
4
1.1 什么是编译程序(compiler)
编译程序就是一个语言翻译程序,它把一 种语言(源语言)书写的程序翻译成另一种语 言(目标语言)的等价的程序。
高级语言 程序
编译程序 低级语言程序
术语:编译程序的源语言(源程序)、目标语 言(目标程序)、实现语言
-
5
分类:
– 软件 – 系统软件 – 语言处理系统
-
2
学习编译程序,需要先理解程序设计语 言。每个程序设计语言都有一定的规则 用于规定程序的语法结构,也有一定的 规则用于描述程序的语义。
上下文无关文法给出程序设计语言的精 确的语法说明。
尚无公认的形式系统用于描述程序的语 义。通常,用属性文法描述语义规则。
-
3
第1章 概述
1.1 什么是编译程序 1.2 程序设计语言的实现 1.3 处理源程序的软件工具 1.4 编译技术的发展
语义分析: :=
例如, program p(); var rate: real; var initial: real; var position: real; … position := initial + rate*60; /*warning*/
-
18
position := initial + rate*60;