傳統編譯原理


傳統編譯原理

計算機程序編譯原理,把程序員員容易理解的高級語言程序代碼流,翻譯成計算機可執行的機器指令代碼流。可以使用“一斷、二比、三譯”形象說明實質。

1、。按照語言的語法規則掃描斷詞,結合文法詞典,把程序字符串流,分解成為計算機語言能夠識別的基本單元(標識詞、運算符)。

2、。從程序流中找出擴展標識詞的定義,建立標識詞結構,放入文法詞典,服務於新的定義和函數程序代碼的編譯。程序語句、表達式里面使用的標識可以從詞典中比較找到。

3、。把函數程序文本字符串流中的算術表達式、賦值語句、控制語句,翻譯成為計算機機器語言二進制代碼流。

4、組裝函數翻譯后的二進制代碼流,明確數據空間地址和大小,生成計算機裸機或操作系統可以執行目標代碼

 

 

 

 

 1、 翻譯——將語言L1轉換為邏輯上等價的語言L2

  編譯——將源程序(高級語言)翻譯成目標程序(低級語言或機器語言)

  匯編——將低級語言翻譯成機器語言

  解釋(程序)——逐條翻譯語句,並立即執行結果

 

2、 單詞——關鍵字、標識符、常數、界符、運算符

    單詞 =  (單詞種別碼,單詞自身值)

  語法單位——短語、表達式、語句、子程序、程序

  中間代碼——四元式、三元式、逆波蘭式、樹式

      

 

 3 初等數據類型——邏輯、數值、字符、指針

  語法:是一組規則,規定了語言的形式結構,包括單詞結構,句子結構,程序結構等。

     語法={詞法規則+句法規則}

  語義:也是一組規則,規定了各語法單位的確切含義。

  語句

    說明性語句——用於定義各種數據類型,變量,函數或過程.

    可執行性語句——用於描述數據處理的過程和動作

4 參數傳遞——傳名、傳地址、傳值

         

 

 

 

 5、正規式

6、狀態轉換圖

 

 

 

 

   是一有向圖,由有限個結點及有向邊連接而成;

  每個結點稱為狀態;

  狀態圖有一個初態,多個終態;

  每條邊上有相應的字符.

  狀態轉換圖用於表示單詞結構從狀態轉換圖的初態到終態間,每條路徑上字符的連接,就構成了該狀態圖的合法單詞.

  可以表示單詞規則,也可以用於識別單詞

  由三種結構構成 —— 分支結構、循環結構、終結點

 7 確定有限自動機(DFM)和非確定有限自動機(NFM)

  DFAM=(S, ∑, f,s0,Z)

  狀態集、符號集、單/多值映射函數、初態(1個)、終態集

  DFAM  是  NFAM  的特例

 

 

 DFAM案例:

 

 

    NFAM案例:

          

 

 

 

 

 

8、 可識別單詞的全體記為:L(M)

  設 V 為字集,且 V0={ε}, 令 V*=V0∪V1 ∪ V2 ∪........ ,稱V* 為V的閉包。 V+= V* - {ε}, 稱V+ 為V的正則閉包。

9 句子——由文法的開始符號出發通過0步或若干步推導產生的終結符號串

     若  S=>α,則α ∈VT *

    句型——由文法的開始符號出發通過0步或若干步推導產生的符號串

     若  S=>α,則α ∈(VT ∪ VN) *

10、語言——所有句子的集合,記為L(G)={α |S=>α, α ∈VT * }

    一個語言的文法是不唯一的

11、句柄——一個句型的最左直接短語

   簡單(直接)短語

   短語

   素短語——至少含有一個終結點,且除自身外不含有更小的素短語

       

 

 

 

12、 上下文無關文法——它定義的語法單位獨立於該語法單位可能出現的環境

  自然語言不是上下文無關文法,程序語言上下文無關文法

  G =(VT,VN,S,P)

  終結符集、非終結符集、開始符號、產生式

 

13、最左推導——每次直接推導,對句型的最左非終結符實行替換

   最右推導——每次直接推導,對句型的最右非終結符實行替換

   解決語法二義性:E—>i*i+i

       

 

     14、語法分析方法_自下而上

  根據文法,對輸入字串進行歸約,若能正確地歸約 為文法的初始符號,則表示輸入字串是合法的。典型方法是算符優先分析法
  規范歸約(歸約棧)——最右推導的逆過程(算符優先分析法)

    (1)優先關系表

  •  
  • aQb a=b
  • aQ a<FIRSTVT(Q)
  • Qb LASTVT(Q)>b

    (2)存在的問題

      1.文法的左遞歸
      2.文法的回溯

           

 

 

   

15、語法分析方法_自上而下

   從文法的初始符號進行推導,若能推導出與輸入字串相同的句子,則表示輸入字串是合法的。 典型方法是遞歸下降分析法
   規范推導——最左推導的逆過程(遞歸下降分析法)

 

 

 

