C语言编译器的设计.doc
《C语言编译器的设计.doc》由会员分享,可在线阅读,更多相关《C语言编译器的设计.doc(33页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Four short words sum up what has lifted most successful individuals above the crowd: a little bit more.-author-dateC语言编译器的设计枣 庄 学 院课程设计任务书 题目: C语言编译器的设计 学 号 姓 名 专 业 计算机科学与技术 课 程 编译原理 指导教师 职称 完成时间:20 10 年 12 月-2010 年 12 月课程设计任务书及成绩评定课程设计的任务和具体要求 1、了解编译器的基本结构,分析编译器的设计原理。2、加深对词法分析器的工作过程的理解;加强对词法分析方法的掌握
2、;能够采用一种编程语言实现简单的词法分析程序;能够使用自己编写的分析程序对简单的程序段进行词法分析。3、加深对语法分析器工作过程的理解;加强对递归下降法实现语法分析程序的掌握;能够采用一种编程语言实现简单的语法分析程序;能够使用自己编写的分析程序对简单的程序段进行语法翻译。4、加深对中间代码生成的工作过程的理解。5、加深对代码优化的工作过程的理解。6、加深对目标代码生成的工作过程的理解指导教师签字: 日期: 指导教师评语成绩: 指导教师签字: 日期: 课程设计所需软件、硬件等Windows xp vc6.0课程设计进度计划起至日期2010年12月1日-2010年12月20日2010年12月20
3、日-2010年12月26日工作内容收集资料程序分析备注 参考文献、资料索引序号文献、资料名称编著者出版单位1 汤子瀛,哲风屏,汤小丹.计算机操作系统陕西:西安电子科大出版社,19962 陈莉君. Linux操作系统内核分析人民邮电出版社,19993 庞丽萍操作系统原理华中理工大学出版社,19944 美莫里斯贝奇著 UNIX操作系统设计 陈葆钰等译 北京大学出版社,19895 吕映芝,张素琴,蒋维杜.编译原理.清华大学出版社,19976 冯博琴,傅向华等译 现代编译程序设计 人民邮电出版社,20027 李建中,姜守旭等译 编译原理 机械工业出版社,2002- 摘要编译程序是现代计算机系统的基本组
4、成部分之一,而且多数计算机系统都含有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级机器语言,则这种翻译程序称作编译程序。一个编译程序的重要性体现在它使得多数计算机用户不必考虑与机器有关的繁索细节,使程序员和程序设计专家独立于机器,这对于当今机器的数量和种类持续不断地增长的年代
5、尤为重要。编译过程划分了词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成、六个阶级。另外两个重要的工作:表格处理和出错处理与上述六个阶级都有联系。一 、引言(或绪论)编译器的设计涉及到编译程序构造的一般原理、基本设计方法、主要实现技术和一些自动构造工具。尽管“编译程序”是特指将高级程序设计语言翻译成低级语言的软件,但编译程序构造的基本原理和技术也广泛应用于一般的设计和实现,因此,是一门对实践性要求较高的课程。目前,世界上存在着数千种源语言,既有Fortran和Pascal这样的传统程序设计语言,也有各计算机应用领域中出现的专用语言。目标语言也同样广泛,目标语言可以是另一种程序
6、设计语言或者是从微处理机到计算机的任何计算机的机器语言。不同语言需要不同的编译器。根据编译器的构造方法或者它们要实现的功能,编译器被分为一遍编译器、多遍编译器、装入并执行编译器、调试编译器、优化编译器等多种类别。从表面上看,编译器的种类似乎千变万化,多种多样,实质上任何编译器所要完成的基本任务都是相同的。通过理解这些任务,我们可以利用同样的基本技术为各种各样的源语言和目标机器构建编译器。中间代码生成在进行了上述的语法分析和语义分析的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计
7、为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。很多编译程采用了一种近似“三地址指令”的“四元式”中间代码,这种四元式的形式为:(运算符,运算对象1,运算对象2,结果)。二、编译器的基础知识一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编译程序。2.1 编译器的发展背景编译程序是现代计算机系统的基本组成部
8、分之一,而且多数计算机系统都含有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译成另一种语言(称作目标语言)的等价的程序。比如汇编程序是一个翻译程序,它把汇编语言程序翻译成机器语言程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级语言,则这种翻译程序称作编译程序。词法分析阶级是编译过程的第一个阶级。这个阶级的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别一个个单词(也称为单词符号或符
9、号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。比如标识是由字母开头,后跟字母、数字字符序列组成的一种单词,。保留字是一种单词,此外还有算符,界符等等。 语法分析是编译过程的第二个阶段。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语。如“程序”,“语句”,“表达式”等等。一般这种语法短语也称为语法单位,可表示成语法树。语法分析所依据的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。由于代码生成较复杂,所以编译器一般将这一阶段分成几个涉及不同中间数据结构步骤,其中包括了某种称作中间代码的抽象代码。编译器也可能
10、没有生成真正的可执行代码,而是生成了某种形式的汇编代码,这必须由汇编器、链接器和装入器进行进一步处理。汇编器、链接器和装入器可由操心系统提供或由编译器自带。在翻译期间,中间表示或IR代表了源程序和数据结构。虽然抽象语法树是源代码完美充分的表达,即使对于代码生成也不过这样,但是它与目标代码极不相像,在控制流构造上尤为如此。在控制流构造上,目标代码使用转移语句而不是if和while语句。因此,编译器编写者可能希望从语法树生成一个更接近目标代码的中间表示形式,或者用这样一个中间表示代替语法树,然后再从这个新的中间表示生成目标代码。这种类似目标代码的中间表示称为中间代码。2.2编译器研发的可行性分析编
11、写编译器的原理和技术具有十分普遍的意义,以致于在每一个计算机科学家的研究生涯中,许多原理和技术都会反复用到。编译器的编写涉及到程序设计语言、计算机体系结构、语言理论、算法和软件工程等学科。简单的说,编译器是一个程序,它读入用某种语言(源语言)编写的程序并将其翻译成一个与之等价的以另一种语言(目标语言)编写的程序。作为这个翻译过程匠一个重要组成部分,编译器能够向用户报告被编译的源程序中许多操纵源程序的软件工具都首先完成某种类型的分析。下边是这类工具的示例:1结构编辑器,结构编辑器将一个命令序列作为输入一构造程序。2智能打印机,智能打印机能够对程序进行分析,打印出结构清晰的程序。3静态检查器,静态
12、检查器读入一个程序,分析这个程序,并在不运行这个程序的条件试图发现程序的潜在错误。4解释器,解释器不是通过翻译来产生目标程序,而是直接执行源程序中蕴含的操作。研究编译程序是有意义在于:1)编译程序构造是计算机科学中的一个非常成功的分支,也是最早获的成功的分支之一;2)它与文件转换程序关系密集,且不仅仅适用于编译程序;3)它包含许多在实际应用中有用的算法。23编译过程概述编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都含有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。从功能上看,一个编译程序就是一个语言翻译程序。它把一种语(称作源语言)书写的程序翻译
13、成另一种语言(称作目标语言)的等价的程序。如果源语言是像FORTRAN,PASCAL,或C那样的高级语言,目标语言是像汇编语言或机器语言那样的低级玉器言,则这种翻译程序称作编译程序。高级语言程序的处理过程如图: 需处理的源程序 预处理程序 源程序编译程序 目标汇编程序 汇编程序 可再装配的机器代码装配/连接编辑程序 可在装配的目标文件 绝对机器代码 一个源程序有时可能分成几个模块存放在不同的文件里,将这些源程序汇集在一起的任务,由一个叫做预处理程序的程序完成,有些预处理程序也负责宏展开,像C语言和预处理程序要完成文件合并、宏展开等任务。也就是说,一个编译程序的输入可能要一个或多个预处理程序来产
14、生,另外,为得到能运行的机器代码,编译程序的输出可能仍需要进一步地处理。表格管理目标代码生成代码优化中间代码生成语义分析语法分析词法分析 源程序出错处理 图1图1将编译过程划分了词法分析、语法分析、语义分析、中间代码生成、代码优化、目标代码生成、六个阶级。另外两个重要的工作:表格处理和出错处理与上述六个阶级都有联系。编译过程是源程序和各种信息被子保留在种种不同的表格里,编译各阶级的工作都涉及到构造、查找或更新有关的表格,因此需要有表格处理的工作;如果编译过程中发现源程序有错误,编译程序应报告错误的性质和错误发生的地点,并且将错误所造成的影响限制在尽可能小的范围内,使得源程序的其余部分能继续被编
15、译下去,有些编译程序还能自动校正错误,这些工作称之为出错处理。词法分析阶级是编译过程的第一个阶级。这个阶级的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别一个个单词(也称为单词符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。比如标识是由字母开头,后跟字母、数字字符序列组成的一种单词,。保留字是一种单词,此外还有算符,界符等等。语法分析是编译过程的第二个阶级。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等。一般这种语法短语,也称为语法单位,可表示成语法树。语法分析所依据
16、的是语言的语法规则,即描述程序结构的规则。通过语法分析确定整个输入串是否构成一个语法上正确的程序。词法分析和语法分析本质上都是对源程序的结构进行分析。但词法分析的任务仅对源程序进行线性扫描即可完成,比如识别标识符,因为标识符的结构是字母打头的字母和数字序列,这只要顺序扫描输入流,遇到既不是字母又不是数字字符时,将前面所发现的所有字母和数字组合在一起而构成单词标识符。但这种线性扫描则不能用于识别递归定义的语法成分,比如就不能用此办法去匹配表达式中的括号。语义分析阶级是审查源程序有无语义错误,为代码生成阶级收集类型信息。比如语分析的一个工作是进行类型审查,审查每个算符是否具有语言规范允许的运算对象
17、,当不符合语言规范时,编译程序应报告错误。如有的编译程序要对实数用个数组下标的情况报告错误。又如某些语言规定运算对象可被强制,那么当二目运算一整数和一实型时,编译程序应将整型转换成实型而不能认为是源程序的错误。中间代码生成在进行了上述的语法分析和语义分析的工作之后,有的编译程序将源程序变成一种内部表示形式,这种内部表示形式叫做中间语言或中间代码。所谓“中间代码”是一种结构简单、含义明确的记号系统,这种记号系统可以设计为多种多样的形式,重要的设计原则为两点:一是容易生成;二是容易将它翻译成目标代码。很多编译程采用了一种近似“三地址指令”的“四元式”中间代码,这种四元式的形式为:(运算符,运算对象
18、1,运算对象2,结果)。代码优化在此阶级的任务是对前阶级产生的是间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间。目标代码生成的任务是把是间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码。这是编译的最后阶级,它的工作与硬件系统结构和指令含义有关,这个阶的工作很复杂,涉及到硬件系统功能部件的运用、机器指令的选择、各种数据类型变量的存储空间分配以及寄存器和后缓寄存器的调度等。三、系统需求分析31词法语法分析简介词法分析的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别出一个个的单词(也称单词符号或符号)。这里所
19、谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。语法分析的任务是在词法分析的基础上将单词序列分解成各类语法短语,如“程序”,“语句”,“表达式”等等,即判断单词序列是否符合组成各类语法短语的组成规则,一般这种语法短语,也称为语法单位,可表示成语法树。3.2词法需求分析简介词法分析阶级是编译过程的第一个阶级。这个阶级的任务是从左到右一个字符一个字符地读入源程序,对构成源程序的字符流进行扫描和分解,从而识别一个个单词(也称为单词符号或符号)。这里所谓的单词是指逻辑上紧密相连的一组字符,这些字符具有集体含义。比如标识是由字母开头,后跟字母、数字字符序列组成的一种单词,。保留字是一种单词,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 编译器 设计
限制150内