大连理工大学编译原理课件_第1页
大连理工大学编译原理课件_第2页
大连理工大学编译原理课件_第3页
大连理工大学编译原理课件_第4页
大连理工大学编译原理课件_第5页
已阅读5页,还剩129页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

编译原理和技术大连理工大学软件学院刘馨月编译原理和技术大连理工大学软件学院自我介绍刘馨月,女,博士,副教授主讲课程:数据结构与算法,编译技术研究方向:数据挖掘,信息检索数据结构与算法教学团队成员智能信息处理研究所成员()Email:

xinyue_dlut@163.com

自我介绍刘馨月,女,博士,副教授课程定位--核心课程分类课程名称课程定位备注计算机基础计算机导论入门

算法和数据结构基础

高级语言程序设计(1,2)必备工具

计算机理论(离散数学1,2,3)数理逻辑

计算机数学

集合论和图论

组合数学

计算机硬件类课程数子电路和数字逻辑硬件基础课程含实验计算机原理和汇编语言部件原理含实验计算机接口与通讯部件间通讯含实验计算机体系结构体系结构含实验计算机网络

计算机软件类课程编译技术

系统软件层含课程设计操作系统含课程设计数据库系统原理含课程设计软件工程

信息系统分析与设计应用类

计算机图形学(多媒体技术)应用类

操作系统课程定位--核心课程分类课程名称课程定位备注计算机导论入门

课程简介课程内容介绍编译器构造的一般原理和基本实现方法介绍的理论知识:形式语言和自动机理论、语法制导的定义和属性文法、类型论等课程特点强调形式化描述技术强调对编译原理和技术的宏观理解,不把注意力分散到枝节算法,不偏向于某种源语言或目标机器课程简介课程内容课程简介编译理论与方法计算机科学与技术中理论和实践相结合的最好典范

Intel公司的DavidKuck院士曾经将编译器誉为“计算机科学与技术的皇后”ACM图灵奖—“计算机界的诺贝尔奖”,授予在计算机技术领域作出突出贡献的科学家程序设计语言、编译理论与方法约占1/3课程简介编译理论与方法课程简介本专业人员4种基本的专业能力计算思维能力算法的设计与分析能力程序设计和实现能力计算机软硬件系统的认知、分析、设计与应用能力计算思维能力逻辑思维能力和抽象思维能力构造模型对问题进行形式化描述理解和处理形式模型课程简介本专业人员4种基本的专业能力课程简介课程要求目标:师生共同努力,帮助大家学有所得讲课进度较快,平时不复习并加深理解,后面将听不懂作业较多,要求独立完成上机实验,不要轻视阅读PL/0编译器,会有很大收获课程简介课程要求课程简介成绩评定学期总评=考试成绩(70%)+平时成绩(30%)平时成绩=考勤+书面作业+上机作业考勤:4次,缺勤一次扣2分,缺勤4次取消考试资格Compilers课程的相关教学资料下载

邮箱:163邮箱

用户名:ssdut_cs

密码:cs2015

课程简介成绩评定课程简介教材和参考书陈意云、张昱,编译原理,高等教育出版社,2008年第二版陈火旺、刘春林等编著

程序设计语言编译原理(第3版),国防工业出版社,2001年4月蒋立源等主编

编译原理(第2版),西北工业大学出版社,2002年1月。张素琴,吕映芝等编著编译原理,清华大学出版社,2005年

胡伦骏等《编译原理》电子工业出版社2005年课程简介教材和参考书编译原理、技术和工具Compilers:Principles,Techniques,andTools(美)阿霍,等/2003-8-1/机械工业出版社/55.00/平装/李建中

2009年第二版,89.00

“龙书”。龙书是AlfredV.Aho等人于1986年出版的,由于出版年代较早,其中包含部分过时的技术并且没有反映一些新的编译技术。新编的《编译原理》抛弃诸如算符优先分析等过时技术,增加面向对象编译、类型检查等新技术。课程简介编译原理、技术和工具Compilers:Principle课程简介现代编译原理-C语言描述/ModernCompilerImplementationinC(美)安佩尔/2006-4-1/人民邮电出版社/C语言描述/45.0/平装/沈志宇/黄春/赵克佳

“虎书”。虎书出版比较晚,与《编译原理》的知识点差不多,但增加了数据流分析、循环优化、内存管理等内容。与虎书比,《编译原理》更适合国内的编译原理课程教学。这本是C版,还有java版和ML版。课程简介现代编译原理-C语言描述/ModernComp课程简介高级编译器设计与实现/AdvancedCompilerDesignandImplementation(美)马其尼克/2005-7-1/机械工业出版社/75.0/平装/沈志宇/赵克佳

