编译原理发展史
- 格式:doc
- 大小:26.50 KB
- 文档页数:10
程序设计语言及其发展史
程序设计语言及其发展史
计算机是现代化的标志之一,而程序设计语言则是计算机得以发挥功能的关键。
程序设计语言的发展史可以追溯到二十世纪四十年代末期。
在那个时期,计算机是庞大的机器,只能通过机器语言进行编程。
机器语言编写的程序不易阅读和理解,而且更容易出现错误。
在机器语言的基础上,出现了汇编语言,它利用符号编写指令并用符号名称来
表示内存地址,使其更易于阅读和理解。
但是,汇编语言依旧需要相当的专业知识来编写。
在上世纪五十年代和六十年代,高级程序语言开始兴起。
FORTRAN,COBOL和BASIC是最早的高级程序语言之一,它们采用自然语言来描述计算机程序,更易于
理解和使用。
随着计算机的普及,程序语言的发展得到了极大的推进。
Pascal,C,C++,Java等语言陆续发展出来。
它们更加简洁,有助于提高编程效率。
现在,随着计算机科学的不断发展,越来越多的程序语言出现了,如Perl,Python,Ruby,Swift等。
这些新的程序语言都有不同的应用场景和不同的特点。
在今后的发展中,程序语言中将会有越来越多的新概念和技术。
例如,机器学习、人工智能等,这些技术将推动程序语言的发展,实现更加智能化和高效化的编程。
程序设计语言的发展,是人类在不断挑战和开发自己的智力极限的历史过程。
它影响了甚至改变了人类的生产生活方式,也成为了人类社会进步的催化剂。
编译原理的基础知识和技术编译原理是计算机科学中的重要领域,它研究的是将高级程序语言转换为机器语言的方法和过程。
在计算机软件开发中,编译器扮演着重要的角色,它能够将编写的源代码转化为可执行的机器代码。
本文将介绍编译原理的基础知识和相关技术。
一、编译原理的定义与概述编译原理是指将高级语言程序转化为等价的机器语言程序的技术和理论研究。
编译器是实现编译原理的工具,它负责将源代码进行词法分析、语法分析、语义分析、优化和代码生成等一系列步骤,最终生成可执行的目标代码。
二、编译过程的基本步骤1. 词法分析词法分析是编译过程的第一步,它将源代码分解为一个个的词法单元。
词法单元包括关键字、标识符、常量、运算符和分隔符等。
通过词法分析器,编译器能够识别和提取源代码中的各种词法单元。
2. 语法分析语法分析是编译过程的第二步,它将词法单元串转化为一个个的语法分析树。
语法分析树反映了源代码的语法结构,它能够帮助编译器理解源代码的语义。
常用的语法分析方法包括递归下降法和LR分析法等。
3. 语义分析语义分析是编译过程的第三步,它对语法分析树进行进一步的处理和分析。
语义分析器能够检查源代码是否符合语义规则,并生成语义动作或中间代码。
语义分析的主要任务是类型检查、符号表管理和语义动作的生成等。
4. 优化优化是编译过程中非常重要的一步,它能够对生成的中间代码进行进一步的优化处理。
优化的目标是提高目标代码的执行效率,并减少程序的存储空间。
常见的优化技术包括常量折叠、循环展开、公共子表达式消除等。
5. 代码生成代码生成是编译过程的最后一步,它将优化后的中间代码转化为目标代码。
代码生成器根据目标机器的特性和指令集,生成可执行的机器代码。
代码生成的过程中,需要进行寄存器分配、指令选择和地址分配等。
三、常用的编译器工具1. LexLex是一种常用的词法分析器生成工具,它能够根据用户定义的正则表达式,自动生成词法分析器程序。
Lex生成的词法分析器能够快速地将源代码分解为词法单元,简化了编译器的实现过程。
编程语言发展史编程语言是人类和计算机交互的桥梁。
自计算机诞生以来,人们一直在探索更加高效、易用的编程语言。
本文将从早期语言的发展、面向过程、面向对象、函数式编程以及现代编程语言的概述等五个方面来介绍编程语言的发展史。
一、早期语言的发展早期的编程语言以机器语言和汇编语言为主。
这两种语言存在的问题是编写简单,但可读性、可维护性极差,添加新功能也需要重新编译整个程序。
随着计算机技术的发展,高级语言被开发出来,如FORTRAN、COBOL等。
这些语言能够快速地实现数学和商业计算,扩展性较好,但对程序设计和算法的抽象程度较低,难以应用于其他领域。
二、面向过程面向过程编程通过将程序分解为多个小的可复用的模块,当需要时通过调用这些模块来完成日常的工作。
面向过程编程在C语言等语言中被广泛使用,缩短代码长度并提高代码可读性。
三、面向对象编程面向对象编程通过将一些数据和做出操作的方法绑定在一起,实现了抽象和封装的功能。
面向对象语言如Java、C#等,已成为现代软件开发领域的主流。
面向对象的方法有助于代码重用和维护。
四、函数式编程函数式编程依赖于不可变变量和lambda表达式,可以使程序更加简单和可读。
函数式编程能够更好地处理大规模和分布式的数据。
近年来,比如Scala和Haskell这样的函数式编程语言出现了许多流行的大数据应用程序。
五、现代编程语言现代编程语言在前四种编程语言的基础上,增加了诸如类型安全、泛型、异步编程、内存安全等新的特性。
这些特性增加了程序员的生产力,使他们能够更加轻松地管理复杂的代码。
现代编程语言如Swift、Rust、Kotlin等,也取得了广泛的应用。
总结从早期的机器语言到现代编程语言,编程语言的发展经历了一个漫长的历程。
面向过程、面向对象、函数式编程和现代编程语言的发展趋势,试图使编程语言更加高效、简单、安全和可读。
在未来,预计会涌现出许多新的编程语言和新特性,帮助程序员更加轻松地用双手创造未来的IT世界。
编译原理基础知识编译原理是计算机科学领域的一个重要分支,涵盖了计算机程序设计的基本概念和技术。
它主要研究如何将高级程序设计语言(源语言)转换为计算机能够执行的机器语言(目标语言),以实现程序的正确性和高效性。
本文将重点介绍编译原理的基础知识。
一、编译原理的定义与作用编译原理是通过编译器将源代码转换为目标代码的理论和方法的总称。
编译器是一个软件工具,它能够将高级语言程序翻译成机器语言程序。
编译原理的主要作用是提高程序的执行效率和可维护性,同时也有助于程序员更好地理解程序的结构和语义。
二、编译原理的基本过程1. 词法分析(Lexical Analysis):将源程序分解为词法单元(Token)的序列,每个词法单元代表了程序中的一个基本语法单位,如关键字、标识符、常量等。
2. 语法分析(Syntax Analysis):通过语法分析器(Parser)根据语法规则检测和分析词法单元序列,构建语法树(Syntax Tree),以表达程序的语法结构。
3. 语义分析(Semantic Analysis):对语法树进行语义检查,包括类型检查、作用域分析等,并生成符号表。
4. 中间代码生成(Intermediate Code Generation):将语法树转换为中间代码,中间代码是一种类似于汇编语言的低级表示形式,与具体的硬件平台无关,便于后续优化与目标代码生成。
5. 代码优化(Code Optimization):对中间代码进行各种优化,以提高程序的执行效率和资源利用率。
6. 目标代码生成(Code Generation):将优化后的中间代码转换为目标代码,目标代码是特定硬件平台上的机器代码,可以直接由计算机执行。
三、编译原理的常见技术和算法1. 正则表达式和有限自动机:用于对词法单元进行识别和划分的基础技术。
2. 上下文无关文法和语法分析算法:用于语法分析的基本概念和方法,如LL文法、LR文法和LALR文法等。
计算机编译原理与优化技术的发展计算机编译原理与优化技术是计算机科学领域中的重要研究分支,它对于提高程序的执行效率和优化代码的质量具有重要意义。
随着计算机技术的不断发展,编译原理与优化技术也在不断演进和完善。
本文将从历史发展、编译原理及优化技术的应用等方面进行探讨。
一、历史发展计算机编译原理与优化技术的起源可以追溯到二十世纪五六十年代。
当时,计算机的性能非常有限,程序需要以汇编语言编写,并通过编译器将其转化为机器语言。
然而,这种简单的编译过程并不能充分发挥计算机的潜力,因此人们开始探索如何优化编译过程以提高程序的执行效率。
随着计算机的发展,高级编程语言的出现使得程序的编写更加简便。
然而,由于高级语言相对于机器语言来说更抽象,因此需要更复杂的编译过程来将高级语言编译为机器语言。
因此,计算机编译原理与优化技术开始变得越来越重要。
二、编译原理编译原理指的是将高级程序语言转化为机器语言的过程。
它包括词法分析、语法分析、语义分析、代码生成等多个阶段。
词法分析与语法分析的目标是将源代码进行解析,构建相应的抽象语法树。
语义分析则对抽象语法树进行处理,消除语法和语义上的错误。
最后,代码生成将抽象语法树转化为机器语言。
编译原理的发展为程序的开发提供了极大的便利。
通过编译器,开发人员可以使用高级语言进行程序设计,而无需关注底层的机器语言。
编译原理的优化技术也可以在编译过程中对程序进行优化,提高程序的执行效率和代码的质量。
三、优化技术的应用编译原理与优化技术不仅仅应用于编译器的设计与实现,还广泛应用于软件开发中的其他领域。
下面将介绍一些常见的优化技术及其应用。
1. 死代码消除死代码指的是程序中不会被执行到的代码。
通过静态分析和代码流分析,编译器可以检测到死代码,并将其消除,从而减少程序的运行时间和内存占用。
2. 数据流分析数据流分析是对程序中数据的流动进行分析,以找出优化的机会。
通过对程序进行数据依赖性分析、指针分析等,编译器可以对程序进行优化,如循环展开、多线程并行等。
编译原理的发展与应用1. 什么是编译原理编译原理是计算机科学的一个重要分支,它研究的是将高级编程语言转化为计算机能够执行的机器语言的过程。
编译原理主要涉及到编译器的设计和实现,包括词法分析、语法分析、语义分析、中间代码生成、代码优化和目标代码生成等方面的内容。
2. 编译原理的发展历程编译原理的发展可以追溯到上世纪50年代,随着计算机的不断发展和应用,编译原理也逐渐成为了计算机科学的重要研究方向。
•1952年,自动编程的发展促进了编译原理的研究,第一个FORTRAN 编译器被开发出来,实现了将高级语言转化为机器语言的功能。
•1956年,GLISP 编译器的开发成为了编译原理研究的一个重要里程碑,它是第一个将高级语言编译成机器代码的编译器。
3. 编译原理的应用领域随着计算机技术的快速发展,编译原理的应用范围也逐渐扩大。
以下是一些编译原理在不同领域的应用案例:3.1 编程语言开发编译原理在编程语言开发方面有着广泛的应用。
通过编译原理的相关技术,可以设计和实现高级编程语言,如C、C++、Java等。
编译原理可以帮助程序员将高级语言代码转化为计算机能够执行的机器语言代码,从而实现程序的执行。
3.2 编译器优化编译器优化是指对编译器生成的中间代码和目标代码进行优化,以提高程序的执行效率和性能。
通过应用编译原理中的代码优化技术,可以对程序进行各种优化,如去除冗余代码、减少循环的次数、提前计算等等。
这些优化措施可以显著提升程序的执行速度和性能。
3.3 操作系统编译原理在操作系统中也有着重要的应用。
操作系统的内核通常由高级语言编写,而编译原理可以将这些高级语言代码转化为汇编语言或机器语言代码,从而实现操作系统的功能。
编译原理还可以帮助操作系统设计和实现各种系统调用、进程管理和内存管理等功能模块。
3.4 嵌入式系统编译原理在嵌入式系统中也发挥着重要的作用。
嵌入式系统通常对资源的利用和性能要求较高,因此需要进行高效的代码编译和优化。
在20世纪40年代,由于冯·诺伊曼在存储-程序计算机方面的先锋作用,编写一串代码或程序已成必要,这样计算机就可以执行所需的计算。
开始时,这些程序都是用机器语言(machine language )编写的。
机器语言就是表示机器实际操作的数字代码,但编写这样的代码是十分费时和乏味的,这种代码形式很快就被汇编语言(assembly language )代替了。
在汇编语言中,都是以符号形式给出指令和存储地址的。
编语言大大提高了编程的速度和准确度,人们至今仍在使用着它,在编码需要极快的速度和极高的简洁程度时尤为如此。
但是,汇编语言也有许多缺点:编写起来也不容易,阅读和理解很难;而且汇编语言的编写严格依赖于特定的机器,所以为一台计算机编写的代码在应用于另一台计算机时必须完全重写。
上世纪50年代,IBM的John Backus带领一个研究小组对FORTRAN语言及其编译器进行开发。
但由于当时人们对编译理论了解不多,开发工作变得既复杂又艰苦。
在70年代后期和80年代早期,大量的项目都贯注于编译器其它部分的生成自动化,这其中就包括了代码生成。
这些尝试并未取得多少成功,这大概是因为操作太复杂而人们又对其不甚了解。
在九十年代,作为GNU项目或其它开放源代码项目的一部分,许多免费编译器和编译器开发工具被开发出来。
这些工具可用来编译所有的计算机程序语言。
它们中的一些项目被认为是高质量的,而且对现代编译理论感性趣的人可以很容易的得到它们的免费源代码。
大约在1999年,SGI公布了他们的一个工业化的并行化优化编译器Pro64的源代码,后被全世界多个编译器研究小组用来做研究平台,并命名为Open64。
Open64的设计结构好,分析优化全面,是编译器高级研究的理想平台。
编译原理的发展历史论文编译原理是计算机科学领域中的重要课题,它主要研究如何将高级程序语言翻译成机器语言的过程。
编译器是实现这一过程的软件工具,它的出现和发展极大地促进了软件开发的进展,提高了程序开发效率,同时也推动了计算机编程语言和程序设计方法的革新。
本文旨在对编译原理的发展历史进行梳理和总结,以期为相关领域的研究和教育提供参考。
编译原理的起源可以追溯到20世纪50年代,当时计算机编程语言的发展和普及给程序翻译技术提出了新的挑战。
1952年,A.S. Фуртунатов利用多国语言的特点,提出了一个“爱丽斯”语言编译器,这是编译器开发的开端。
1957年,Fortran编译器的问世使高级语言编译成机器语言的自动化过程成为可能,这标志着编译原理研究进入了新的阶段。
20世纪60年代是编译原理发展的黄金时期。
在此期间,Backus-Naur形式(BNF)语法被提出,成为了描述编程语言语法结构的一种通用形式。
此外,1950年代兴起的语法制导翻译技术也得到了广泛的应用,这使得编译器的设计和实现都有了较大的进步。
1962年,美国学者Aho和Ullman提出了编译系统设计的理论基础,并在后续的几十年里对编译原理的研究做出了巨大的贡献,他们的著作《编译器》被誉为编译原理领域的经典之作。
20世纪70年代,随着计算机硬件性能的提升和软件系统复杂度的增加,编译原理的研究又迈上了新的台阶。
Chomsky提出了上下文无关文法,这为编程语言语法的形式化描述提供了更加精确的理论基础。
同时,词法分析和语法分析技术也得到了实质性的改进,这进一步促进了编译器的设计和实现。
自20世纪80年代以来,随着计算机软件和硬件技术的飞速发展,编译原理研究也得到了更多关注和支持。
各种优秀的编程语言和编译器相继问世,这不仅推动了编译原理的进一步发展,也促进了软件开发技术的不断创新。
同时,新的领域和问题也不断涌现,如即时编译技术、并行编译技术、领域特定语言(DSL)等,这为编译原理的研究提出了新的挑战和机遇。
原理科技之编译原理(先用机器码写了第一款编译器)程序员写的代码是如何转为可以运行的应用程序呢?为什么要转为可运行的应用程序,而不直接运行代码?应用程序能否再转回可供阅读的代码呢?带着这几个疑问,我们今天讲一下编译的原理。
一、编译的作用高级语言在把源程序转换为可执行的应用程序的时候,需要先对完整的源程序做词法分析、语法分析等一系列检测,所有语法都没有问题后,一次性把所有源代码翻译成机器码,这种从源代码翻译成机器码的过程被称为“编译”,C、C 等语言就是采用了编译方式。
编译是为了将容易被人阅读的源程序转化为不容易被人阅读,却更容易被机器识别的机器代码。
而且编译器所生成代码的正确性和质量直接影响到所有经编译器生成的软件,因此编译器是计算机科技领域中的一个非常重要的组成部分。
二、编译器的结构编译器工作过程中需要经过很多个步骤才能将源程序转化为应用程序,这些步骤包括:词法分析、语法分析、语义分析、生成中间代码、机器无关代码优化、代码生成、机器相关代码优化。
每一个步骤的实现都包含了很多很深奥的科学识别。
由于篇幅的原因,我就不一一介绍这个步骤的作用和实现方法了,感兴趣的同学可以自行搜索。
三、编译技术应用一个高级程序设计语言降低了编程的难度、提高了编程的效率,但是也导致了较低的效率,每一种编译语言都要对应一种编译器,以便将源程序翻译为机器可识别的目标程序。
四、最早的编译器那到底是先有高级程序设计语言,还是先有编译器呢?这个问题是有答案的,不像先有蛋还是先有鸡。
最早的编程语言是机器码,难以编写,难以阅读,为了解决这个问题才发展出了汇编语言。
相对于机器码来说,汇编已经算是一种高级语言了,为了将汇编语言翻译为机器码,人们用机器码写了第一款编译器,然后进行了多次迭代,才出现了功能更加强大的编译器。
五、反编译与反汇编高级语言翻译为应用程序时,不同语言的编译器有不同的处理方式,有些是翻译为机器码,代表语言有C/C ,有些是翻译为中间代码,再由运行环境进行解释执行,代表语言有java/C#。
编译原理的历史与发展--关于计算机专业的编译原理课程编译器是将便于人编写 阅读 维护的高级计算机语言翻译为计算机能解读、运行的低阶机器语言的程序。
编译器将原始程序作为输入 翻译产生使用目标语言的等价程序。
源代码一般为高阶语言如 Pascal、C++、Java 等 而目标语言则是汇编语言或目标机器的目标代码 有时也称作机器代码。
现在讨论计算机专业要不要开设编译原理课程变的热门,随着信息技术的迅猛发展及其应用领域的不断深化,几乎所有专业的研究与应用都离不开信息技术。
信息化浪潮对高等教育也带来非常直接的变化,各专业课程设置无不将计算机知识教育作为其课程设置的组成部分。
几乎所有专业的大学毕业生,都要求掌握基本的计算机操作技能,非计算机专业学生需要通过计算机等级考试,而一些和信息技术密切相关的专业,如电子信息、信息管理、电子商务等,课程设置上与计算机专业更是大量重叠,计算机知识教育在各专业中的渗透程度日渐加剧。
1 计算机专业面临的新挑战在计算机知识正在成为各专业基本教育内容的背景下,计算机专业学生的专业优势受到很大的挑战,以往在软硬件知识和应用能力上的独特优势似乎在逐渐弱化,与具有特定专业背景的学生相比就业压力越来越大,由此也引发计算机专业到底学什么、专什么的现实思考,我们必须面临的问题是:计算机专业的学生专业优势体现在哪里?计算机学科是一门技术性、工程性和应用性很强的学科,并有其基础理论支撑的科学体系。
计算机也是一种使用工具,但那种把工具使用等同于计算机专业的狭隘认识,其思维实际上和十多年前认为“会用计算机打字就是会用计算机”如出一辙。
计算机专业学生的优势应该在于:通过系统的专业原理性知识的学习与训练,熟练掌握基本的应用技能,并能够“知其然,且知其所以然”,为此专业基础课程的熏陶必不可少。
而编译原理就是一门介绍这种原理性知识的综合性专业基础课程。
2编译原理是计算机专业必不可少的基础知识计算机专业的理论基础对培养学生的计算机专业素养具有非常重要的作用。
编程语言的发展史简述
编程语言是人与计算机交流的桥梁,它可以让我们用更加有效的方式来完成各种任务。
编程语言的发展经历了漫长的历史,下面我们来简单地介绍一下。
首先是机器语言,这是计算机最早的语言,它由二进制代码组成,直接与计算机硬件交互。
但是人们很快就发现了这种语言的缺点:难以理解、难以调试、难以维护。
因此,人们开始尝试使用汇编语言,这是一种还是使用二进制代码的语言,但是增加了一定的符号,比如MIPS和ARM。
这种语言虽然比机器语言更容易理解,但是仍然需要大量的时间和精力来编写和维护代码。
随着计算机的发展,高级编程语言的出现改变了一切。
高级编程语言能够让程序员使用更加自然的语言来编写程序,比如使用C语言、Java、Python、Ruby等等。
这些语言都有自己的语法和特点,但是
它们都比汇编语言更加高效、易于使用和维护。
最近,人们开始研究新的编程语言,比如Go、Rust、Kotlin等等。
这些语言都具有自己的特点,比如更加安全、更加高效、更加易于使用等等。
这些语言的出现让我们有更多的选择,能够更好地满足不同的需求。
总之,编程语言的发展经历了漫长的历史,从机器语言、汇编语言到高级编程语言再到新的编程语言。
这些语言的出现让我们能够更加高效地编写程序,也为技术的发展带来了无限的可能性。
- 1 -。
《编译原理》总复习-07级第一章编译程序的概述(一)内容本章介绍编译程序在计算机科学中的地位和作用,介绍编译技术的发展历史,讲解编译程序、解释程序的基本概念,概述编译过程,介绍编译程序的逻辑结构和编译程序的组织形式等。
(二)本章重点编译(程序),解释(程序),编译程序的逻辑结构。
(三)本章难点编译程序的生成。
(四)本章考点全部基本概念。
编译程序的逻辑结构。
(五)学习指导引论部分主要是解释什么是编译程序以及编译的总体过程。
因此学习时要对以下几个点进行重点学习:翻译、编译、目标语言和源语言这几个概念的理解;编译的总体过程:词法分析,语法分析、语义分析与中间代码的生成、代码优化、目标代码的生成,以及伴随着整个过程的表格管理与出错处理。
第三章文法和语言课外训练(一)内容本章是编译原理课程的理论基础,主要介绍与课程相关的形式语言的基本概念,包括符号串的基本概念和术语、文法和语言的形式定义、推导与归约、句子和句型、语法分析树和二义性文法等定义、文法和语言的Chomsky分类。
(二)本章重点上下文无关文法,推导,句子和句型,文法生成的语言,语法分析树和二义性文法。
(三)本章难点上下文无关文法,语法分析树,文法的分类。
(四)本章考点上下文无关文法的定义。
符号串的推导。
语法分析树的构造。
(五)学习指导要构造编译程序,就要把源语言用某种方式进行定义和描述。
学习高级语言的语法描述是学习编译原理的基础。
上下文无关文法及语法树是本章学习的重点。
语法与语义的概念;程序的在逻辑上的层次结构;文法的定义,文法是一个四元组:终结符号集,非终结符号集,开始符号、产生式集;与文法相关的概念,字符,正则闭包,积(连接),或,空集,产生式,推导,直接推导,句子,句型,语言,最左推导,最右推导(规范推导);学会用文法来描述语言及通过文法能分析该文法所描述的语言;语法树及二义性的概念、能通过画语法树来分析一个文法描述的语言是否具有二义性;上下文无关文法的定义和正规文法的定义,能判断一个语言的文法是哪一类文法。
编译原理这门课程关注的是编译器方面的产生原理和技术问题,似乎和计算机的基础领域不沾边,可是编译原理却一直作为大学本科的必修课程,同时也成为了研究生入学考试的必考内容。
编译原理及技术从本质上来讲就是一个算法问题而已,当然由于这个问题十分复杂,其解决算法也相对复杂。
我们学的数据结构与算法分析也是讲算法的,不过讲的基础算法,换句话说讲的是算法导论,而编译原理这门课程讲的就是比较专注解决一种的算法了。
在20世纪50年代,编译器的编写一直被认为是十分困难的事情,第一Fortran的编译器据说花了18年的时间才完成。
在人们尝试编写编译器的同时,诞生了许多跟编译相关的理论和技术,而这些理论和技术比一个实际的编译器本身价值更大。
就犹如数学家们在解决著名的哥德巴赫猜想一样,虽然没有最终解决问题,但是其间诞生不少名著的相关数论。
推荐参考书虽然编译理论发展到今天,已经有了比较成熟的部分,但是作为一个大学生来说,要自己写出一个像Turboc C,Java那样的编译器来说还是太难了。
不仅写编译器困难,学习编译原理这门课程也比较困难。
正是因为编译原理学习相对困难,那么就要求有好的教师和好的教材。
教师方面不是我们能自己更改的,而在教材方面我们却可以按自己的意愿来阅读。
我下面推荐几本好的编译原理的教材。
我推荐的书籍都是国外的经典教材,因为在国内的教材中,确实还没发现什么让人满意的。
第一本书的原名叫《Compilers Principles,Techniques,and Tools》,另外一个响亮的名字就是龙书。
原因是这本书的封面上有条红色的龙,也因为这本书在编译原理基础领域确实太有名气了,所以很多国外的学者都直接取名为龙书。
最近机械工业出版社已经出版了此书的中文版,名字就叫《编译原理》。
该书出的比较早,大概是在85或86年编写完成的,作者之一还是著名的贝尔实验室的科学家。
里面讲解的核心编译原理至今都没有变过,所以一直到今天,它的价值都非凡。
C语言开展简史【K&R C】1978 年,Dennis Ritchie 和Brian Kernighan 合作推出了?The C Programming Language?的第一版(按照惯例,经典著作一定有简称,该著作简称为K&R),书末的参考指南(Reference Manual) 一节给出了当时C 语言的完整定义,成为那时C 语言事实上的标准,人们称之为K&R C。
从这一年以后,C 语言被移植到了各种机型上,并受到了广泛的支持,使C 语言在当时的软件开发中几乎一统天下。
【C89 (ANSI C)】随着C 语言在多个领域的推广、应用,一些新的特性不断被各种编译器实现并添加进来。
于是,建立一个新的“无歧义、于具体平台无关的 C 语言定义〞成为越来越重要的事情。
1983 年,ASC X3(ANSI 属下专门负责信息技术标准化的机构,现已改名为INCITS)成立了一个专门的技术委员会J11(J11 是委员会编号,全称是X3J11),负责起草关于C 语言的标准草案。
1989 年,草案被ANSI 正式通过成为美国国家标准,被称为C89 标准。
【C90 (ISO C)】随后,?The C Programming Language?第二版开始出版发行,书中内容根据ANSI C(C89)进行了更新。
1990 年,在ISO/IEC JTC1/SC22/WG14 (ISO/IEC 联合技术第I 委员会第22 分委员会第14 工作组) 的努力下,ISO 批准了ANSI C 成为国际标准。
于是ISO C(又称为C90) 诞生了。
除了标准文档在印刷编排上的某些细节不同外,ISO C(C90) 和ANSI C(C89) 在技术上完全一样。
【C95】之后,ISO 在1994、1996 年分别出版了C90 的技术勘误文档,更正了一些印刷错误,并在1995 年通过了一份C90 的技术补充,对C90 进行了微小的扩充,经过扩充后的ISO C 被称为C95。
编译原理历史与发展姓名:费张烨学号: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如有侵权请联系告知删除,感谢你们的配合!。