熱管換熱器

[拼音]:fanyi chengxu

[英文]:translator

把一種程式設計語言所寫的程式翻譯成與之等價的另一種程式設計語言所表示的程式的軟體。被翻譯的程式稱為源程式,書寫源程式所用的程式設計語言稱為源語言。相應地,翻譯程式翻譯出的程式稱為目標程式(或結果程式),用於構成目標程式所用的語言稱為目標語言(或結果語言)。

翻譯程式最初是為了解決計算機不能直接執行程式設計語言所描述的程式而研製的。至今,這仍是翻譯程式的主要用途。但是,隨著計算機應用範圍的不斷擴大,又相繼出現了各種型別的翻譯程式,有的用於研製和除錯新的軟體,有的用於分析、移植和模擬已有的軟體。

典型的實現途徑

為了使計算機能執行程式設計語言所描述的程式,翻譯程式有兩種典型的實現途徑,一種稱為生成性途徑,另一種稱為解釋性途徑。生成性途徑(圖中a)的基本思想,是先由翻譯程式把源程式靜態地翻譯為目標程式(通常是機器語言程式),然後再由計算機執行目標程式,並利用輸入資料產生所需的輸出結果。這種實現途徑劃分為兩個明顯的階段,前一階段稱為生成階段,後一階段稱為執行階段。為了支援目標程式在執行階段執行,通常要配置各種各樣的子程式(如記憶體動態分配子程式、陣列元素地址計運算元程式等)。這些子程式的全體稱為執行程式。解釋性實現途徑(圖中 b)的基本思想,是按照源程式中語句的動態執行順序逐句翻譯,並立即予以執行。這種實現途徑是將源程式的翻譯和執行合併成一個解釋階段完成。兩種實現途徑相比,生成性途徑能多遍掃視和加工源程式,翻譯出執行效率較高的目標程式,但缺點是靈活性較差,且演算法較繁,不易實現;相反,解釋性途徑易於實現,且能靈活地插入各種除錯措施和動態修改源程式的功能,其缺點是重複執行的語句要多次重複翻譯,執行效率較差。生成性途徑適用於以加工和計算為主、要求高效執行的場合,通常用於實現面向過程的程式設計語言(如FORTRAN、ALGOL、COBOL、PL/1、PASCAL)的翻譯程式,一般在成批處理方式下工作。解釋性途徑適用於以研究、除錯和修改程式為主的場合,通常用於實現各種互動會話式語言(如BASIC、APL)的翻譯程式。

具體實現翻譯程式時,其實現途徑可有多種變形:有的只有生成階段,而無執行階段;有的要經歷多個生成階段,再轉入執行階段;還有一些是在生成階段後用解釋階段替代執行階段。

常用的翻譯程式

基於實現途徑,翻譯程式有生成性和解釋性之分。對於生成性翻譯程式,如果源語言是某一高階程式設計語言,目標語言是某一計算機(或計算機族)的組合語言或機器語言,則這種翻譯程式特稱為編譯程式。如果源語言是某一計算機的組合語言,目標語言是相應計算機的機器語言,則這種翻譯程式稱為彙編程式。當執行目標程式的計算機記憶體較小,難以支援翻譯程式執行(如單板機),或其程式研製環境較差不易研製系統軟體或應用軟體(如向量計算機)時,一種較為有效的辦法是在一臺研製環境較好的計算機上,配置一個能產生目標機的機器語言程式的編譯程式或彙編程式。這種在某臺計算機上執行,產生另一臺計算機的機器語言程式的編譯程式或彙編程式,稱之為交叉編譯程式(或交叉彙編程式)。與編譯程式和彙編程式的翻譯過程相反,如果源語言是某一計算機的組合語言或機器語言,而目標語言是某種高階程式設計語言,則這種翻譯程式稱為相應高階程式設計語言的逆編譯程式(或反編譯程式)。如果源語言是某一計算機的機器語言,而目標語言是相應計算機的組合語言,則這種翻譯程式稱為逆彙編程式(或反彙編程式)。逆編譯程式或逆彙編程式通常在剖析只有目標程式的軟體的內部結構和實現演算法時,或是在除錯目標程式需要給出源程式一級上的除錯資訊時使用。對於解釋性途徑,一般將解釋性翻譯程式簡稱為解釋程式。

翻譯程式編寫系統 (TWS)

凡有助於減輕編寫翻譯程式(包括編譯程式、解釋程式、彙編程式)工作的任何軟體系統或一組軟體系統,統稱為翻譯程式編寫系統,如產生式語言的編譯程式和自動分析語法的構造程式等。設計這種系統的目的,在於簡化翻譯程式的實現。這種系統包含很多翻譯程式所必須執行的各種基本操作,如建立、查詢符號表操作,生成目的碼操作等。

翻譯程式編寫系統可歸納為三類:

(1)自動產生編譯程式的“編譯程式的編譯程式”。只要給出某一高階程式設計語言的語法規則和語義描述,這些程式即能自動地產生相應語言的編譯程式。

(2)面向語法的符號加工程式。這些程式比較通用,可用於表示式的符號化簡、資料格式的轉換、把一種高階語言翻譯為另一種高階語言等。

(3)由可擴充語言組成的集合,允許程式設計師利用已有的資料型別和語句去定義新的資料型別和語句。

如果沒有可供使用的翻譯程式編寫系統時,可採用自展法實現語言的編譯程式。自展法的基本思想,是先對語言選擇一小子集語言並用組合語言或機器語言寫出其編譯程式;然後,利用這個小子集語言及其編譯程式,編寫併產生更大子集語言的編譯程式;如此重複,經過一系列的擴充步驟,最後產生出最初語言的編譯程式。

參考書目

D. Gries, CompilerConstructionforDigital Computers, Wiley, New York,1971.