“鲸书”。鲸书侧重在对编译器后端优化的处理。在本科阶段的编译教学中旨在让学生对程序设计语言的编译全过程有系统的理解,因此会介绍编译器后端的处理技术,但不注重优化技术。课程简介高级编译器设计与实现/AdvancedComp课程简介与其他自然科学相比,计算机科学的发展历史并不久远,是较新的学科体系,尚有许多未知的领域有待探索。因此,本专业学生或工程技术人员仅仅满足于学习或应用几门程序设计语言是远远不够的。一些看似抽象的课程才是提高专业人员“内功”修为的秘技,例如数据结构、操作系统、编译原理、计算机系统结构、计算机网络等。不过,经典课程的学习并不是一蹴而就的,如何学习与理解课程的精髓是值得关注的。课程简介与其他自然科学相比,计算机科学的发展历史并不久课程简介学习的意义有人认为,编译技术似乎已经相当成熟了,继续深入研究是没有任何意义的。实际上,任何科学技术都是发展变化的。表面上看,编译器设计的高层问题似乎已经形成了完美的体系,但当我们深入其内核就会发现事实并非如此。现代编译器设计面临的挑战是来自目标计算机系统结构、新颖程序设计语言及本身的计算资源等多方面的。其中,任何一方面的因素都足以颠覆某些传统理论与算法。当然,从更高的层次上讲,学习编译器设计的目的还不仅仅局限于其本身的理论与技术。作为一个系统软件的设计学科,其解决问题的思路与方法更是值得读者细细品味的。这可能是一个漫长而艰辛的历程,不过,这才是经典学科的魅力所在。以品味经典为目的来学习与研究操作系统、数据库技术、计算机网络、编译技术等学科是诸君努力方向。课程简介学习的意义课程简介学习的意义它是计算机专业的核心课程。对编程语言的设计和实现有深刻的理解,有利于学习编程语言,知其然知其所以然。if(c==5)then…if(c=5)then…if(5==c)then…if(5=c)then…编译器不报错,但实际上错了编译器报错课程简介学习的意义if(c==5)then…课程简介学习的意义对软件工程来说,编译器是一个很好的实例(基本设计、模块划分等),也是本科期间能碰到的唯一的大型例子,从本课程的学习也能了解到软件工程中的一些技术(如基于事件驱动的编程)。本课程所介绍的概念和技术能应用到一般的软件设计之中。大多数程序员同时是语言的设计者,虽然是一些简单的语言(如输入输出),本课程的学习有助于提高对这些语言的设计水平。自学能力的考查,抽象思维能力的锻炼课程简介学习的意义课程简介学习的意义可以肯定地说,你们中的95%以上的人在一辈子的生涯中都没有机会去实现一个真正的复杂语言的编译器。但是每一个人都绝对遇到需要使用编译技术的项目。 以下就是一些小的“编译器”.课程简介学习的意义课程简介学习的意义普通计算器可编程计算器课程简介学习的意义普通计算器可编程计算器课程简介学习的意义自动聊天机器人课程简介学习的意义自动聊天机器人课程简介学习的意义各种数据库查询语言及专家系统select课程fromtable课程表where任课老师=刘馨月课程简介学习的意义各种数据库查询语言及专家系统sele课程简介学习的意义在计算机专业考研或者各大公司招聘时,必考内容。在x86/Linux工作站上,以下两个结构的size分别是20和16,为什么不一样?typedefstruct_a{ typedefstruct_b{ char c1; charc1; long i; char c2; char c2; longi; doublef; doublef;}a; }b;课程简介学习的意义在x86/Linux工作站上,以下两在C程序设计中我们经常需要用到一种数据类型的长度(占内存的字节数),例如:

int

*p

=

NULL;

p

=

(int*)malloc(10*sizeof(int));/*用sizeof(int)来得到int类型的长度*/

