詞法分析的任務是:輸入源程式,對構成源程式的字串進行掃瞄和分解,識別出乙個個的單詞(亦稱單詞符號或簡稱符號),如基本字(begin、end、if、for、while),識別符號、常數、運算子和界符(標點符號、左右括號)。
單詞符號是語言的基本組成成分,是人們理解和編寫程式的基本要素。識別和理解這些要素無疑也是翻譯的基礎。如同將英文翻譯成中文的情形一樣,如果你對英語單詞不理解,那就談不上進行正確的翻譯。在詞法分析階段的工作中所依循的是語言的詞法規則(或稱構詞規則)。描述詞法規則的有效工具是正規式和有效自動機。
語法分析的任務是:在詞法分析的基礎上,根據語言的語法規則,把單詞符號串分解成各類語法單位(語法範疇),如「短語」、「句子」、「程式段」和「程式」等。通過語法分析,確定整個輸入串是否構成語法上正確的「程式」。語法分析所依循的是語言的語法規則。語法規則通常用上下文無關文法描述。詞法分析是一種線性分析,而語法分析是一種層次結構分析。例如:
z = x + 0.618 * y;
代表乙個「賦值語句」,而其中的x + 0.618 * y 代表乙個「算術表示式」。因而,語法分析的任務就是識別x + 0.618 * y為算術表示式,同時,十倍上述整個符號串屬於賦值語句這個範疇。
這一階段的任務是:對語法分析所識別出的各類語法範疇,分析其含義,並進行初步翻譯(產生中間**)。這一階段通常包含兩個方面的工作。首先,對每種語法範疇進行語義i安插,例如,變數是否定義、型別是否正確等等。如果語義正確,則進行另一方面工作,即進行中間**的解釋。這一階段所依循的是語言的語義規則。通常使用屬性文法描述語義規則。
「翻譯」僅僅在這裡才開始涉及到。所謂「中間**」是一種含義明確、便於處理的記號系統,它通常獨立於具體的硬體。這種記號系統或者與現代計算機的指令形式有某種程度的接近,或者能夠比較容易地把它變換成現代計算機的機器指令。
優化的任務在於對前段產生的中間**進行加工變換,以期在最後階段能產生出更為高效(省時間和空間)的目標**。優化的主要方面有:公關子表示式的提取、迴圈優化、刪除無用**等等。有時,為了便於「並行運算」,還可以對**進行並行化處理。優化所依循的原則是程式的等價變換規則。
這一階段的任務是:把中間**(或經優化處理之後)變換成特定機器上的低階語言**。這階段實現了最後的翻譯,它的工作有賴於硬體系統結構和機器指令含義。這階段工作非常複雜,設計到硬體系統功能部件的運用,機器指令的選擇,各種資料型別變數的儲存空間分配,以及暫存器和後援暫存器的排程,等等。
另:程式語言(如j**e)的詞法分析主要依靠有限狀態自動機。
編譯程式的五個階段
第一階段 詞法分析 任務是輸入源程式,對構成源程式的字串進行掃瞄和分析,識別出乙個個的單詞。第二階段 語法分析 任務是在詞法分析的基礎上,根據語言的語法規則,把單詞符號串分解成各類語法單位 語法範疇 如 短語 句子 程式段 和 程式 等。詞法分析和語法分析本質都是對源程式的結構進行分析。第三階段 詞...
GCC編譯過程的4個階段
在使用gcc編譯程式時,其編譯過程可以分為4個階段 預處理 pre processing 編譯 compling 彙編 assembling 連線 linking 程式設計師完全可以根據自己的需要讓gcc在編譯的任何乙個階段結束,檢查活使用編譯起在該階段輸出的資訊,或者對其生成的二進位制檔案進行控制...
檔案編譯執行的4個階段
c 語言檔案的編譯的4個階段 源 c cpp檔案 1.預編譯階段 操作符 gcc e 預處理器在源 上執行一些文字操作。例如,用實際值代替由 define指令定義的符號以及讀入由 include指令包含的檔案內容。2.編譯階段 操作符 gcc s 源 經過解析,判斷它的意思。這個階段是產生絕大多數錯...