引论 赵建华 南京大学计算机系 2009年2月.

Slides:



Advertisements
Similar presentations
编译原理和技术 大连理工软件学院 江 贺 课 程 简 介课 程 简 介课 程 简 介课 程 简 介 教材和参考书 陈意云、张昱,编译原理,高等教育出版社, 2003 Louden, K.C, 《编译原理及实践(英文版)》. 中信出版社 Alfred V.Aho,
Advertisements

第一章 引 论 名词解释 编译器从逻辑上可以分成若干个阶段 每个阶段把源程序从一种表示变换成另一种表示
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
2017年3月5日 单片机原理与应用 背景知识调查.
Tool Command Language --11级ACM班 金天行.
编译原理实践及应用 ----清华大学出版社.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
面向对象程序设计 C#.Net 01 C#概述和简单编程 郑捷
Oracle数据库 Oracle 子程序.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
计算机基础知识 丁家营镇九年制学校 徐中先.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Hadoop I/O By ShiChaojie.
OpenMP简介和开发教程 广州创龙电子科技有限公司
第八章 菜单设计 §8.1 Visual FoxPro 系统菜单 §8.2 为自己的程序添加菜单 §8.3 创建快捷菜单.
编译原理与技术 2018/11/30 《编译原理与技术》讲义.
管理信息结构SMI.
走进编程 程序的顺序结构(二).
辅导课程六.
Visual Studio Team System 简介
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
Zhao4zhong1 (赵中) C语言指针与汇编语言地址.
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
What have we learned?.
编译器设计与实现 梁红瑾
逆向工程-汇编语言
CPU结构和功能.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
第七章 操作符重载 胡昊 南京大学计算机系软件所.
第4章 非线性规划 4.5 约束最优化方法 2019/4/6 山东大学 软件学院.
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
$9 泛型基础.
VisComposer 2019/4/17.
实验七 安全FTP服务器实验 2019/4/28.
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
<编程达人入门课程> 本节内容 内存的使用 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
项目二:HTML语言基础.
第4章 Excel电子表格制作软件 4.4 函数(一).
iSIGHT 基本培训 使用 Excel的栅栏问题
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
College of Computer Science & Technology
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
编译原理及实现技术 计算机科学与技术学院 申春
Visual Basic程序设计 第13章 访问数据库
临界区问题的硬件指令解决方案 (Synchronization Hardware)
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二节 C语言的特点.
Python 环境搭建 基于Anaconda和VSCode.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
基于列存储的RDF数据管理 朱敏
编译原理 第一章 引 论 南京大学计算机科学与技术系 戴新宇.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
编译原理 编译原理.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第十七讲 密码执行(1).
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
顺序结构程序设计 ——关于“字符串”和数值.
实验六、COM类型病毒分析实验 实验开发教师: 刘乃琦 谌黔燕.
Presentation transcript:

引论 赵建华 南京大学计算机系 2009年2月

课程内容 引论 编译器的总体结构 词法分析 语法分析 语法制导的翻译技术 中间代码生成 运行时刻环境 代码生成 机器无关优化

编译器的作用 读入以某种语言(源语言)编写的程序 输出等价的、用另一种语言(目标语言)编写的程序。 通常目标程序是可执行的。 解释器 直接利用用户提供的输入,执行源程序中指定的操作。 不生成目标程序,而是根据源程序的语义直接运行。 Java语言的处理结合了编译和解释。

编译器的结构(1) 编译器可以分为分析部分和综合部分 分析部分(前端,front end) 综合部分(后端,back end) 把源程序分解成组成要素,以及相应的语法结构 使用这个结构创建源程序的中间表示 同时收集和源程序相关的信息,存放到符号表 综合部分(后端,back end) 根据中间表示和符号表信息构造目标程序 前端部分是机器无关的,后端部分是机器相关的。

编译器的结构(2) 编译器可分成顺序执行的一组步骤(phase)

词法分析 词法分析/扫描(lexical analysis, scanning) 例子 读入源程序的字符流,输出成为有意义的词素(lexeme) <token-name, attribute-value> token-name由语法分析步骤使用 attribute-value指向相应的符号表条目,由语义分析/代码生成步骤使用 例子 position = initial + rate * 60 <id,1> <=, > <id, 2> <+, > <id,3> <*, > <number, 4>