在C程序设计中我们经常需要用到一种数据类型的长度(占内存的字vc结果vsLinux下gcc的结果前者按8字节对齐,后者按4字节对齐vc结果vsLinux下gcc的结果前者按8字节vc6中的编译选项有/Zp[1|2|4|8|16],/Zp1表示以1字节边界对齐,相应的,/Zpn表示以n字节边界对齐。n字节边界对齐的意思是说,一个成员的地址必须安排在成员的尺寸的整数倍地址上或者是n的整数倍地址上,取它们中的最小值。要使用这个选项,可以在vc6中打开工程属性页,c/c++页,选择CodeGeneration分类,在Structmemberalignment可以选择。vc6中的编译选项有/Zp[1|2|4|8|16],/Z字节对齐是为了提高CPU的读取效率.比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据.显然在读取效率上下降很多.字节对齐是为了提高CPU的读取效率.比如有些平台每次读都是从类型字节数char1short2int4float4long4longlong8double8longdouble10类型字节数char1short2int4float4longIntel和微软公司同时出现的面试题,练习一下:

#pragmapack(8)/*指定按8字节对齐*/

structs1{

shorta;

longb;

};

structs2{

charc;

s1d;

longlonge;

};

#pragmapack()/*取消指定对齐,恢复缺省对齐*/

问题:1.sizeof(s2)=?

2.s2的c后面空了几个字节接着是d?Intel和微软公司同时出现的面试题,练习一下:

#prag答案:sizeof(S2)结果为24。s2的c后面空了3个字节接着是d。

分析:

S1中,成员a是2字节默认按2字节对齐,指定对齐参数为8,这两个值中取2,a按2字节对齐;同理,成员b是4个字节,按4字节对齐,所以sizeof(S1)应该为8;

a

b

S1的内存布局:11**,1111

S2中,c按1字节对齐,而d是个结构,它是8个字节,它按什么对齐呢?对于结构来说,它的默认对齐方式就是它的所有成员使用的有效对齐值中最大的一个,S1的就是4.所以,成员d就是按4字节对齐.成员e是8个字节,它是默认按8字节对齐,和指定的一样,所以它对到8字节的边界上,这时,已经使用了12个字节了,所以添加了4个字节的空,从第16个字节开始放置成员e。这样一共使用了24个字节。

c

S1.a

S1.b

d

S2的内存布局:1***,11**,1111,****11111111答案:sizeof(S2)结果为24。s2的c后面空了3个字程序设计语言的发展机器语言(机器指令)汇编语言面向用户的语言面向问题的语言低级语言高级语言C70600000002

MOVx,2x=2程序设计语言的发展机器语言汇编语言面向用户面向问题低级语言高低级语言(LowlevelLanguage)字位码、机器语言、汇编语言特点:与特定的机器有关,功效高,但使用复杂、繁 琐、费时、易出错高级语言

--Fortran、Pascal、C语言等特点:不依赖具体机器,移植性好、对用户要求低、易使用、易维护等。

用高级语言编制的程序,计算机不能立即执行,必须通过一个“翻译程序”加工,转化为与其等价的机器语言程序,机器才能执行。这种翻译程序,称之为“编译程序”。低级语言(LowlevelLanguage)源程序

用汇编语言或高级语言编写的程序称为源程序。目标程序用目标语言所表示的程序。

目标语言:可以是介于源语言和机器语言之间的“中间语言”,可以是某种机器的机器语言,也可以是某机器的汇编语言。翻译程序

将源程序转换为目标程序的程序称为翻译程序。它是指各种语言的翻译器,包括汇编程序和编译程序,是汇编程序、编译程序以及各种变换程序的总称。基本概念源程序目标程序翻译程序基本概念课程简介编译技术研究对象:编译器的构造与分析编辑器源程序编译器操作系统可执行程序.exe解释器中间代码可执行程序.exeC,C++,Pascal,Delphi,VC,BCJava,VB,BasicEdit,Word,Notepad,Vigcc,vc,bc31虚拟机集成开发环境课程简介编译技术研究对象:编译器的构造与分析编辑器源程BASIC年代的解释器功能:它将高级语言的源程序翻译成一种中间语言程序,然后对中间语言程序进行解释执行在那个年代,编译和解释两个功能是合在一个程序中,该程序被称为解释器Java年代的解释器解释器的上述两个功能分在两个程序中前一个叫做编译器,它把源程序翻译成一种叫做字节码的中间语言程序后一个叫做解释器,它对字节码程序进行解释执行BASIC年代的解释器编译器和解释器的区别编译器和解释器的区别编译器和解释器的区别编译器和解释器的区别编译器与解释器的区别编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.编译器与解释器的区别编译器是把源程序的每一条语句都编译成机器第一章引论

翻译器:把一种语言变换到另外一种语言的软件。这两种语言分别称为源语言和目标语言。编译器:一种翻译器,它的目标语言比源语言低级。第一章引论翻译器:把一种语言变换到另外一种第一章引论

词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器编译器编译器从逻辑上可以分成若干阶段,每个阶段把源程序从一种表示变换成另一种表示翻译家词法分析语法分析语义分析汉语文本英语文本生成英语文本改进日语文本生成日语文本出错纪录词典第一章引论词法分析器语法分析器语义分析器源编译器从逻辑上可以分成若干阶段每个阶段把源程序从一种表示变换成另一种表示本章通过描述编译器的各个阶段来介绍编译这个课题编译器从逻辑上可以分成若干阶段第一章引论

符号表

positioninitialrate.........123词典你们大工学子.........123词法分析名词1

动词形容词名词2你们是优秀的大工学子。词法分析:源程序-〉词法记号(token)流词法分析器id,1

=

id,2

+

id,3

60position=initial+rate

60第一章引论符号表positioninit第一章引论

任何一个标识符都是表达式;任何一个数都是表达式;如果e1和e2都是表达式,那么

e1+e2e1

*

e2(e1)也都是表达式表达式表达式表达式标识符表达式表达式(initial)标识符(rate)数(60)*+语法分析:词法记号(token)流-〉语法短语任何名词都可以作宾语;如果e1和e2都是宾语,那么

e1和e2e1

与e2也都可以作宾语如果e1是定语,e2是宾语,那么e1e2也可以作宾语。宾语定语宾语形容词(优秀的)名词(大工学子)第一章引论任何一个标识符都是表达式;表达式第一章引论

语法分析器id,1

=

id,2

+

id,3

60:=+*60id1id2id3语法分析:词法记号(token)流-〉语法短语名词1动词形容词名词2语法分析(优秀的)名词(大工学子)宾语定语宾语形容词语句谓语动词(是)主语名词(你们)符号表

positioninitialrate.........123词典你们大工学子.........123第一章引论语法分析器id,1=第一章引论

语义分析器:=+*60id1id2id3:=+*60id1id2id3inttoreal语义分析:检查程序的语义正确性,如类型检查等你们是优秀的大工学子。你们是一个优秀的大工学子。第一章引论语义分析器:=+*60id1id第一章引论

词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器

前三个阶段完成对源程序的分析第一章引论词法分析器语法分析器语义分析器源第一章引论

中间代码生成器temp1:=inttoreal(60)temp2:=id3*temp1temp3:=id2+temp2id1:=temp3:=+*60id1id2id3inttoreal(优秀的)名词(大工学子)宾语定语宾语形容词语句谓语动词(是)主语名词(你们)英语文本生成YouaregoodDLUTers.第一章引论中间代码生成器temp1:=第一章引论

代码优化器temp1:=inttoreal(60)temp2:=id3*temp1temp3:=id2+temp2id1:=temp3temp1:=id3*60.0id1:=id2+temp1YouaregoodDLUTers.英语文本改进Youareexcellent

DLUTers第一章引论代码优化器temp1:=in第一章引论

temp1:=id3*60.0id1:=id2+temp1代码生成器MOVFid3,R2MULF#60.0,R2MOVFid2,R1ADDFR2,R1MOVFR1,id1日语文本生成Youareexcellent

DLUTers君たちは大連理工大学の優秀な学生なんです。第一章引论temp1:=id3*6第一章引论

词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器

后三个阶段对源程序进行综合第一章引论词法分析器语法分析器语义分析器源第一章引论

词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器

第一章引论词法分析器语法分析器语义分析器源在上列6个阶段中都要做两件事:(1)建表和查表;(2)出错处理;所以编译程序中都要包括符号表管理和出错处理两部分。

出错处理规模较大的源程序难免有多种错误,编译程序必须要有出错处理的功能。即能诊察出错误,并能报告用户错误的性质和位置,以便用户修改源程序。出错处理能力的大小是衡量编译程序质量好坏的一个重要指标。

符号表管理在整个编译过程中始终都要贯穿着建表(填表)和查表的工作。即要及时地把源程序中的信息和编译过程中所产生的信息登记在表格中,而在随后的编译过程中同时又要不断地查找这些表格中的信息。在上列6个阶段中都要做两件事:出错分析和综合:把编译过程分成分析和综合两步分析:分析源程序以计算其特性所涉及到的操作(词法分析、语法分析、语义分析)综合:生成目标代码时所涉及到的操作(中间代码生成、代码优化、代码生成)辅助:符号表管理、出错处理8项功能对应8个模块。第一章引论分析和综合:第一章引论第一章引论

词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器

前端后端前端:依赖于源语言,独立于目标机器。后端:依赖于目标机器,独立于源语言。第一章引论词法分析器语法分析器语义分析器源前端和后端:把编译过程分成前端和后端两部分前端:只依赖于源程序,独立于目标机器 (生成中间代码)后端:依赖于目标机器,与源程序无关,只与中间语言有关(从中间代码生成目标代码)好处:提高开发编译器的效率取一个编译器的前端,重写它的后端以产生同一源语言在另一机器上的编译器不同的前端使用同一个后端,从而得到一个机器上的几个编译器(采用同一中间语言)第一章引论前端和后端:第一章引论第一章引论

源程序目标机器1目标机器2目标机器3目标机器n编译器不区分前端和后端的编译器源程序目标机器1目标机器2目标机器3目标机器n编译器前端编译器后端区分前端和后端的编译器第一章引论源程序目标机器1目标机器2目标机第一章引论

词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器遍编译的几个阶段常用一遍(pass)扫描实现,一遍扫描包括读一个输入文件和写一个输出文件。第一章引论词法分析器语法分析器语义分析器源第一章引论

遍类比:刷墙艺术中的“遍”的概念网线水泥瓷砖任务:在一面墙上布置网线,并粉刷水泥,然后贴上瓷砖第一章引论遍类比:刷墙艺术中的“遍”的概念第一章引论

遍类比:刷墙艺术中的“遍”的概念方法一:第一遍:布上全部网线网线水泥瓷砖第一章引论遍类比:刷墙艺术中的“遍”的概念第一章引论

遍类比:刷墙艺术中的“遍”的概念方法一:第二遍:粉刷全部墙面的水泥网线水泥瓷砖第一章引论遍类比:刷墙艺术中的“遍”的概念第一章引论

遍类比:刷墙艺术中的“遍”的概念方法一:第三遍:给整个墙面贴上瓷砖网线水泥瓷砖第一章引论遍类比:刷墙艺术中的“遍”的概念第一章引论

遍类比:刷墙艺术中的“遍”的概念方法二:一遍:一边布网线,一边粉刷水泥,一边贴瓷砖网线水泥瓷砖第一章引论遍类比:刷墙艺术中的“遍”的概念遍(趟):一遍或一趟:是指编译程序在编译时刻把源程序或源程序的等价物(中间程序)从头到尾扫描一遍并转换成另一紧邻的等价物的全过程。单遍扫描与多遍扫描:每一遍的扫描可完成上述一个阶段或多个阶段的工作。每一遍的输入都是上一遍的输出,第一遍的输入是源程序正文,最后一遍的输出是目标代码。单遍与多遍的比较:遍数多:编译器结构清晰,但时间效率不高遍数少:编译速度快,但对机器的内存要求高遍数的确定:主要因素是源程序和机器(目标机)的特征。第一章引论遍(趟):第一章引论1.2编译器技术的应用高级语言的实现高级编程语言易于编程,但程序运行较慢低级语言编程时可实施更有效的控制方式,得到更有效的代码,但难编写、易出错、难维护流行编程语言的大多数演变都是朝着提高抽象级别的方向每一轮编程语言新特征的出现都刺激编译器优化的新研究1.2编译器技术的应用高级语言的实现1.2编译器技术的应用

程序翻译二进制翻译

编译器技术可用于把一种机器的二进制代码翻译成另一种机器的代码,以运行原先为别的指令集编译的代码数据库查询解释器

数据库查询由一些谓词组成,这些谓词由包含关系运算的布尔表达式组成,可以被解释执行,也可以被编译成搜索数据库的命令1.2编译器技术的应用程序翻译1.2编译器技术的应用

提高软件开发效率的工具 源于编译器中代码优化技术的程序分析一直在类型检查

类型检查是一种捕捉程序中前后不一致的成熟而有效的技术改进软件开发效率边界检查

数据流分析技术可用来定位缓冲区溢出内存管理

自动的内存管理删除内存泄漏等内存管理错误1.2编译器技术的应用提高软件开发效率的工具编译技术的应用语法制导的结构化编辑器程序格式化工具软件测试工具程序理解工具高级语言的翻译工具等等。编译技术的应用语法制导的结构化编辑器程序格式化工具软件小结编译原理的内容及学习意义翻译器、编译器的定义编译器的阶段划分及前端、后端的概念“遍”的概念小结编译原理的内容及学习意义作业习题1:1.1,1.2(编译器与解释器的区别是什么)每周第一次课交作业!作业习题1:1.1,1.2(编译器与解释器的区别是什么)编译原理和技术大连理工大学软件学院刘馨月编译原理和技术大连理工大学软件学院自我介绍刘馨月,女,博士,副教授主讲课程:数据结构与算法,编译技术研究方向:数据挖掘,信息检索数据结构与算法教学团队成员智能信息处理研究所成员()Email:

xinyue_dlut@163.com

自我介绍刘馨月,女,博士,副教授课程定位--核心课程分类课程名称课程定位备注计算机基础计算机导论入门

算法和数据结构基础

高级语言程序设计(1,2)必备工具

计算机理论(离散数学1,2,3)数理逻辑

计算机数学

集合论和图论

组合数学

计算机硬件类课程数子电路和数字逻辑硬件基础课程含实验计算机原理和汇编语言部件原理含实验计算机接口与通讯部件间通讯含实验计算机体系结构体系结构含实验计算机网络

计算机软件类课程编译技术

系统软件层含课程设计操作系统含课程设计数据库系统原理含课程设计软件工程

信息系统分析与设计应用类

计算机图形学(多媒体技术)应用类

操作系统课程定位--核心课程分类课程名称课程定位备注计算机导论入门

课程简介课程内容介绍编译器构造的一般原理和基本实现方法介绍的理论知识:形式语言和自动机理论、语法制导的定义和属性文法、类型论等课程特点强调形式化描述技术强调对编译原理和技术的宏观理解,不把注意力分散到枝节算法,不偏向于某种源语言或目标机器课程简介课程内容课程简介编译理论与方法计算机科学与技术中理论和实践相结合的最好典范

Intel公司的DavidKuck院士曾经将编译器誉为“计算机科学与技术的皇后”ACM图灵奖—“计算机界的诺贝尔奖”,授予在计算机技术领域作出突出贡献的科学家程序设计语言、编译理论与方法约占1/3课程简介编译理论与方法课程简介本专业人员4种基本的专业能力计算思维能力算法的设计与分析能力程序设计和实现能力计算机软硬件系统的认知、分析、设计与应用能力计算思维能力逻辑思维能力和抽象思维能力构造模型对问题进行形式化描述理解和处理形式模型课程简介本专业人员4种基本的专业能力课程简介课程要求目标:师生共同努力,帮助大家学有所得讲课进度较快,平时不复习并加深理解,后面将听不懂作业较多,要求独立完成上机实验,不要轻视阅读PL/0编译器,会有很大收获课程简介课程要求课程简介成绩评定学期总评=考试成绩(70%)+平时成绩(30%)平时成绩=考勤+书面作业+上机作业考勤:4次,缺勤一次扣2分,缺勤4次取消考试资格Compilers课程的相关教学资料下载

邮箱:163邮箱

用户名:ssdut_cs

密码:cs2015

课程简介成绩评定课程简介教材和参考书陈意云、张昱,编译原理,高等教育出版社,2008年第二版陈火旺、刘春林等编著

程序设计语言编译原理(第3版),国防工业出版社,2001年4月蒋立源等主编

编译原理(第2版),西北工业大学出版社,2002年1月。张素琴,吕映芝等编著编译原理,清华大学出版社,2005年

胡伦骏等《编译原理》电子工业出版社2005年课程简介教材和参考书编译原理、技术和工具Compilers:Principles,Techniques,andTools(美)阿霍,等/2003-8-1/机械工业出版社/55.00/平装/李建中

2009年第二版,89.00

“龙书”。龙书是AlfredV.Aho等人于1986年出版的,由于出版年代较早,其中包含部分过时的技术并且没有反映一些新的编译技术。新编的《编译原理》抛弃诸如算符优先分析等过时技术,增加面向对象编译、类型检查等新技术。课程简介编译原理、技术和工具Compilers:Principle课程简介现代编译原理-C语言描述/ModernCompilerImplementationinC(美)安佩尔/2006-4-1/人民邮电出版社/C语言描述/45.0/平装/沈志宇/黄春/赵克佳

“虎书”。虎书出版比较晚,与《编译原理》的知识点差不多,但增加了数据流分析、循环优化、内存管理等内容。与虎书比,《编译原理》更适合国内的编译原理课程教学。这本是C版,还有java版和ML版。课程简介现代编译原理-C语言描述/ModernComp课程简介高级编译器设计与实现/AdvancedCompilerDesignandImplementation(美)马其尼克/2005-7-1/机械工业出版社/75.0/平装/沈志宇/赵克佳

“鲸书”。鲸书侧重在对编译器后端优化的处理。在本科阶段的编译教学中旨在让学生对程序设计语言的编译全过程有系统的理解,因此会介绍编译器后端的处理技术,但不注重优化技术。课程简介高级编译器设计与实现/AdvancedComp课程简介与其他自然科学相比,计算机科学的发展历史并不久远,是较新的学科体系,尚有许多未知的领域有待探索。因此,本专业学生或工程技术人员仅仅满足于学习或应用几门程序设计语言是远远不够的。一些看似抽象的课程才是提高专业人员“内功”修为的秘技,例如数据结构、操作系统、编译原理、计算机系统结构、计算机网络等。不过,经典课程的学习并不是一蹴而就的,如何学习与理解课程的精髓是值得关注的。课程简介与其他自然科学相比,计算机科学的发展历史并不久课程简介学习的意义有人认为,编译技术似乎已经相当成熟了,继续深入研究是没有任何意义的。实际上,任何科学技术都是发展变化的。表面上看,编译器设计的高层问题似乎已经形成了完美的体系,但当我们深入其内核就会发现事实并非如此。现代编译器设计面临的挑战是来自目标计算机系统结构、新颖程序设计语言及本身的计算资源等多方面的。其中,任何一方面的因素都足以颠覆某些传统理论与算法。当然,从更高的层次上讲,学习编译器设计的目的还不仅仅局限于其本身的理论与技术。作为一个系统软件的设计学科,其解决问题的思路与方法更是值得读者细细品味的。这可能是一个漫长而艰辛的历程,不过,这才是经典学科的魅力所在。以品味经典为目的来学习与研究操作系统、数据库技术、计算机网络、编译技术等学科是诸君努力方向。课程简介学习的意义课程简介学习的意义它是计算机专业的核心课程。对编程语言的设计和实现有深刻的理解,有利于学习编程语言,知其然知其所以然。if(c==5)then…if(c=5)then…if(5==c)then…if(5=c)then…编译器不报错,但实际上错了编译器报错课程简介学习的意义if(c==5)then…课程简介学习的意义对软件工程来说,编译器是一个很好的实例(基本设计、模块划分等),也是本科期间能碰到的唯一的大型例子,从本课程的学习也能了解到软件工程中的一些技术(如基于事件驱动的编程)。本课程所介绍的概念和技术能应用到一般的软件设计之中。大多数程序员同时是语言的设计者,虽然是一些简单的语言(如输入输出),本课程的学习有助于提高对这些语言的设计水平。自学能力的考查,抽象思维能力的锻炼课程简介学习的意义课程简介学习的意义可以肯定地说,你们中的95%以上的人在一辈子的生涯中都没有机会去实现一个真正的复杂语言的编译器。但是每一个人都绝对遇到需要使用编译技术的项目。 以下就是一些小的“编译器”.课程简介学习的意义课程简介学习的意义普通计算器可编程计算器课程简介学习的意义普通计算器可编程计算器课程简介学习的意义自动聊天机器人课程简介学习的意义自动聊天机器人课程简介学习的意义各种数据库查询语言及专家系统select课程fromtable课程表where任课老师=刘馨月课程简介学习的意义各种数据库查询语言及专家系统sele课程简介学习的意义在计算机专业考研或者各大公司招聘时,必考内容。在x86/Linux工作站上,以下两个结构的size分别是20和16,为什么不一样?typedefstruct_a{ typedefstruct_b{ char c1; charc1; long i; char c2; char c2; longi; doublef; doublef;}a; }b;课程简介学习的意义在x86/Linux工作站上,以下两在C程序设计中我们经常需要用到一种数据类型的长度(占内存的字节数),例如:

int

*p

=

NULL;

p

=

(int*)malloc(10*sizeof(int));/*用sizeof(int)来得到int类型的长度*/

在C程序设计中我们经常需要用到一种数据类型的长度(占内存的字vc结果vsLinux下gcc的结果前者按8字节对齐,后者按4字节对齐vc结果vsLinux下gcc的结果前者按8字节vc6中的编译选项有/Zp[1|2|4|8|16],/Zp1表示以1字节边界对齐,相应的,/Zpn表示以n字节边界对齐。n字节边界对齐的意思是说,一个成员的地址必须安排在成员的尺寸的整数倍地址上或者是n的整数倍地址上,取它们中的最小值。要使用这个选项,可以在vc6中打开工程属性页,c/c++页,选择CodeGeneration分类,在Structmemberalignment可以选择。vc6中的编译选项有/Zp[1|2|4|8|16],/Z字节对齐是为了提高CPU的读取效率.比如有些平台每次读都是从偶地址开始,如果一个int型(假设为32位系统)如果存放在偶地址开始的地方,那么一个读周期就可以读出这32bit,而如果存放在奇地址开始的地方,就需要2个读周期,并对两次读出的结果的高低字节进行拼凑才能得到该32bit数据.显然在读取效率上下降很多.字节对齐是为了提高CPU的读取效率.比如有些平台每次读都是从类型字节数char1short2int4float4long4longlong8double8longdouble10类型字节数char1short2int4float4longIntel和微软公司同时出现的面试题,练习一下:

#pragmapack(8)/*指定按8字节对齐*/

structs1{

shorta;

longb;

};

structs2{

charc;

s1d;

longlonge;

};

#pragmapack()/*取消指定对齐,恢复缺省对齐*/

问题:1.sizeof(s2)=?

2.s2的c后面空了几个字节接着是d?Intel和微软公司同时出现的面试题,练习一下:

#prag答案:sizeof(S2)结果为24。s2的c后面空了3个字节接着是d。

分析:

S1中,成员a是2字节默认按2字节对齐,指定对齐参数为8,这两个值中取2,a按2字节对齐;同理,成员b是4个字节,按4字节对齐,所以sizeof(S1)应该为8;

a

b

S1的内存布局:11**,1111

S2中,c按1字节对齐,而d是个结构,它是8个字节,它按什么对齐呢?对于结构来说,它的默认对齐方式就是它的所有成员使用的有效对齐值中最大的一个,S1的就是4.所以,成员d就是按4字节对齐.成员e是8个字节,它是默认按8字节对齐,和指定的一样,所以它对到8字节的边界上,这时,已经使用了12个字节了,所以添加了4个字节的空,从第16个字节开始放置成员e。这样一共使用了24个字节。

c

S1.a

S1.b

d

S2的内存布局:1***,11**,1111,****11111111答案:sizeof(S2)结果为24。s2的c后面空了3个字程序设计语言的发展机器语言(机器指令)汇编语言面向用户的语言面向问题的语言低级语言高级语言C70600000002

MOVx,2x=2程序设计语言的发展机器语言汇编语言面向用户面向问题低级语言高低级语言(LowlevelLanguage)字位码、机器语言、汇编语言特点:与特定的机器有关,功效高,但使用复杂、繁 琐、费时、易出错高级语言

--Fortran、Pascal、C语言等特点:不依赖具体机器,移植性好、对用户要求低、易使用、易维护等。

用高级语言编制的程序,计算机不能立即执行,必须通过一个“翻译程序”加工,转化为与其等价的机器语言程序,机器才能执行。这种翻译程序,称之为“编译程序”。低级语言(LowlevelLanguage)源程序

用汇编语言或高级语言编写的程序称为源程序。目标程序用目标语言所表示的程序。

目标语言:可以是介于源语言和机器语言之间的“中间语言”,可以是某种机器的机器语言,也可以是某机器的汇编语言。翻译程序

将源程序转换为目标程序的程序称为翻译程序。它是指各种语言的翻译器,包括汇编程序和编译程序,是汇编程序、编译程序以及各种变换程序的总称。基本概念源程序目标程序翻译程序基本概念课程简介编译技术研究对象:编译器的构造与分析编辑器源程序编译器操作系统可执行程序.exe解释器中间代码可执行程序.exeC,C++,Pascal,Delphi,VC,BCJava,VB,BasicEdit,Word,Notepad,Vigcc,vc,bc31虚拟机集成开发环境课程简介编译技术研究对象:编译器的构造与分析编辑器源程BASIC年代的解释器功能:它将高级语言的源程序翻译成一种中间语言程序,然后对中间语言程序进行解释执行在那个年代,编译和解释两个功能是合在一个程序中,该程序被称为解释器Java年代的解释器解释器的上述两个功能分在两个程序中前一个叫做编译器,它把源程序翻译成一种叫做字节码的中间语言程序后一个叫做解释器,它对字节码程序进行解释执行BASIC年代的解释器编译器和解释器的区别编译器和解释器的区别编译器和解释器的区别编译器和解释器的区别编译器与解释器的区别编译器是把源程序的每一条语句都编译成机器语言,并保存成二进制文件,这样运行时计算机可以直接以机器语言来运行此程序,速度很快;而解释器则是只在执行程序时,才一条一条的解释成机器语言给计算机来执行,所以运行速度是不如编译后的程序运行的快的.编译器与解释器的区别编译器是把源程序的每一条语句都编译成机器第一章引论

翻译器:把一种语言变换到另外一种语言的软件。这两种语言分别称为源语言和目标语言。编译器:一种翻译器,它的目标语言比源语言低级。第一章引论翻译器:把一种语言变换到另外一种第一章引论

词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器编译器编译器从逻辑上可以分成若干阶段,每个阶段把源程序从一种表示变换成另一种表示翻译家词法分析语法分析语义分析汉语文本英语文本生成英语文本改进日语文本生成日语文本出错纪录词典第一章引论词法分析器语法分析器语义分析器源编译器从逻辑上可以分成若干阶段每个阶段把源程序从一种表示变换成另一种表示本章通过描述编译器的各个阶段来介绍编译这个课题编译器从逻辑上可以分成若干阶段第一章引论

符号表

positioninitialrate.........123词典你们大工学子.........123词法分析名词1

动词形容词名词2你们是优秀的大工学子。词法分析:源程序-〉词法记号(token)流词法分析器id,1

=

id,2

+

id,3

60position=initial+rate

60第一章引论符号表positioninit第一章引论

任何一个标识符都是表达式;任何一个数都是表达式;如果e1和e2都是表达式,那么

e1+e2e1

*

e2(e1)也都是表达式表达式表达式表达式标识符表达式表达式(initial)标识符(rate)数(60)*+语法分析:词法记号(token)流-〉语法短语任何名词都可以作宾语;如果e1和e2都是宾语,那么

e1和e2e1

与e2也都可以作宾语如果e1是定语,e2是宾语,那么e1e2也可以作宾语。宾语定语宾语形容词(优秀的)名词(大工学子)第一章引论任何一个标识符都是表达式;表达式第一章引论

语法分析器id,1

=

id,2

+

id,3

60:=+*60id1id2id3语法分析:词法记号(token)流-〉语法短语名词1动词形容词名词2语法分析(优秀的)名词(大工学子)宾语定语宾语形容词语句谓语动词(是)主语名词(你们)符号表

positioninitialrate.........123词典你们大工学子.........123第一章引论语法分析器id,1=第一章引论

语义分析器:=+*60id1id2id3:=+*60id1id2id3inttoreal语义分析:检查程序的语义正确性,如类型检查等你们是优秀的大工学子。你们是一个优秀的大工学子。第一章引论语义分析器:=+*60id1id第一章引论

词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器

前三个阶段完成对源程序的分析第一章引论词法分析器语法分析器语义分析器源第一章引论

中间代码生成器temp1:=inttoreal(60)temp2:=id3*temp1temp3:=id2+temp2id1:=temp3:=+*60id1id2id3inttoreal(优秀的)名词(大工学子)宾语定语宾语形容词语句谓语动词(是)主语名词(你们)英语文本生成YouaregoodDLUTers.第一章引论中间代码生成器temp1:=第一章引论

代码优化器temp1:=inttoreal(60)temp2:=id3*temp1temp3:=id2+temp2id1:=temp3temp1:=id3*60.0id1:=id2+temp1YouaregoodDLUTers.英语文本改进Youareexcellent

DLUTers第一章引论代码优化器temp1:=in第一章引论

temp1:=id3*60.0id1:=id2+temp1代码生成器MOVFid3,R2MULF#60.0,R2MOVFid2,R1ADDFR2,R1MOVFR1,id1日语文本生成Youareexcellent

DLUTers君たちは大連理工大学の優秀な学生なんです。第一章引论temp1:=id3*6第一章引论

词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器

后三个阶段对源程序进行综合第一章引论词法分析器语法分析器语义分析器源第一章引论

词法分析器语法分析器语义分析器源程序中间代码生成器代码优化器代码生成器目标程序出错管理器符号表管理器

第一章引论词法分析器语法分析器语义分析器源在上列6个阶段中都要做两件事:(1)建表和查表;(2)出错处理;所以编译程序中都要包括符号表管理和出错处理两部分。

出错处理规模较大的源程序难免有多种错误,编译程序必须要有出错处理的功能。即能诊察出错误,并能报告用户错误的性质和位置,以便用户修改源程序。出错处理能力的大小是衡量编译程序质量好坏的一个重要指标。

符号表管理在整个编译过程中始终都要贯穿着建表(填表)和查表的工作。即要及时地把源程

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论