將高級(jí)語言書寫的程序翻譯成等價(jià)的機(jī)器語言或匯編語言程序的處理系統(tǒng)。
編譯程序以高級(jí)語言書寫的程序作為輸入,稱為源程序;而以機(jī)器語言或匯編語言表示的程序作為輸出,稱為目標(biāo)程序。
源程序中的每個(gè)語句與目標(biāo)程序中的指令通常是一多對(duì)應(yīng)關(guān)系,所以編譯程序的實(shí)現(xiàn)算法較為復(fù)雜,但它可以產(chǎn)生高效運(yùn)行的目標(biāo)程序,因此更適合翻譯規(guī)模較大、結(jié)構(gòu)較為復(fù)雜、運(yùn)行時(shí)間較長(zhǎng)的大型應(yīng)用程序。
編譯程序首先分析源程序,然后綜合成目標(biāo)程序。分析階段要建立符號(hào)表、常數(shù)表和中間語言程序等數(shù)據(jù)結(jié)構(gòu),以便在分析和綜合時(shí)引用和加工(圖1)。
圖1 編譯程序工作過程示意圖
源程序的分析經(jīng)過詞法分析、語法分析和語義分析3個(gè)步驟完成高級(jí)語言源程序要經(jīng)過,目標(biāo)程序的綜合包括存儲(chǔ)分配、代碼優(yōu)化、代碼生成等步驟。
實(shí)現(xiàn)編譯程序時(shí),通常按照從頭到尾掃視源程序(或其等價(jià)的中間語言程序)的遍數(shù)來規(guī)劃編譯程序的結(jié)構(gòu),安排相關(guān)邏輯步驟的工作。
每一遍可以按順序執(zhí)行方式或并行調(diào)用方式,完成一個(gè)或相連幾個(gè)邏輯步驟的工作。
例如,可以把詞法分析作為第一遍,語法分析和語義分析作為第二遍,存儲(chǔ)分配和代碼優(yōu)化作為第三遍高級(jí)語言源程序要經(jīng)過,代碼生成作為第四遍。
反之,為了適應(yīng)較小的內(nèi)存空間或提高目標(biāo)程序質(zhì)量,也可以把一個(gè)邏輯步驟的工作分成幾遍去完成。
例如,代碼優(yōu)化可分為代碼優(yōu)化準(zhǔn)備和實(shí)際代碼優(yōu)化兩遍來完成。
一遍編譯程序是一種極端的情況,整個(gè)編譯程序同時(shí)駐留在內(nèi)存,彼此之間采用調(diào)用轉(zhuǎn)接方式連接在一起工作(圖2)。
圖2 一遍編譯程序
當(dāng)語法分析程序需要新符號(hào)時(shí),就調(diào)用詞法分析程序;當(dāng)識(shí)別出某一語法結(jié)構(gòu)時(shí),就調(diào)用語義分析程序進(jìn)行語義檢查,并調(diào)用存儲(chǔ)分配和代碼生成程序生成相應(yīng)的目標(biāo)語言的指令序列。
隨著高級(jí)語言在形式化、結(jié)構(gòu)化、智能化和形象化等方面的發(fā)展,作為實(shí)現(xiàn)相應(yīng)語言功能的編譯程序,也隨之向自動(dòng)程序設(shè)計(jì)和形象化程序設(shè)計(jì)的方向發(fā)展,為用戶提供更加理想的程序設(shè)計(jì)工具。
摘自:《中國(guó)大百科全書(第2版)》第2冊(cè),中國(guó)大百科全書出版社,2009年