• <u id="saeeq"><wbr id="saeeq"></wbr></u>
  • <s id="saeeq"><div id="saeeq"></div></s>
  • <u id="saeeq"></u>
  • <u id="saeeq"><noscript id="saeeq"></noscript></u>
  • <s id="saeeq"></s>
  • 編譯系統

    文章來源:  |  發布時間:2009-09-02  |  【打印】 【關閉

      

    為了能在計算機上運行高級語言編寫的程序,就必須將高級語言書寫的程序翻譯成等價的機器語言程序或匯編語言程序,這種處理系統稱為編譯系統。

    編譯系統以高級語言書寫的程序作為輸入,稱之為源程序(source program);而以機器語言或匯編語言表示的程序作為輸出,稱為目標程序(target program)。其最終任務是產生一個可在具體計算機上執行的目標程序。執行目標程序將是按照用戶在源程序中所規定的意圖,加工初始數據,算出所需結果或完成所希望的加工處理任務。源程序中的每個語句與目標程序中的指令通常是一對多的對應關系,所以編譯系統的實現算法較為復雜。

    編譯系統的工作過程是先分析,后綜合。必須先分析源程序。源程序分析是經過詞法分析、語法分析和語義分析三個步驟完成的,目的是檢查源程序的語法和語義的正確性,把源程序分解成一系列的基本組成成分。為此,編譯系統要在分析階段建立符號表、常數表和中間語言程序等數據結構,以便在分析和綜合時引用和加工。綜合過程通常包括存儲分配、代碼優化和代碼生成等幾個步驟,目的是為源程序的常數、變量、數組、函數等數據結構分配存儲空間,重新組織分析階段產生的基本組成成分,將其綜合成高效的可執行的目標程序。

    編譯系統在邏輯上由分析和綜合兩大部分組成,并可進一步細分為詞法分析、語法分析、語義分析、存儲分配、代碼優化和代碼生成六個相繼的邏輯步驟。具體設計和實現編譯系統時,通常是按照從頭到尾掃視源程序(或其等價的中間語言程序)的遍數來規劃編譯系統的結構,安排相關邏輯步驟的工作。

    編譯系統的一般結構如圖所示。

     

      例如,可以把詞法分析作為第一遍;語法分析和語義分析作為第二遍;存儲分配和代碼優化作為第三遍;代碼生成作為第四遍。為了適應較小的內存加工空間或提高目標程序質量,也可以把一個邏輯步驟的工作分為幾遍去完成。例如,代碼優化可劃分為代碼優化準備和實際代碼優化兩遍來完成,也有分為源代碼優化和目標代碼優化的。究竟采用多少遍的編譯結構,應根據計算機的規模大小、程序設計語言的繁簡和特點、目標程序的質量要求,以及設計任務時間長短和人員的多少等具體情況而定。

      對于跨平臺網絡語言Java編寫的程序,先創建一個以java為后綴的文件,編譯后得到一個以class為后綴的字節碼文件,該文件是由Java虛擬機指令所組成,然后由Java虛擬機解釋執行或編譯。

      源程序可以交叉編譯,即在一臺計算機上編譯出用于另一臺計算機的目標程序,這在研制新計算機時常采用。源程序的不同部分還可分離編譯。

      編譯階段所輸出的代碼除了需引用外部數據和子程序的地方,其余的可執行程序幾乎都以最終形式出現。這些代碼中的不完全處都被詳細列入由編譯系統所生成的附加裝載表中。然后由連接裝入程序(或連接編輯程序)將各種已編譯的代碼段放入內存之中,亦在需要的時候運用附加裝載表,通過將數據和子程序地址填入代碼中,將它們正確地連接,從而產生最終可執行程序。

       軟件人員進行程序開發時通常還需要一些其它工具,如:編輯程序,連接程序,調試程序等等。編譯系統與這些程序設計工具一起構成所謂的程序設計環境。其中,編譯系統起著核心的作用,連接程序、調試程序、程序分析工具直接依賴于編譯系統新產生的結果,而其它工具的構造也常常要用到編譯的原理、方法和技術。

  • <u id="saeeq"><wbr id="saeeq"></wbr></u>
  • <s id="saeeq"><div id="saeeq"></div></s>
  • <u id="saeeq"></u>
  • <u id="saeeq"><noscript id="saeeq"></noscript></u>
  • <s id="saeeq"></s>
  • 久久久综合香蕉尹人综合网