全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
编译原理课程论文 09计本(3)班 0904013028 周幼新一、编译原理概述 编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。编译器将源程序编写的程序作为输入,从而产生用目标语言编写的等价程序输出。通常地,源程序为高级语言,如C或C + +,而目标语言则是目标机器的目标代码 (有时也称作机器代码),也就是写在计算机机器指令中的用于运行的代码。这一过程可以表示为:源程序编译器 目标程序。二、编译原理的发展历程20世纪40年代,由于冯诺伊曼在存储程序在计算机方面的应用,编写一串代码或程序保存在计算机中供计算机执行是十分方便的。起初这些程序都是用机器语言编写的指令(只有0和1的程序),但编写这样的代码十分费时、困难和乏味,从而产生用符号语言(汇编语言)编写的程序代替了。在汇编语言中,都是以符号形式给出指令和存储地址的。汇编程序将用汇编语言的符号代码和存储地址翻译成与机器语言相对应的数字代码。汇编语言大大提高了编程的速度和准确度。尤其在要求程序有极快的速度和极高的简洁程度时更为重要。汇编语言也有许多缺点:编写起来也不容易(比机器语言好多了),阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。所以编程技术的下一个重要目的就是以一个更类似于数学定义或自然语言的简洁形式来编写程序,编写后的程序与任何机器都无关。Noam Chomsky通过对自然语言结构的研究,发现并最终使得编译器结构异常简单,甚至还带有了一些自动化。Chosmky的研究根据语言文法(指定其结构的规则)的难易程度以及识别它们所需的算法来为语言分类。与乔姆斯基分类结构一样,包括了文法的4个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特例。其中2型文法(上下文无关文法)被证明是程序设计语言中最有用的,今天它已代表着程序设计语言结构的标准方式。现在编译器设计主要考虑到两点:1、编译器能够识别更为复杂的算法的应用程序,用于推断或简化程序中的信息;这使得它与更为复杂的程序设计语言的发展结合在一起。2、编译器越来越成为基于窗口的交互开发环境的一部分,它包括了编辑器、链接程序、调试程序以及项目管理程序。三、编译器的分析编译器分析的对象是前端生成并传递过来的中间代码,优化型编译器常常用好几种层次的中间代码来表示程序,高层的中间代码,接近输入的源代码的格式,与输入语言相关,包含更多的全局性的信息,和源代码的结构;中层的中间代码与输入语言无关,低层的中间代码与机器语言类似。不同的分析,优化发生在最适合的那一层中间代码上。常见的编译分析有函数调用树,控制流程图,以及在此基础上的 变量定义使用,使用定义链,变量别名分析,指针分析,数据依赖分析等等。上述的程序分析结果是编译器优化和程序变形的前提条件。常见的优化和变新有:函数内嵌,无用代码删除,标准化循环结构,循环体展开,循环体合并,分裂,数组填充等等。 优化和变形的目标是减少代码的长度,提高内存,缓存的使用率,减少读写磁盘,访问网络数据的频率。更高级的优化甚至可以把序列化的代码变成并行运算,多线程的代码。机器代码的生成是优化变型后的中间代码转换成机器指令的过程。编译器主要采用生成汇编代码的策略,而不直接生成二进制的目标代码。即使在代码生成阶段,高级编译器仍然要做很多分析,优化,变形的工作。例如如何选择合适的机器指令,如何合并几句代码成一句等等。 四、编译器的工作原理编译是从源代码(通常为高阶语言)到能直接被计算机或虚拟机执行的目标代码(通常为低阶语言或机器语言)的翻译过程。然而,也存在从低阶语言到高阶语言的编译器,这类编译器中用来从由高阶语言生成的低阶语言代码重新生成高阶语言代码的又被叫做反编译器。也有从一种高阶语言生成另一种高阶语言的编译器,或者生成一种需要进一步处理的的中间代码的编译器(又叫级联)。典型的编译器输出是由包含入口点的名字和地址, 以及外部调用(到不在这个目标文件中的函数调用)的机器代码所组成的目标文件。一组目标文件,不必是同一编译器产生,但使用的编译器必需采用同样的输出格式,可以链接在一起并生成可以由用户直接执行的可执行程序。五、编译器的工作方法首先编译器进行语法分析,也就是要把那些字符串分离出来。然后进行语义分析,就是把各个由语法分析分析出的语法单元的意义搞清楚。最后生成的是目标文件,也称为obj文件。再经过链接器的链接就可以生成最后的可执行代码了。有些时候需要把多个文件产生的目标文件进行链接,产生最后的代码。这一过程称为交叉链接。 编译器,包括了代码编译器(compiler),目标文件链接器(linker),库文件管理工具,编译驱动工具,ANSI c/c+标准的头文件和库文件,扩展的头文件和库文件,集成开发环境等等与编译相关的工具,所有这些工具的集合,就组成了广义上的编译器。linker的功能是将目标文件进行装配,将浮动的地址变为确定的地址,这个工作是通过修改目标文件的重定位项来实现的。link这一阶段处理的输入是目标文件,其输出是可执行文件,或动态库。任何一个编译器都会提供库文件和与之对应的头文件,C/C+编译器一般都提供ANSI C/C+的库和相应的头文件。广义的编译过程,实际上是由编译和链接两个基本步骤组成的。在编译器里,有一些默认的规定,我们需要了解。在编译器中,bin目录用于存放compiler、linker等工具,include目录用于存放头文件,lib目录用存放库文件,大多数的编译器的目录就是按这个来组织的。六、学习总结编译原理这门课程是计算机专业一门重要的专业基础课,在专业课程内起着承上启下的作用。通过本学期老师全面的讲授,使我认识到学习编译原理的重要性,通过对本书的学习我了解到很多编译程序的知识,编译程序是现代计算机系统的基本组成部分之一,而且多数计算机系统都配有不止一个高级语言的编译程序,对有些高级语言甚至配置了几个不同性能的编译程序。使用计算机的人都知道,除了编译程序外,还需要一些其他的程序才能生成一个可在计算机上执行的目标
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 科室突发停电应急演练预案
- 筏板基础工程施工方案及工艺方法
- 预应力混凝土工程施工方案及技术措施
- 养老护理工作总结
- 深基坑涌水涌砂应急预案与备用抽水设备快速就位
- 产房血液透析管路锌沉积应急疏散预案演练脚本
- ICU病房除颤仪故障应急疏散预案演练脚本
- 园林绿化工程苗木种植施工方案
- 语文一年级下册《静夜思》
- 辽宁鞍山市立山区教育局面向2026届毕业生校园招聘7人(第三批)模拟试卷带答案详解(考试直接用)
- 供热工程后评估技术方案
- 成都泡桐中学初一入学语文分班考试真题含答案
- 2026年高中物理会考冲刺押题卷
- 黑龙江大学《审计学》2025 学年第二学期期末试卷
- 销售实习生面试题及销售技巧培训含答案
- GB/T 13471-2025节能项目经济效益计算与评价方法
- 家政保洁服务包年合同
- 16.3.2 完全平方公式(第1课时 完全平方公式)(教学课件)
- DB31T 310020-2024自动驾驶道路测试安全风险评估技术规范
- 精神科护理常规操作培训
- 2025年电力交易员题库及答案
评论
0/150
提交评论