什么是翻译程序?

什么是翻译程序?,第1张

什么是翻译程序?

[拼音]:fanyi chengxu

[外文]:translator

把一种程序设计语言所写的程序翻译成与之等价的另一种程序设计语言所表示的程序的软件。被翻译的程序称为源程序,书写源程序所用的程序设计语言称为源语言。相应地,翻译程序翻译出的程序称为目标程序(或结果程序),用于构成目标程序所用的语言称为目标语言(或结果语言)。

翻译程序最初是为了解决计算机不能直接执行程序设计语言所描述的程序而研制的。至今,这仍是翻译程序的主要用途。但是,随着计算机应用范围的不断扩大,又相继出现了各种类型的翻译程序,有的用于研制和调试新的软件,有的用于分析、移植和模拟已有的软件。




典型的实现途径

为了使计算机能执行程序设计语言所描述的程序,翻译程序有两种典型的实现途径,一种称为生成性途径,另一种称为解释性途径。生成性途径(图中a)的基本思想,是先由翻译程序把源程序静态地翻译为目标程序(通常是机器语言程序),然后再由计算机执行目标程序,并利用输入数据产生所需的输出结果。这种实现途径划分为两个明显的阶段,前一阶段称为生成阶段,后一阶段称为运行阶段。为了支持目标程序在运行阶段运行,通常要配置各种各样的子程序(如内存动态分配子程序、数组元素地址计算子程序等)。这些子程序的全体称为运行程序。解释性实现途径(图中 b)的基本思想,是按照源程序中语句的动态执行顺序逐句翻译,并立即予以执行。这种实现途径是将源程序的翻译和运行合并成一个解释阶段完成。两种实现途径相比,生成性途径能多遍扫视和加工源程序,翻译出运行效率较高的目标程序,但缺点是灵活性较差,且算法较繁,不易实现;相反,解释性途径易于实现,且能灵活地插入各种调试措施和动态修改源程序的功能,其缺点是重复执行的语句要多次重复翻译,运行效率较差。生成性途径适用于以加工和计算为主、要求高效运行的场合,通常用于实现面向过程的程序设计语言(如FORTRAN、ALGOL、COBOL、PL/1、PASCAL)的翻译程序,一般在成批处理方式下工作。解释性途径适用于以研究、调试和修改程序为主的场合,通常用于实现各种交互会话式语言(如BASIC、APL)的翻译程序。

具体实现翻译程序时,其实现途径可有多种变形:有的只有生成阶段,而无运行阶段;有的要经历多个生成阶段,再转入运行阶段;还有一些是在生成阶段后用解释阶段替代运行阶段。

常用的翻译程序

基于实现途径,翻译程序有生成性和解释性之分。对于生成性翻译程序,如果源语言是某一高级程序设计语言,目标语言是某一计算机(或计算机族)的汇编语言或机器语言,则这种翻译程序特称为编译程序。如果源语言是某一计算机的汇编语言,目标语言是相应计算机的机器语言,则这种翻译程序称为汇编程序。当运行目标程序的计算机内存较小,难以支持翻译程序运行(如单板机),或其程序研制环境较差不易研制系统软件或应用软件(如向量计算机)时,一种较为有效的办法是在一台研制环境较好的计算机上,配置一个能产生目标机的机器语言程序的编译程序或汇编程序。这种在某台计算机上运行,产生另一台计算机的机器语言程序的编译程序或汇编程序,称之为交叉编译程序(或交叉汇编程序)。与编译程序和汇编程序的翻译过程相反,如果源语言是某一计算机的汇编语言或机器语言,而目标语言是某种高级程序设计语言,则这种翻译程序称为相应高级程序设计语言的逆编译程序(或反编译程序)。如果源语言是某一计算机的机器语言,而目标语言是相应计算机的汇编语言,则这种翻译程序称为逆汇编程序(或反汇编程序)。逆编译程序或逆汇编程序通常在剖析只有目标程序的软件的内部结构和实现算法时,或是在调试目标程序需要给出源程序一级上的调试信息时使用。对于解释性途径,一般将解释性翻译程序简称为解释程序。

翻译程序编写系统 (TWS)

凡有助于减轻编写翻译程序(包括编译程序、解释程序、汇编程序)工作的任何软件系统或一组软件系统,统称为翻译程序编写系统,如产生式语言的编译程序和自动分析语法的构造程序等。设计这种系统的目的,在于简化翻译程序的实现。这种系统包含很多翻译程序所必须执行的各种基本 *** 作,如建立、查找符号表 *** 作,生成目标代码 *** 作等。

翻译程序编写系统可归纳为三类:

(1)自动产生编译程序的“编译程序的编译程序”。只要给出某一高级程序设计语言的语法规则和语义描述,这些程序即能自动地产生相应语言的编译程序。

(2)面向语法的符号加工程序。这些程序比较通用,可用于表达式的符号化简、数据格式的转换、把一种高级语言翻译为另一种高级语言等。

(3)由可扩充语言组成的集合,允许程序员利用已有的数据类型和语句去定义新的数据类型和语句。

如果没有可供使用的翻译程序编写系统时,可采用自展法实现语言的编译程序。自展法的基本思想,是先对语言选择一小子集语言并用汇编语言或机器语言写出其编译程序;然后,利用这个小子集语言及其编译程序,编写并产生更大子集语言的编译程序;如此重复,经过一系列的扩充步骤,最后产生出最初语言的编译程序。

参考书目
    D. Gries, Compiler Construction for Digital Computers, Wiley, New York,1971.

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/4714838.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-07
下一篇 2022-11-07

发表评论

登录后才能评论

评论列表(0条)

保存