编译原理及实现技术 计算机科学与技术学院 申春

Slides:



Advertisements
Similar presentations
数据结构的引入. 通讯录管理 社团机构管理 校园导航管理 通讯录管理 社团机构管理 校园导航管理.
Advertisements

邱锡鹏 复旦大学计算机科学技术学院 Text Books  “Dragon book”  Compilers: Principles, Techniques, and Tools (2nd Edition)  Alfred V. Aho;Monica S.
会计从业资格 初级会计电算化. 考试题型: 本章内容在考试中以单选题、多选题、判断题 形式出现; 重点理解计算机软件的概念,掌握计算机软件 的构成,了解常用软件的内容。 计算机软件.
编译原理和技术 大连理工软件学院 江 贺 课 程 简 介课 程 简 介课 程 简 介课 程 简 介 教材和参考书 陈意云、张昱,编译原理,高等教育出版社, 2003 Louden, K.C, 《编译原理及实践(英文版)》. 中信出版社 Alfred V.Aho,
第一章 引 论 名词解释 编译器从逻辑上可以分成若干个阶段 每个阶段把源程序从一种表示变换成另一种表示
计算概论 第五讲 程序设计语言和编程环境 北京大学 信息科学技术学院 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(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
全国计算机等级考试 二级基础知识 第二章 程序设计基础.
在PHP和MYSQL中实现完美的中文显示
计算机基础知识 丁家营镇九年制学校 徐中先.
程序的形式验证 - 简介 中国科学院软件研究所 张文辉 1.
《数据库原理及应用》课程介绍 信息工程学院 孙俊国
嵌入式系统课程简介 宋健建 南京大学软件学院 2004/02/10.
引论 赵建华 南京大学计算机系 2009年2月.
编译原理与技术 2018/11/30 《编译原理与技术》讲义.
管理信息结构SMI.
走进编程 程序的顺序结构(二).
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
数 控 技 术 华中科技大学机械科学与工程学院.
第五讲 四则运算计算器(一) 精品教程《C#程序设计与应用(第2版)清华大学出版社 谭恒松 主编
编译器设计与实现 梁红瑾
第二章 Java语言基础.
逆向工程-汇编语言
图4-2用C语言编写的源程序 #include <stdio.h> main() {int i; float sum;
整合思维导图的初中英语教学设计 主讲人:卢璐.
《编译原理与技术》 期末复习 计算机科学与技术学院 郑启龙 李 诚 25/12/2018.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
一个RDF数据自然语言生成器的设计与实现
1.3 C语言的语句和关键字 一、C语言的语句 与其它高级语言一样,C语言也是利用函数体中的可执行 语句,向计算机系统发出操作命令。按照语句功能或构成的不 同,可将C语言的语句分为五类。 goto, return.
C语言程序设计 主讲教师:陆幼利.
EBNF与操作语义 请用扩展的 BNF 描述 javascript语言里语句的结构;并用操作语义的方法描述对应的语义规则
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
微机系统的组成.
$9 泛型基础.
顺序表的删除.
第1章 c++概述 1.1 C++语言的简史及特点 1.2 简单的C++程序 1.3 C++语言的基本组成
VisComposer 2019/4/17.
实验四、TinyOS执行机制实验 一、实验目的 1、了解tinyos执行机制,实现程序异步处理的方法。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月13日.
实验七 安全FTP服务器实验 2019/4/28.
工业机器人知识要点解析 (ABB机器人) 主讲人:王老师
计算机网络与网页制作 Chapter 07:Dreamweaver CS5入门
项目二:HTML语言基础.
第4章 Excel电子表格制作软件 4.4 函数(一).
第九节 赋值运算符和赋值表达式.
iSIGHT 基本培训 使用 Excel的栅栏问题
<编程达人入门课程> 本节内容 计算机编程语言 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群: ,
C++语言程序设计 C++语言程序设计 第二章 基本数据类型与表达式 第十一组 C++语言程序设计.
College of Computer Science & Technology
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
计算机绘图 AutoCAD2016.
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第二节 C语言的特点.
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
编译原理 编译原理.
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
学习数据结构的意义 (C语言版) 《数据结构》在线开放课程 主讲人:李刚
<编程达人入门课程> 本节内容 有符号数与无符号数 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ:
编译原理实践 6.程序设计语言PL/0.
Presentation transcript:

编译原理及实现技术 计算机科学与技术学院 申春 课件网址:cc.jlu.edu.cn->课程资源->课程总览->计算机科学与技术学院->编译原理与实现

第一章 编译引论 编译程序及功能 编译程序的逻辑结构 编译程序的实现途径 课程学习的意义和学习方法

1.1 编译程序及功能 编译程序:(Compiler,compiling program)也称为编译器,是指把用高级程序设计语言书写的源程序,翻译成等价的机器语言格式目标程序的翻译程序。 翻译程序 计算机源程序A 计算机源程序B 编译程序 高级语言 源程序 机器语言目标程序

高级语言程序的处理过程 源程序文件(.c) 编辑器 预处理器 标准源程序文件(.i) 编译程序 目标汇编代码(.asm,.s) 汇编程序 可重定位的目标机器代码(.obj,.o) 连接/装配程序 绝对机器代码(.exe, .out)

1.2 程序设计语言的发展 机器语言:能够被计算机的硬件系统直接执行的机器指令序列,如“1011011000000000”。 1.2 程序设计语言的发展 机器语言:能够被计算机的硬件系统直接执行的机器指令序列,如“1011011000000000”。 汇编语言:将硬件指令用一些助记符表示,即符号化的机器语言,如“ADD AX ,15”。 高级语言:模仿便于理解的自然语言和数学语言,采用一组形式规则来描述的人工语言。

1.3 高级语言的几种执行方式 1.编译方式:源语言为高级语言,目标语言是低级语言(汇编或机器语言)的翻译程序。 源程序 目标程序 (*.C) (*.OBJ/*.EXE) 编译程序 程序的输入数据 运行结果

1.3 高级语言的几种执行方式 2.解释方式:对源程序直接逐句地分析执行。解释器相当于源程序的抽象执行机,是语言的实现系统。 (basic, 解释程序 源程序 运行结果 (basic, 脚本语言) 输入数据

1.3 高级语言的几种执行方式 3.语言的转换执行方式:将A语言程序转换为B语言程序,用B语言已有的编译器去编译执行。(同级程序设计语言) 转换程序 A语言程序 B语言程序 编译、解释 运行结果

1.4 编译程序的逻辑结构 表 处 理 错 误 处 理 目 标 代 码 生 成 中 间 优 化 语 义 分 析 法 词 程 序 源 1、 源语言的种类成千上万,从常用的诸如FORTEAN,PASCAL和C语言,到各种各样的计算机应用领域的专用语言。 2、目标语言也是成千上万的。 3、编译程序根据它们构造的不同、所执行的具体功能的差异又分成多种类型,比如:一趟编译的、多趟编译的、具有调试和优化功能的等等。 尽管存在这些明显的复杂因素,任何编译程序所必需执行的主要任务基本是一样的,通过理解这些任务,使用同样的基本技术,我们可以为各种各样的源语言和目标语言设计和构造编译程序。

词法分析(Lexical Analysis) 依据语言的词法规则,扫描源程序的字符序列,识别每 一个单词及其种类,并将其表示成所谓的机内表示TOKEN记号形式。 for(i=1;i<30;i++) 单词种类: 关键字: if、then、for、while等; 标识符; 常量; 运算符 特殊符 分界符: 标点符号、 左右括号等等. <保留字,for> <界限符,(> <标识符,i> <运算符,=> <常量,1> <界限符,;> <标识符,i> <运算符,< > <常量,30> <界限符,;> <标识符,i> <运算符,++> <界限符,)>

语法分析(Syntax Analysis) 依据语言的语法规则,将单词分解成各类语法短语(可表示为语法树),确定整个输入串是否构成一个语法上正确的程序。 赋值语句 sum:= first + count * 10 标识符 := 表达式 1.<赋值语句> ::= 标识符:=<表达式> 2.<表达式> ::= <表达式>+<表达式> 3.<表达式> ::= <表达式>*<表达式> 4.<表达式> ::= (<表达式>) 5.<表达式> ::= 标识符 6.<表达式> ::= 常数 sum 表达式 + 表达式 标识符 表达式 * 表达式 常数 first 标识符 10 count

语义分析(Semantic Analysis) 检查源程序有无语义错误,为代码生成阶段收集信息。(标识符是否声明、类型检查、强制类型转换、下标越界检查等) int i, a[20]=0; for(i=1; i<30; i++) a[10]=a[10]+i;

中间代码生成(Intermediate Code Generation) 为便于对程序的优化、移植和修改,将源程序转换成一种称为中间代码的内部表示形式。中间代码是一种简单的、含义明确的记号系统,例如四元式(运算符,对象1,对象2,结果)。 例: sum:=first + count * 10 生成如下四元式形式的中间代码序列: 1、(int-to-real, 10 , - ,t1 ) 2、(*, count , t1 ,t2 ) 3、(+, first , t2 ,t3 ) 4、(:=, t3 ,- , sum )

中间代码优化( Intermediate Code Optimization) 在不改变源程序语义的前提下变换或改造中间代码,使生成的目标代码更为高效,即缩短运行时间或节省存储空间。 1、(int-to-real, 10 , - ,t1 ) 2、(*, count , t1 ,t2 ) (*, count , 10.0 ,t2 )

中间代码变换为特定机器上的机器指令代码(绝对指令代码或可重定位的指令代码)或汇编指令代码。 目标代码生成(Code Generation) 中间代码变换为特定机器上的机器指令代码(绝对指令代码或可重定位的指令代码)或汇编指令代码。 例:sum:=first + count * 10 生成如下汇编代码: 1. MOV count , R1 2. MULT R1 , #10.0 3. MOV first , R2 4. ADD R1, R2 5. MOV R1, sum 四元式中间代码序列: 1、(*, count , 10.0 ,t2 ) 2、(+, first , t2 ,t3 ) 3、(:=, t3 ,- , sum )

表格管理(Symbol-Table Management) 较大的编译程序用到很多表格,为了合理地管理表格(构造、查找、更新),很多编译程序设立一些专门子程序(称为表格管理程序)负责管理表格。 错误处理(Error Detection and Reporting) 编译程序各个阶段还存在着错误处理模块,当有错误出现时,由相应的错误处理模块给出解决方案,使得编译器能够继续进行下去。词法和语法错误检查集中一次完成,而语义错误检查要分散在语法分析以后的各个阶段。

遍 (Pass)所谓“遍”就是对源程序或源程序的中间表示形式从头到尾扫描一次,并作加工处理,生成新的中间结果或目标程序。 代 码 生 成 中 间 优 化 语 义 分 析 法 词 程 序 源 前端 后端

1.5 编译程序实现方法 转换法:将A语言程序转换成B语言的程序,再利用B语言的编译器实现A语言。 1.5 编译程序实现方法 转换法:将A语言程序转换成B语言的程序,再利用B语言的编译器实现A语言。 自展法:实际上就是用低级语言先实现一个简单的编译器,然后用这个编译器的语言再去编写一个更高级的编译器,这个新编译器是旧编译器的扩展的过程。 移植法:修改目标代码或者修改编译程序的后端。 工具法:Lex、Yacc等工具生成语法分析程序。(软件自动化研究成果)

1.5 课程的意义 加深对高级语言的工作原理的理解; 提高设计大型软件的能力; 提高形式化、抽象化的理解和运用能力; 1.5 课程的意义 加深对高级语言的工作原理的理解; 提高设计大型软件的能力; 提高形式化、抽象化的理解和运用能力; 编译技术的应用。可以将该原理应用于软件逆向工程、程序分析/验证、模型转换及和软件安全等涉及元级操作的领域;受资源限制的嵌入式系统;可以灵活设计、实现自定义语言;

学习编译原理的方法 理论教学 64 学时 实践教学 16 学时(第9周-12周)

自定义SNL语言(Small Nested Language),实现该语言的编译程序