编译原理历史与发展姓名:费张烨学号:09923206 指导老师:朱文华基于形式语言理论中的有关概念来讨论编译实现问题。
即编译原理=形式语言理论+编译技术编译原理是计算机专业的一门重要专业课,旨在介绍编译程序构造的一般原理和基本方法。
内容包括语言和文法、词法分析、语法分析、语法制导翻译、中间代码生成、存储管理、代码优化和目标代码生成。
编译原理是计算机专业设置的一门重要的专业课程。
虽然只有少数人从事编译方面的工作,但是这门课在理论、技术、方法上都对学生提供了系统而有效的训练,有利于提高软件人员的素质和能力。
编译器是将一种语言翻译为另一种语言的计算机程序。
编译器将源程序(source language)编写的程序作为输入,而产生用目标语言(target language )编写的等价程序。
通常地,源程序为高级语言(high-level language ),如C或C + + ,而目标语言则是目标机器的目标代码(object code,有时也称作机器代码(machine code )),也就是写在计算机机器指令中的用于运行的代码。
这一过程可以表示为:源程序→编译器→目标程序编译技术的历史在20世纪40年代,由于冯·诺伊曼在存储-程序计算机方面的先锋作用,编写一串代码或程序已成必要,这样计算机就可以执行所需的计算。
开始时,这些程序都是用机器语言(machine language )编写的。
机器语言就是表示机器实际操作的数字代码,例如:C7 06 0000 0002 表示在IBM PC 上使用的Intel 8x86处理器将数字2移至地址0 0 0 0 (16进制)的指令。
但编写这样的代码是十分费时和乏味的,这种代码形式很快就被汇编语言(assembly language )代替了。
在汇编语言中,都是以符号形式给出指令和存储地址的。
例如,汇编语言指令MOV X,2 就与前面的机器指令等价(假设符号存储地址X是0 0 0 0 )。
汇编程序(assembler )将汇编语言的符号代码和存储地址翻译成与机器语言相对应的数字代码。
汇编语言大大提高了编程的速度和准确度,人们至今仍在使用着它,在编码需要极快的速度和极高的简洁程度时尤为如此。
但是,汇编语言也有许多缺点:编写起来也不容易,阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。
发展编程技术的下一个重要步骤就是以一个更类似于数学定义或自然语言的简洁形式来编写程序的操作,它应与任何机器都无关,而且也可由一个程序翻译为可执行的代码。
例如,前面的汇编语言代码可以写成一个简洁的与机器无关的形式x = 2。
上世纪50年代,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。
但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。
与此同时,Noam Chomsky开始了他对自然语言结构的研究。
他的发现最终使得编译器的结构异常简单,甚至还带有了一些自动化。
Chomsky的研究导致了根据语言文法的难易程度以及识别它们所需要的算法来对语言分类。
正如现在所称的Chomsky架构(Chomsky Hierarchy),它包括了文法的四个层次:0型文法、1型文法、2型文法和3型文法,且其中的每一个都是其前者的特殊情况。
2型文法(或上下文无关文法)被证明是程序设计语言中最有用的,而且今天它已代表着程序设计语言结构的标准方式。
分析问题(parsing problem,用于上下文无关文法识别的有效算法)的研究是在60年代和70年代,它相当完善的解决了这个问题。
现在它已是编译原理中的一个标准部分。
有限状态自动机(Finite Automaton)和正则表达式(Regular Expression)同上下文无关文法紧密相关,它们与Chomsky的3型文法相对应。
对它们的研究与Chomsky的研究几乎同时开始,并且引出了表示程序设计语言的单词的符号方式。
人们接着又深化了生成有效目标代码的方法,这就是最初的编译器,它们被一直使用至今。
人们通常将其称为优化技术(Optimization Technique),但因其从未真正地得到过被优化了的目标代码而仅仅改进了它的有效性,因此实际上应称作代码改进技术(Code Improvement Technique)。
当分析问题变得好懂起来时,人们就在开发程序上花费了很大的功夫来研究这一部分的编译器自动构造。
这些程序最初被称为编译器的编译器(Compiler-compiler),但更确切地应称为分析程序生成器(Parser Generator),这是因为它们仅仅能够自动处理编译的一部分。
这些程序中最著名的是Yacc(Yet Another Compiler-compiler),它是由Steve Johnson在1975年为Unix系统编写的。
类似的,有限状态自动机的研究也发展了一种称为扫描程序生成器(Scanner Generator)的工具,Lex(与Yacc同时,由Mike Lesk为Unix系统开发)是这其中的佼佼者。
在70年代后期和80年代早期,大量的项目都贯注于编译器其它部分的生成自动化,这其中就包括了代码生成。
这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。
编译器设计最近的发展包括:首先,编译器包括了更加复杂算法的应用程序它用于推断或简化程序中的信息;这又与更为复杂的程序设计语言的发展结合在一起。
其中典型的有用于函数语言编译的Hindley-Milner类型检查的统一算法。
其次,编译器已越来越成为基于窗口的交互开发环境(Interactive Development Environment,IDE)的一部分,它包括了编辑器、连接程序、调试程序以及项目管理程序。
这样的IDE标准并没有多少,但是对标准的窗口环境进行开发已成为方向。
另一方面,尽管近年来在编译原理领域进行了大量的研究,但是基本的编译器设计原理在近20年中都没有多大的改变,它现在正迅速地成为计算机科学课程中的中心环节。
在九十年代,作为GNU项目或其它开放源代码项目的一部分,许多免费编译器和编译器开发工具被开发出来。
这些工具可用来编译所有的计算机程序语言。
它们中的一些项目被认为是高质量的,而且对现代编译理论感性趣的人可以很容易的得到它们的免费源代码。
大约在1999年,SGI公布了他们的一个工业化的并行化优化编译器Pro64的源代码,后被全世界多个编译器研究小组用来做研究平台,并命名为Open64。
Open64的设计结构好,分析优化全面,是编译器高级研究的理想平台。
编译原理的近期发展随着大规模集成电路、网络通讯和其它数字信息技术的迅速发展,目前嵌入式系统己经广泛地渗透到科学研究、工程设计、军事技术、各类产业和商业文化艺术等各方面,在人们日常生活中的方方面面到处是嵌入式系统设备的身影,如手机、PDA、智能家电以及汽车电子等。
随着国内外各种嵌入式产品的进一步开发和推广,嵌入式技术和人们的生活结合越来越紧密,人们日常的工作、学习和生活方式终将不可避免地逐步改变,嵌入式产品正在逐步形成时尚,在当今的信息社会中扮演越来越重要的角色。
嵌入式系统一般指的是非PC系统,它包括完全植入嵌入式硬件内部的为特定应用设计的专用计算机系统,以及相应的硬件。
嵌入式系统以应用为中心的,它的软硬件可以根据需求进行裁减,以此来适应目标系统对外形尺寸、功能、可靠性、成本、功耗、外部接口等方面的严格要求。
简单地说,嵌入式系统集操作系统、应用软件与硬件于一体,具有软件代码小、高度自动化、响应速度快等特点,因此特别适合要求实时和多任务的应用。
由于嵌入式系统资源有限,一般无法提供编译、汇编、链接等工具,同时也很难提供高级调试功能,因此嵌入式系统的应用软件一般不能直接在嵌入式系统平台上进行开发,而需要在交叉编译环境中开发。
也就是说通常是在另外的开发平台上开发的,一般这种开发平台由通用的计算机系统和专用的嵌入式系统软件开发工具组成。
编译实现方式的发展主要分一下五类:手工、机器语言、汇编、系统程序设计语言、自动构造工具lex yacc gcc。
推动编译技术发展的因素主要包括:语言范型(计算模式)、计算机体系结构语言范型主要包括:命令式(imperative language) 、应用式(applicative) 、基于规则的(rule-based)、面向对象的(object-oriented)、并行计算(parallel computing)。
体系结构主要包括:万诺曼机体系结构、并行体系结构、嵌入系统。
编译程序执行环境主要包括:批处理、交互环境、嵌入系统环境、并行编译技术、交叉编译。
编译程序在一个机器(宿主机)上运行,产生另一个机器(目标机)的汇编语言。
嵌入式系统中的应用程序正是借助这样的编译程序生成。
目标处理器MIPSX是MIPS系列芯片的种,属于RISC体系结构,来源于斯坦福大学的MIPS计划。
由于该系列CPU不是采用加州大学伯克利分校的RISC窗口技术而是采用消除流水线各级互锁的微处理器MIPS(MicroprocessorWithout Interlocking Pipeline Stage)技术,因此而得名。
MIPS是将IBM公司对优化编译程序的研究和加州大学伯克利分校的大规模集成电路的思想结合起来的产品。
由于RISC指令集的简单和整齐,为了达到更好地利用计算机的性能,MIPS 系列芯片中很好地应用了流水线策略。
流水线是现代各类微处理器都采用的指令执行技巧,即将若干条指令的取指、译码和执行过程部分重叠在流水线中同时执行。
以前在CISC计算机中,由于指令多而复杂,处理每条指令的所需时间不固定,当后面指令需要前条指令的结果时,往往造成指令互锁,因此无法实现流水线。
而斯坦福大学的MIPS计划就是在编译的过程中,利用编译程序优化处理器的流水线以求提高处理器流水线的效率。
由于采用了硬件连线控制来执行数目不多的简单指令,而且还能重组软件流水线,这样就减少了硬件复杂性。
通过这一个学期的学习,更让我知道了编译技术的重要性和实用性,激发了我的学习兴趣,对其他相关知识的学习打下了基础。
编译原理这门课不仅仅在于它本身的理论价值,更在于为我们解决问题提供的思维方式和方法。
作为软件工程的基础,我一定会在将来的时间里继续努力钻研这门课程。
费张烨09923206如有侵权请联系告知删除,感谢你们的配合!。