定義
編譯程式詞組可以有兩種認識。一、編譯程式是一種動作,是根據編譯原理技術,由高級程式設計語言編譯器翻譯成機器語言二進制代碼行為。
二、編譯程式是動名詞,特指生成編譯器的軟體程式。
簡介
編譯程式的實現算法較為複雜。這是因為它所翻譯的語句與目標語言的指令不是一一對應關係,而是一多對應關係;同時也因為它要處理遞歸調用、動態存儲分配、多種數據類型,以及語句間的緊密依賴關係。但是,由於高級程式設計語言書寫的程式具有易讀、易移植和表達能力強等特點,編譯程式廣泛地用於翻譯規模較大、複雜性較高、且需要高效運行的高級語言書寫的源程式。功能
編譯程式早期編譯程式的實現方案,是把上述各項功能完全收納在編譯程式之中。然而,習慣做法是在作業系統的支持下,配置調試程式、編輯程式和連線裝配程式,用以協助實現程式的調試、修改、覆蓋處理,以及不同語言合用功能。但在設計編譯程式時,仍須精心考慮如何與這些子系統銜接等問題。
工作過程
編譯程式必須分析源程式,然后綜合成目標程式。首先,檢查源程式的正確性,並把它分解成若干基本成分;其次,再根據這些基本成分建立相應等價的目標程式部分。為了完成這些工作,編譯程式要在分析階段建立一些表格,改造源程式為中間語言形式,以便在分析和綜合時易於引用和加工(圖1)。數據結構分析和綜合時所用的主要數據結構,包括符號表、常數表和中間語言程式。符號表由源程式中所用的標識符連同它們的屬性組成,其中屬性包括種類(如變數、數組、結構、函式、過程等)、類型(如整型、實型、字元串、復型、標號等),以及目標程式所需的其他信息。常數表由源程式中用的常數組成,其中包括常數的機內表示,以及分配給它們的目標程式地址。中間語言程式是將源程式翻譯為目標程式前引入的一種中間形式的程式,其表示形式的選擇取決於編譯程式以後如何使用和加工它。常用的中間語言形式有波蘭表示、三元組、四元組以及間接三元組等。分析部分
源程式的分析是經過詞法分析、語法分析和語義分析三個步驟實現的。詞法分析由詞法分析程式(又稱為掃描程式)完成,其任務是識別單詞(即標識符、常數、保留字,以及各種運算符、標點符號等)、造符號表和常數表,以及將源程式換碼為編譯程式易於分析和加工的內部形式。語法分析程式是編譯程式的核心部分,其主要任務是根據語言的語法規則,檢查源程式是否合乎語法。如不合乎語法,則輸出語法出錯信息;如合乎語法,則分解源程式的語法結構,構造中間語言形式的內部程式。語法分析的目的是掌握單詞是怎樣組成語句的,以及語句又是如何組成程式的。語義分析程式是進一步檢查合法程式結構的語義正確性,其目的是保證標識符和常數的正確使用,把必要的信息收集和保存到符號表或中間語言程式中,並進行相應的語義處理。綜合部分
綜合階段必須根據符號表和中間語言程式產生出目標程式,其主要工作包括代碼最佳化、存儲分配和代碼生成。代碼最佳化是通過重排和改變程式中的某些操作,以產生更加有效的目標程式。存儲分配的任務是為程式和數據分配運行時的存儲單元。代碼生成的主要任務是產生與中間語言程式符等價的目標程式,順序加工中間語言程式,並利用符號表和常數表中的信息生成一系列的彙編語言或機器語言指令。結構
編譯程式一個編譯程式是否分遍,以及如何分遍,根據具體情況而定。其判別標準可以是存儲容量的大小、源語言的繁簡、解題範圍的寬窄,以及設計、編制人員的多少等。分遍的好處是各遍功能獨立單純、相互聯繫簡單、邏輯結構清晰、最佳化準備工作充分。缺點是各遍之中不可避免地要有些重複的部分,而且遍和遍之間要有交接工作,因之增加了編譯程式的長度和編譯時間。
一遍編譯程式是一種極端情況,整個編譯程式同時駐留在記憶體,彼此之間採用調用轉接方式連線在一起(圖2)。當語法分析程式需要新符號時,它就調用詞法分析程式;當它識別出某一語法結構時,它就調用語義分析程式。語義分析程式對識別出的結構進行語義檢查,並調用“存儲分配”和“代碼生成”程式生成相應的目標語言指令。隨著程式設計語言在形式化、結構化、直觀化和智慧型化等方面的發展,作為實現相應語言功能的編譯程式,也正向自動程式設計的目標發展,以便提供理想的程式設計工具。

