本文共 1249 字,大约阅读时间需要 4 分钟。
本节书摘来自华章出版社《编译与反编译技术实战 》一书中的第2章,第2.2节,庞建民 主编 ,刘晓楠 陶红伟 岳 峰 戴超 编著,更多章节内容可以访问云栖社区“华章计算机”公众号查看。
目前常用的程序设计语言都已经有很多优秀的编译器,比如C语言有GCC和ICC、C++有G++和I++、Java有JAVAC和GCJ。然而,即使这些常用的程序设计语言,其本身也一直在改变,即不断地完善。因而,实现这些程序设计语言的编译器也需要做出相应的改动。对于程序设计语言自身的改变,有的是为了弥补自身的一些缺陷,如Java语言从设计至今,其体积已经增大了好几倍;有的是为了适应新的软件开发需求,比如为了更容易地开发大型软件等而进行的改善。
除了那些成熟语言的改动会带来编译器软件编程的需要外,新语言的诞生也需要程序员来完成新语言的编译器实现工作。比如,现在不断涌现的各种脚本语言都需要编译器程序员来编写这些语言的编译器或解释器。对于新语言的发明,有的是为了适应特殊领域的编程需要,比如SQL(Structured Query Language)是为关系数据库管理系统专门设计的专用语言;有的是为了更好地利用各种系统资源(尤其是硬件资源),比如OpenCL(Open Computing Language)是为了更好地开发异构平台的计算能力。作为高级语言到目标代码的翻译软件(或者不同语言间的翻译软件)的编译器,对它的编程需求一直都存在。也就是说,总有实现新的编译器或者改动现有编译器的需求存在。不同的编译器虽然实现方式各异,但编译器的结构却非常相似,通常是按照编译过程的各个阶段来实现相关的程序模块。编译过程中每个阶段工作的逻辑关系如图2-1所示,图中的每个阶段的工作由相关程序模块承担,但其中的符号表管理程序和错误处理程序则贯穿编译过程的各个阶段。这些程序模块构成了编译器的基本结构。转载地址:http://dqmrx.baihongyu.com/