16、歸約串——棧頂形成的某產生式候選

   可歸約串(最左素短語——可正確歸約的歸約串

17、語法樹 —— 可以表示同一句型的多種推導,是多種推導的共性抽象;但未必代表了同一句型的所有推導

  LL(1)文法(無回溯文法)——無二義性、無左遞歸

  LR(0)<SLR(1)<LALR(1)<LR(1)

   

 

                   

18、消除左遞歸

     若 P→P α | β ,則  P→ β P ’,  P’ → αP ’ | ε  

19 符號表的作用:用於紀錄各種名字的信息, 並提供給編譯各階段使用

    種屬、類型、地址、長度、形參標志、其它信息

             

 

 

20、中間代碼的特點: 結構簡單,功能明確,易於優化,易於翻譯。

21、語法制導翻譯——在語法分析的每次歸約或推導時,根據產生式的語義進行翻譯的一種方法。

一些基本操作:

  • newtemp( )   產生一臨時變量;
  • gen(操作符,操作數1,操作數2,結果)    填入四元式表;
  • fill( i,屬性)     填入符號表;
  • entry( i )       查符號表,返回 i 在符號表中的位置;
  • backpatch( m,n)    把 n 填入 四元式表第 m 個四元式中;

     

 

 

 

             

22、語義動作——描述了一定的輸入和一定的輸出之間的對應關系。

24、基本塊——順序執行的中間代碼序列,僅包含一個入口四元式和一個出口四元式。第一條四元式為入口四元式,最后一條四元式為出口四元式,中間部分不含轉移四元式。

 四元式程序中所有基本入口四元式,包括:

            a)  程序的第一條四元式;

            b)  轉移語句轉移到的四元式;

            c)  條件語句之后的第一條四元式.

 基本塊內可以進行以下幾種優化:(優化手段:  DAG )

      合並已知量,刪除多余運算(公共子表達式),刪除無用賦值。

 

 

 25、回邊——若有邊b->a且a是b的必經結點,則b->a是回邊

  控制流程圖——具有唯一首結點的有向圖,簡稱為流圖

  必經結點——從流圖首結點出發到達b的通路都必須經過點a,則稱a是b的必經結點,記a DOM b

  必經結點集——D(n)

  

26、可歸約流圖——流圖中去除回邊后,構成無環路流圖

   循環——對於回邊b->a,包括a、b在內的,有通路到b而不經過a的所有結點構成一個循環

    (1)  結點序列為強連通的;(任意兩點間都有通路,且通路上的結點都屬於結點序列)

    (2)  結點序列中僅有一個入口結點.

   三種循環優化:代碼外提,強度削弱,刪除歸納變量。

27、引用--定值集ud[A]

    如在 u 處引用了變量 A,則凡能到達 u 的 A 的所有定值點,構成了 A 在 u 處的引用--定值集 ,記為: ud[A].

  •  
  • IN[B] :  代表到達基本塊 B 入口點時的各變量的所有定值點集
  • OUT[B]:代表到達基本塊 B 出口點時的各變量的所有定值點集
  • GEN[B]:表示 B 中所定值的且到達 B 之后的定值點集
  • KILL[B]: 表示屬於 B 外的定值點,而這些定值點所定值的變量,在B中又被重新定值

          這幾個集合滿足如下方程:

  •  
  • OUT[B]=(IN[B]  - KILL(B)) ∪ GEN[B]
  • IN[B] = OUT[p1] ∪ OUT[p2] ∪...... ∪ OUT[pk]
  • p1 , p2...... pk  為B的前趨結點

    該方程即為到達--定值方程,求解該方程,得到IN[B]。

28、不變運算——對於循環中的語句 A:= B op C, 若 B 及 C 均為常量,或者為循環中未改變的變量, 那么每次循環 A的值都一樣,稱A:= B op C為不變運算.

    運算對象是常量;
    運算對象的定值點均在循環外;
    運算對象的再循環內的定值點均已被標記為不變運算;

29、基本歸納變量——若循環中對 B 只有唯一的遞歸賦值 B:=B+C 且 C 為循環不變量,則稱 B 為循環的基本歸納變量

  歸納變量——若B為基本歸納變量,而A在循環中的定值可以化歸為B的線性函數: A:=C1*B+C2(C1 , C2為循環不變量),則稱A 為歸納變量,並稱 A與 B同族

  待用信息表——指針指向下一個引用的地方

    設四元式(i) 對A定值且到達四元式( j)  ,四元式 ( j) 中引用 A ,則稱 j 是四元式 i 的變量A 的待用信息;  滿足上述定義的所有 j, 構成了 A 的待用信息集。

30、目標代碼

  生成原則:

    (1) 生成的目標代碼短而高效;
    (2) 充分利用寄存器,減少訪問內存的次數;

   形式:

          (1)能立即執行的目標代碼;
    (2)待裝配的浮動目標代碼;
    (3)匯編語言目標代碼;

31、空間分配

       

 

 

 

 

參考鏈接:

https://www.cnblogs.com/sweetyu/p/4947030.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM