回覆列表
  • 1 # 使用者816380659762

    資料結構分析和綜合時所用的主要資料結構,包括符號表、常數表和中間語言程式。符號表由源程式中所用的識別符號連同它們的屬性組成,其中屬性包括種類(如變數、陣列、結構、函式、過程等)、型別(如整型、實型、字串、復型、標號等),以及目標程式所需的其他資訊。常數表由源程式中用的常陣列成,其中包括常數的機內表示,以及分配給它們的目標程式地址。中間語言程式是將源程式翻譯為目標程式前引入的一種中間形式的程式,其表示形式的選擇取決於編譯程式以後如何使用和加工它。常用的中間語言形式有波蘭表示、三元組、四元組以及間接三元組等。分析部分源程式的分析是經過詞法分析、語法分析和語義分析三個步驟實現的。詞法分析由詞法分析程式(又稱為掃描程式)完成,其任務是識別單詞(即識別符號、常數、保留字,以及各種運算子、標點符號等)、造符號表和常數表,以及將源程式換碼為編譯程式易於分析和加工的內部形式。語法分析程式是編譯程式的核心部分,其主要任務是根據語言的語法規則,檢查源程式是否合乎語法。如不合乎語法,則輸出語法出錯資訊;如合乎語法,則分解源程式的語法結構,構造中間語言形式的內部程式。語法分析的目的是掌握單詞是怎樣組成語句的,以及語句又是如何組成程式的。語義分析程式是進一步檢查合法程式結構的語義正確性,其目的是保證識別符號和常數的正確使用,把必要的資訊收集和儲存到符號表或中間語言程式中,並進行相應的語義處理。綜合部分綜合階段必須根據符號表和中間語言程式產生出目標程式,其主要工作包括程式碼最佳化、儲存分配和程式碼生成。程式碼最佳化是透過重排和改變程式中的某些操作,以產生更加有效的目標程式。儲存分配的任務是為程式和資料分配執行時的儲存單元。程式碼生成的主要任務是產生與中間語言程式符等價的目標程式,順序加工中間語言程式,並利用符號表和常數表中的資訊生成一系列的組合語言或機器語言指令。結構編譯過程分為分析和綜合兩個部分,並進一步劃分為詞法分析、語法分析、語義分析、程式碼最佳化、儲存分配和程式碼生成等六個相繼的邏輯步驟。這六個步驟只表示編譯程式各部分之間的邏輯聯絡,而不是時間關係。編譯過程既可以按照這六個邏輯步驟順序地執行,也可以按照平行互鎖方式去執行。在確定編譯程式的具體結構時,常常分若干遍實現。對於源程式或中間語言程式,從頭到尾掃視一次並實現所規定的工作稱作一遍。每一遍可以完成一個或相連幾個邏輯步驟的工作。例如,可以把詞法分析作為第一遍;語法分析和語義分析作為第二遍;程式碼最佳化和儲存分配作為第三遍;程式碼生成作為第四遍。反之,為了適應較小的儲存空間或提高目標程式質量,也可以把一個邏輯步驟的工作分為幾遍去執行。例如,程式碼最佳化可劃分為程式碼最佳化準備工作和實際程式碼最佳化兩遍進行。一個編譯程式是否分遍,以及如何分遍,根據具體情況而定。其判別標準可以是儲存容量的大小、源語言的繁簡、解題範圍的寬窄,以及設計、編制人員的多少等。分遍的好處是各遍功能獨立單純、相互聯絡簡單、邏輯結構清晰、最佳化準備工作充分。缺點是各遍之中不可避免地要有些重複的部分,而且遍和遍之間要有交接工作,因之增加了編譯程式的長度和編譯時間。一遍編譯程式是一種極端情況,整個編譯程式同時駐留在記憶體,彼此之間採用呼叫轉接方式連線在一起(圖2)。當語法分析程式需要新符號時,它就呼叫詞法分析程式;當它識別出某一語法結構時,它就呼叫語義分析程式。語義分析程式對識別出的結構進行語義檢查,並呼叫“儲存分配”和“程式碼生成”程式生成相應的目標語言指令。隨著程式設計語言在形式化、結構化、直觀化和智慧化等方面的發展,作為實現相應語言功能的編譯程式,也正向自動程式

  • 中秋節和大豐收的關聯?
  • 有沒有當今足壇無大師的感覺?