语法分析 语法分析/解析(syntax analysis/parsing) 根据各个词法单元的第一个分量来创建树型的中间表示形式。通常是语法树(syntax tree) 中间表示形式指出了词法单元流的语法结构。

语义分析 语义分析(semantic analysis) 使用语法树和符号表中的信息,检查源程序是否满足语言定义的语义约束。 同时收集类型信息,用于代码生成,类型检查,类型转换。

中间代码生成 根据语义分析的输出,生成类机器语言的中间表示 三地址代码: 每个指令最多包含三个运算分量 t1 = inttofloat(60); t2 = id3 * t1; t3 = id2 + t2; 很容易生成机器语言指令

代码优化 通过对中间代码的分析,改进中间代码的质量 更快、更短、能耗更低

代码生成 把中间表示形式映射到目标语言 寄存器的分配 指令选择 内存分配

其它概念 符号表管理 趟(PASS) 编译器构造工具 记录源程序中使用的变量的名字,收集各种属性 每趟读入一个输入文件,产生一个输出文件。 “步骤”是逻辑组织方式 “趟”和具体的实现相关 编译器构造工具 语法分析器,扫描器,语法制导的翻译引擎,…

程序设计语言的发展历程 历程 强制式语言/声明式语言 冯.诺依曼语言/面向对象的语言/脚本语言 第一代:机器语言 第二代:汇编语言(宏命令) 第三代:Fortran,Cobol,Lisp,C,C++,… 第四代:特定应用语言:NOMAD, SQL, Postscript 第五代:基于逻辑和约束的语言,Prolog、OPS5 强制式语言/声明式语言 前者指明如何完成,后者指明要完成哪些计算 冯.诺依曼语言/面向对象的语言/脚本语言

程序设计语言和编译器之间的关系 程序设计语言的新发展向编译器设计者提出新要求 通过降低高级语言的执行开销,推动这些高级语言的使用 设计相应的算法和表示方法来翻译和支持新的语言特征 多态;动态绑定;类;类属(模板);… 通过降低高级语言的执行开销,推动这些高级语言的使用 编译器设计者还需要更好地利用新硬件的能力 RISC技术、多核技术、大规模并行技术

编译技术的应用(1) 高级程序设计语言的实现 针对计算机体系结构的优化 新体系结构的设计 高级程序设计语言的抽象层次的提高有利于编程,但是直接生成的代码却相对低效率 聚合类型/高级控制流/面向对象/垃圾自动收集机制 针对计算机体系结构的优化 并行性:指令级并行,处理器层次并行 内存层次结构 新体系结构的设计 RISC 专用体系结构 一个新的体系结构特征能否被充分利用,取决于编译技术

编译技术的应用(2) 程序翻译 二进制翻译/硬件合成/数据查询解释器/编译后模拟 软件生产率工具 类型检查 边界检查 内存管理工具

程序设计语言的基础概念(1) 静态/动态 作用域 静态:语言策略支持编译器静态决定某个问题 动态:只允许在程序运行时刻作出决定 Java类声明中的static指明了变量的存放位置可静态确定。 作用域 x的作用域指程序文本的一个区域,其中对x的使用都指向这个声明。 静态作用域:通过静态阅读程序即可决定作用域 动态作用域

程序设计语言的基础概念(2) 环境与状态 环境:是从名字到存储位置的映射 状态:从内存位置到它们的值的映射

程序设计语言的基础概念(3) 静态作用域和块结构 C族语言使用静态作用域。 作用域规则基于程序结构,声明的作用域由它在程序中的位置决定。 函数内部可以声明变量(局部变量/参数),这些声明的作用域在它出现的函数内 一个顶层声明的作用域包括其后的所有程序。 作用域规则基于程序结构,声明的作用域由它在程序中的位置决定。 也通过public、private、protected进行明确控制

程序设计语言的基础概念(4) 块作用域的例子

程序设计语言的基础概念(5) 参数传递机制 例子 值调用 (call by value):对实在参数求值/拷贝,再存放到被调用过程的形参的内存位置上。 引用调用(call by reference):实际传递的是实在参数的地址。 名调用:早期使用,现在已经废弃。 例子 F(x) { y = x+3; //根据不同的参数传递机制,生成不同的代码 }

程序设计语言的基础概念(6) 别名: 两个指针指向同一个位置的情况 导致看起来不同的形式参数实际上是对方的别名。