學習了乙個學期的編譯原理,每次上課都認真聽講,今天覆習了乙個上午,下面把我的心得寫出來。
其實這乙個上午,我只看了引論與pl/0編譯程式的實現,才發現其實在上機實驗的時候自己有的時候的想法未免有點膚淺了。
1.編譯程式與解釋程式的區別:
編譯程式的任務是把高階語言源程式翻譯成為目標匯程式設計序,它是把編譯和執行分開進行的,編譯過程中需要對源程式、目標**以及相應的符號表開闢空間,執行階段需要儲存目標**以及資料,優點:對源程式進行編譯,可以對**進行相應的報錯處理或**優化,節省執行時間。
解釋程式不需要先把源程式翻譯成為目標**,也可以讓我們實現在某台機器上面執行程式並生成結果,也就是它接受某個源程式並立即執行它。它的工作模式是分析並執行源程式語句,比較適合程式設計師互動方式的工作情況,希望在獲取下乙個語句之前了解每個語句的執行結果,並且允許執行的時候修改程式。但是缺點:源程式與相應的符號表存放於**區,開銷大,執行慢。
2.前端、後端
3.遍(趟)
這個」遍「指的是對源程式或者其等價的中間**語言程式進行從頭到尾掃視,並完成規定任務的過程。
遍數的確定:1)源語言:對於有些名字說明在使用之後的至少需要2遍
2)目標機:對於一些記憶體較小的機器適合多遍,因為編譯程式少佔的記憶體。
4.編譯程式的各個階段
詞法分析:任務.從左到右乙個乙個字元的讀入源程式,對構成源程式的字元流進行掃瞄和分解,濾空格,識別出乙個乙個的單詞(邏輯上緊緊密相連的一組字元),以pl/0語言為例,這些單詞分為識別符號、關鍵字(保留字)、常數、運算子、界符,並找到相應的關鍵字、運算子、界符的類別編碼存入sym陣列中,找到識別符號、常數的使用者自定義的類別編碼存入sym中及其所對應的值,輸出結果。
語法分析:任務.分析pl/0源程式是否符合其語法規範。讀入詞法分析後的結果,利用遞迴下降分析子程式法來分析語法的正確性,對於每乙個非終結符,我們都為其編寫乙個子程式,按照其語法描述圖的箭頭所指的方向,確定呼叫子程式的呼叫順序,其中如果不符合語法規則有相應的詳細的報錯處理。其他分析方法:ll(1)分析法、算符優先順序分析法、slr(1)分析法、遞迴下降子程式分析法等。
語義分析:任務.對於語法分析正確的程式,我們就要分析其語義是否符合規範,比如%前後只能是整形變數,/後面不能為0,等等。
中間**生成:任務.對於語法語義分析正確的源程式,我們要生成乙個中間**比如四元式,對於語法制導分析方法,表示式的四元式的生成順序和語義值計算的順序是一樣的,先是小括號裡面的,再是*或/,最後+或-,同時,四元式裡面有t1、t2……這些怎麼輸出呢?這就要用到乙個全域性變數k,每次輸出乙個四元式,我們的k+1,並且把已經翻譯過的小的表示式進行處理,把它變成『t『』k+47』,變成字元,每次翻譯到處理過的表示式的時候,直接輸出就可以了,我們可以利用這一點進行寫**。
**優化:任務.對**進行等價變換,使得變換後的**執行結果與變換前的**執行結果相同,但是執行速度加快或占用的儲存空間減小。可以刪除多餘的運算、**外提、強度削弱、合併已知量、迴圈優化、刪除無用賦值等。
**生成:任務.把優化後的中間**轉換為特定的目標機的機器語言或組合語言。涉及到的問題是**生成程式的輸入、指令選擇、暫存器分配。
注:本文純屬自己對編譯原理這門課學過之後的整體的總結,後續會有詳細的編譯程式各個階段所用到的方法的總結介紹。
編譯原理 複習
1 什麼叫編譯程式 高階語言 翻譯為 目標語言 組合語言或機器語言 2 編譯程式的6個階段 1 詞法分析 簡單理解就是掃瞄,很傻瓜式地由頭到尾掃瞄源程式,識別出 單詞 輸出結果是二元組,即 單詞總別,值 2 語法分析 根據語法規則將單詞符號串行分解成各類語法單位,如 表示式 語句 程式 3 語義分析...
編譯原理複習
介紹編譯原理,了解乙個新的領域,得去了解它的整體框架 語法分析 語義分析 語法制導翻譯 中間 生成 生成彙編 生成優化 執行彙編 3位址或4位址 的彙編執行 1.根據語言寫出文法產生式 2.構造與某一正規式等價自小dfa dfa deterministic finite automation 確定有...
編譯原理複習
文法與語言 基本概念 字母表 字母表是元素的非空有窮集合 字母表中的元素稱為符號 字元或字 字母表也稱符號 字元 集 字母表上的符號串 由字母表中的符號所構成的任何有窮序列被稱之為該字母表上的符號串 字母表上的元素也是該字母表上的符號串 無任何符號的符號串稱為空符號串,記作 符號串的長度 符號串的長...