编译器


编译器 (正體)

Free Web Hosting with Website Builder

编译器(Compiler)是一种计算机程序,它可以把一种计算机语言翻译成另一种计算机语言。编译器的输入叫做源代码,输出叫做目标代码。通常,编译器的输出往往能够被其它程序处理(例如链接器),不过也有些编译器输出可读的文本文件

翻译源代码通常是为了创建可执行程序。“编译器”最初是指那些高级语言代码翻译成较低级语言(如汇编语言机器码)的程序。把低级语言翻译成高级语言的程序叫做反编译器。

编译器通常需要进行这些操作:词法分析、预处理、解析、文法分析、代码生成以及代码优化。

目录

历史

早期的计算机软件都是用汇编语言直接编写的,这种状况持续了数年。当人们发现为不同类型的CPU编写可重用软件的开销要明显高于编写编译器时,人们发明了高级编程语言。由于早期的计算机的内存很少,当大家实现编译器时,遇到了许多技术难题。

大约在20世纪50年代末期,与机器无关的编程语言被首次提出。随后,人们开发了几种实验性质的编译器。第一个编译器是由Grace Hopper于1952年为A-0语言编写的。通常认为,1957年由IBM约翰·巴科斯领导的FORTRAN团队介绍了第一个完整的编译器。1960年,COBOL成为一种较早的能在多种架构下被编译的语言。

高级语言在许多领域流行起来。由于新的编程语言支持的功能越来越多,计算机的架构越来越复杂,这使得编译器也越来越复杂。

早期的编译器是用汇编语言编写的。首个能编译自己源程序的编译器是在1962年由麻省理工学院的Hart和Levin制作的。从20世纪70年代起,实现能编译自己源程序的编译器变得越来越可行,不过还是用PascalC语言来实现编译器更加流行。制作某种语言的第一个能编译器,要么需要用其它语言来编写,要么就像Hart和Levin制作Lisp编译器那样,用解释器来运行编译器。

教学用的编译器

编译器的构造与优化是计算机专业的大学课程。通常在课程中包含了如何实现一种教学用程序语言的编译器。一个著名的例子是21世纪70年代,尼古拉斯·沃斯用于讲解编译器的构造时使用的PL/0编译器。

编译器输出

编译器的一种分类方式是按照生成代码所运行的系统平台划分,这个平台称为目标平台。

有一些编译器的输出将运行在和编译器相同类型的计算机和操作系统之上,这种编译器叫做本地编译器。输出可以运行于不同的平台之上的编译器,叫做交叉编译器。由于嵌入式系统通常没有软件开发环境,因此,为这类系统开发软件时,通常需要使用交叉编译器。

生成虚拟机上运行的代码的编译器,编译器和编译器输出的运行平台有可能,也有可能不同。因此,对于这类编译器,不去区分它是本地编译器还是交叉编译器。

参见







Why are we here?
All text is available under the terms of the GNU Free Documentation License
This page is cache of Wikipedia. History