编译程序的构造方法很多,但都必须掌握如下三个方面作为前提,它们是:
(1)源语言。这是编译程序处理的对象,如FORTRAN、Pascal和C等。对被编译的源语言要深刻理解其词法、语法和语义规则,以及有关的约束和特点。
(2)目标语言与目标机。这是编译程序处理的结果和运行环境。由于目标语言是汇编语言或机器语言,因此,必须对硬件系统结构、操作系统功能、指令系统等十分清楚。
(3)编译方法与工具。这是生成编译程序的关键。必须准确掌握把用一种语言编写的程序翻译为用另一种语言书写的程序的方法之一,同时应考虑所使用的方法与既定的源语言和目标语言是否相符、构造是否方便、时空是否高效、方案是否可行以及代价是否合算等诸多因素,并尽可能地使用已有的、易用的生成工具。
构造编译程序可以采用任意一种语言来实现。早期时候,受条件限制,人们只能用机器语言或汇编语言进行手工编写。目前,为了充分发挥硬件资源的效率,满足各种不同的要求,许多人依然采用低级语言编写编译程序。然而,由于编译程序本身十分复杂,用低级语言编写效率较低,因此,现在越来越多的人使用高级语言来编写编译程序,从而节省了大量的编程时间,并且程序具有易读、易修改和便于移植的优点。概括起来,编译程序的构造方法主要有以下5种:
(1)直接用机器语言或汇编语言编写。常用于编译程序核心代码的编写。
(2)用高级语言编写编译程序。这是最普遍的方法。(www.xing528.com)
(3)自编译(自展)方式。先对语言的核心部分构造一个小小的编译程序(可以用低级语言来实现),再以它为工具构造一个能够编译更多语言成分的较大的编译程序,如此扩展下去,就像滚雪球一样,越滚越大,最终形成人们所期望的整个编译程序。
(4)用编译工具自动生成部分或整个程序。有些工具能用于自动产生扫描器(如LEX),有些可用于自动产生语法分析器(如YACC),有些甚至可用来产生整个编译程序,这些都是以对源程序和目标语言(或机器)的形式描述作为输入来自动产生编译程序的。
(5)移植。将某种语言的编译程序从一种类型的机器转移到另一种类型的机器上并能正常运行的过程。
编译程序是一个复杂的大型系统软件,其开发过程必须遵循软件工程的思想和方法,本书后续章节的安排正是按照这一原则,采用自顶向下、逐步求精的方法逐步展开的。事实证明,学习编译技术最好的方法就是理论与实践相结合,因此,本书除了按照1.2节所说的编译过程的各个阶段来逐步讲解编译程序的基本原理、方法和技术外,还将一个自定义的小型编译器的实现过程贯穿其中。这样做不仅使得每章内容自成体系,首尾呼应,从基本原理的描述到相应代码的实现均囊括其中,而且能够使读者学完本书后即可达到完整实现一个小型编译器的目的,从而使理论学习与实践应用很好地融为一体,这才是编译技术这门课的最终目的和要求。
鲸书
龙书
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。