文章目录
- 程序设计语言是向人以及计算机描述计算过程的记号。
- 如我们所知,这个世界依赖于程序设计语言,因为在所有计算机上运行的所有软件都是用某种程序设计语言编写的。
- 但是,在一个程序可以运行之前,它首先需要被翻译成一种能够被计算机执行的形式。
完成这项翻译工作的软件系统称为编译器( compiler)
本书介绍的是设计和实现编译器的方法。
- 我们将介绍用于构建面向多种语言和机器的翻译器的一些基本思想。
- 编译器设计的原理和技术还可以用于编译器设计之外的众多领域。
- 因此这些原理和技术通常会在一个计算机科学家的职业生涯中多次被用到。
- 研究编译器的编写将涉及程序设计语言、计算机体系结构、形式语言理论、算法和软件工程。
在本章中,我们将介绍语言翻译器的不同形式,在高层次上概述一个典型编译器的结构,并讨论了程序设计语言和硬件体系结构的发展趋势。
- 这些趋势将影响编译器的形式。
- 我们还将介绍关于编译器设计和计算机科学理论的关系的一些事实,并给出编译技术在编译领域之外的一些应用。
- 最后,我们将简单论述在我们研究编译器时需要用到的重要的程序设计语言概念
1.1语言处理器
- 简单地说,一个编译器就是一个程序,它可以阅读以某一种语言(源语言)编写的程序,并把该程序翻译成为一个等价的、用另一种语言(目标语言)编写的程序,参见图1-1。
- 编译器的重要任务之一是报告它在翻译过程中发现的源程序中的错误。
如果目标程序是一个可执行的机器语言程序,那么它就可以被用户调用,处理输入并产生输出。参见图1-2。
解释器( Interpreter)是另一种常见的语言处理器。
- 它并不通过翻译的方式生成目标程序。
- 从用户的角度看,解释器直接利用用户提供的输入执行源程序中指定的操作。
- 参见图1-3。
在把用户输入映射成为输出的过程中,由一个编译器产生的机器语言目标程序通常比一个解释器快很多。
- 然而,解释器的错误诊断效果通常比编译器更好,因为它逐个语句地执行源程序。
例1.1
- Java语言处理器结合了编译和解释过程,如图1-4所示。
- 一个Java源程序首先被编译成一个称为字节码( bytecode)的中间表示形式。
- 然后由一个虚拟机对得到的字节码加以解释执行。
- 这样安排的好处之一是在一台机器上编译得到的字节码可以在另一台机器上解释执行。
- 通过网络就可以完成机器之间的迁移。
为了更快地完成输人到输出的处理,有些被称为即时(jutIn time)编译器的Jawa编译器在运行中间程序处理输入的前一刻首先把字节码翻译成为机器语言,然后再执行程序。
如图1-5所示,除了编译器之外,创建一个可执行的目标程序还需要一些其他程序。
- 一个源
来源:CSDN
作者:fgh431
链接:https://blog.csdn.net/zhoutianzi12/article/details/101508426