通常這樣定義:如果將用語言A編寫的程序,翻譯為一個與之等價的、用語言B描丨述的-程序,則語言A被稱為源語言,所編寫的程序叫源程序,語言B被稱為目標語言,用B描述的程序叫目標程序6如果語言B是用機器代碼表示的機器語言,那麼目標程序就是一些機器指令代碼,稱為目標代碼。
進行翻譯,一方麵要考慮被譯的對象,是何種語言,何種版本;另一方麵要考慮,翻譯後的結果將在何種機器上運行。不言而喻,要在不同型號的計算機上運行不同版本語言的程序,需要不同的語言處理程序。如果說,某機配有BASIC語言,就是指這台機器配有BASIC語言的處理程序。
解釋方式是邊解釋邊執行,為此需要針對某一語言編製解釋程序,作為係統軟件的組成之一。用程序設計語言編寫源程序,輸入計算機後,就啟動執行相應程序。這個解釋郞序的作用是逐步地分析源程序中的語句,按照源程序描述的過程,一個等價的機器語言程序,直到整個源程序部被掃描一遍,並被解釋執行完為止解釋方式的特點是並不產生完整的目標程序,而是局部地;形成等價的子程序,——邊解釋,一邊執行。這有點像口譯外語的情形,邊說邊翻譯。
這種方式一般用於處理像basic這類較易解釋的程序語言,因為這種語言相對要簡單些,可以在取出一條語句之後,或在掃描了一個局部段落後,就能執行一段等效的操作。對於那些前後關聯較多、較難理解的語言。
解釋方式可以支持“會話式程序設計語言”,BASIC就屬於這類語言。所謂會話方式就是人機對話方式,用戶通過鍵盤向計算機輸入命令,或者是提供某些數據信息計算機立即解釋執行,通過顯示屏幕將結果告知用戶,或者提出進一步的詢問,或者針對執行命令後出現的某種狀態給出有關提示;用戶再根據計算機的顯示信息下一步操作,如回答計算機的詢問,或根據計算機提示進行新操作,或輸入新的數據等4這就形成十種人機對話方式,這種方式正是我們所樂意采用的。
在解釋方式中,源程序(即被解釋的程序)的全部信息仍概留在主存之中,因而可以根據解釋的情況,對源程序進行調整和修改。
二、編譯方式
編譯方式是先將源程序全部翻譯成機器語言的目標,執行時,機器將直接執行目標程序,不再需要源程序與翻譯程序。這有點像筆譯,譯出完整的譯文之後,就可以不要原文與譯者了,為此需要一種編譯程序,用高級語言編寫的順程序被當作數據來接收,作為處理的對象經過翻譯轉換,產生機器代碼輸出,再由一個裝配程序作進一步加工,得到目標程序,交由計算機執行與邊解釋邊執行的解釋方式相比,編譯方式是最後讓計算機直接執行月標程序,效率較高,執行速度較快。雖然編譯過程本身也需要花費時間,這往往可以事先安棑的,編譯一次後,所產生的目標程序則可以使用多次。例如我們需要多,次調用一個求解方程的子程序,如果等到每次調用時才來執行顯然很低;一旦事先編譯成目標程序,調用執行就快多了。又如我們編製一個用於某項工程設計的程序,需要對多種方案進行比較,從中找出一個最佳方案,所需的程序往往可以統為一個,隻是每種方案的參數不同。與編譯時間相比,運行時間是主要的采用編譯方式就比較恰當。對計算程序進行編譯後,可讓目標程序多次運行,每次提供不同參數,得到一種設計結果,然後從中挑選出一個最佳方案。
當程序設計語言比較複雜,前後關聯較多時,采用解釋方式處理就會比較困難,而采用編譯方式就比較恰當。因為編譯方式並不是翻譯一段就立即執行一段,它可以對整個源程序進行數次掃描(通常是二次以上),即從頭到尾進行掃視,完整地了解程序中的前後關聯,才產生最後的目標程序。
將彙編語言源程序轉換為機器代碼的目標程序,這個過程也是一種編譯。隻是彙編語言的基本成分與用機器代碼表示的指令,是一對一的關係,一條源語句等價於一條機器指令,編譯起來相對容易些。
有時我們需要將編譯的結果打印出來,進行分析研究。例如在消化剖析一些比較成熟的重要軟件時,就需要得到它的目標程序之本,分析以後才能進行移植,改進與擴充功能,這種工作稱之為二次開發。但是機器代碼很難閱讀,廠家一般又不提供源程序文本。這就需要編製一種反彙編程序,將目標程序的機器代碼反彙編為彙編語言,這就可以閱讀分析。因此,反彙編程序也是一種有用的語言處理程序。