編譯程式
將某一種程式設計語言寫的程式翻譯成等價的另一種語言的程式的程式, 稱之為編譯程式(compiler) .
詞法分析
詞法分析的任務是對由
字元組成的單詞進行處理,從左至右逐個字元地對源
程式進行掃描,產生一個個的單詞符號,把作為字元串的
源程式改造成為單詞符號串的中間程式。執行詞法分析的
程式稱為詞法
分析程式或掃描器。
源程式中的單詞符號經掃描器分析,一般產生二元式:單詞種別;單詞自身的值。單詞種別通常用整數編碼,如果一個種別只含一個單詞符號,那么對這個單詞符號,種別編碼就完全代表它自身的值了。若一個種別含有許多個單詞符號,那么,對於它的每個單詞符號,除了給出種別編碼以外,還應給出自身的值。
詞法分析器一般來說有兩種方法構造:手工構造和自動生成。手工構造可使用
狀態圖進行工作,自動生成使用確定的有限
自動機來實現。
語法分析
語法分析的方法分為兩種:自上而下分析法和自下而上分析法。自上而下就是從文法的開始符號出發,向下推導,推出句子。而自下而上分析法採用的是移進
歸約法,基本思想是:用一個暫存符號的先進後
出棧,把輸入符號一個一個地移
進棧里,當棧頂形成某個產生式的一個候選式時,即把棧頂的這一部分歸約成該產生式的左鄰符號。
中間代碼
代碼最佳化
有兩類最佳化:一類是對
語法分析後的
中間代碼進行最佳化,它不依賴於具體的計算機;另一類是在生成
目標代碼時進行的,它在很大程度上依賴於具體的計算機。對於前一類最佳化,根據它所涉及的
程式範圍可分為局部最佳化、循環最佳化和全局最佳化三個不同的級別。
目標代碼
② 待裝配的
機器語言模組,當需要執行時,由連線裝入
程式把它們和某些運行
程式連線起來,轉換成能執行的機器語言代碼;
目標代碼生成階段應考慮直接影響到目標代碼速度的三個問題:一是如何生成較短的目標代碼;二是如何充分利用計算機中的暫存器,減少目標代碼訪問
存儲單元的次數;三是如何充分利用計算機
指令系統的特點,以提高目標代碼的質量。
表格管理
編譯過程中
源程式的各種信息被保留在種種不同的表格,編譯各階段的工作都涉及到
構造、查找、或更新有關的表格。
編譯程式的公共輔助部分。對源程式中的各種量進行管理,登記在相應的表格。編譯程式處理時通過查表得到所需的信息。
出錯處理
如果編譯過程中發現
源程式有錯誤,
編譯程式應報告錯誤的性質和錯誤的發生的地點,並且將錯誤所造成的影響限制在儘可能小的範圍內,使得源程式的其餘部分能繼續被編譯下去,有些編譯程式還能自動糾正錯誤,這些工作由錯誤處理程式完成。
需要注意的是,一般上
編譯器只做
語法檢查和最簡單的語義檢查,而不檢查
程式的邏輯。