編譯程序的作用是把某高級語言書寫的源程序翻譯成與之等價的目標程序。
? ? ? ?? ? ? ?
1、編譯過程
1.1 詞法分析
編譯過程的第一階段主要任務是對源程序從前往后(從左往右)逐個字符掃描,從中識別出一個個單詞符號。“單詞”是程序設計語言的基本語法單位,如關鍵字、標識符等。
1.2 語法分析
語法分析的任務是在詞法分析的基礎上,根據語言的語法規則將單詞符號序列分解成各類語法單位,比如表達式、語句。
語法規則是各類語法單位的構成規則。
詞法分析和語法分析的本質都是對源程序的結構進行分析。
1.3 語義分析
語義分析階段分析各語法的含義,檢查源程序是否包含靜態語義錯誤,并收集類型信息供后面的代碼生成階段使用。只有語法和語義都正確的源程序才能正確翻譯成目標程序。
語義分析的主要工作進行類型分析和檢查。
1.4 中間代碼生成
中間代碼生成階段的主要任務是工作是根據語義分析的輸出生成中間代碼。最常用的中間代碼是與匯編語法的指令非常相似的三地址碼,常采用四元式。
格式為:(運算符,運算對象1,運算對象2,運算結果)
語義分析和中間代碼的依據是語言的語義規則。
1.5 代碼優化
由于編譯器翻譯中間代碼的過程是機械式的、固定模式進行的,因此生成的中間代碼往往在時間上、空間方面效率較差。如果需要生成高效率的目標代碼,就必須進行優化。
1.6 目標代碼生成
主要任務是把中間代碼變換成特定機器上的絕對指令代碼、可重定位的指令代碼或匯編指令代碼。
1.7 符號表管理
符號表的作用是記錄源程序中各符號的必要信息,用來輔助語義的正確檢查和代碼生成。
1.8 出錯處理
源程序不可避免會出現一些錯誤。分為兩類:靜態錯誤和動態錯誤。
靜態錯誤:編譯階段發現的錯誤。比如:單詞拼寫錯誤、標點符號錯誤。
動態錯誤:在程序運行時發生的錯誤。比如 零做除數等。