編譯原理 - 推導與歸約(一)

前置知識

  • 句型:若文法 G 的開始符號爲 S,則從開始符號 S 能推導出的符號串稱爲文法的一個句型
  • 句子:若 X 是文法 G 的一個句型,且 XVTX∈V^*_T,則稱 X 是文法 G 的一個句子,即僅含終結符的句型是一個句子

例如,有下列文法:

  • S→AB
  • A→aA|a
  • B→bB|b

用上述文法推導字符串aaabbb過程如下:

S→AB→aAB→aaAB→aaaB→aaabB→aaabbB→aaabbb

AB、aAB、aaAB、aaaB、aaabB、aaabbB 和 aaabbb 都是上述文法的一個句型,但只有 aaabbb 爲一個句子,因爲其只含有終結符。

推導

推導:用產生式的右部替換產生式的左部

主要分爲以下幾種推導:

  • 直接推導:對於每一個產生式來說,右部都是它左部的直接推導,記爲 α⇒β。
  • 0步或多步推導:符號爲 G\underset{G}{\overset{*}\Rightarrow}(話說這個推導符號也是真難打出來。。。),表示至少推導0次
  • 1步或多步推導:符號爲 +G\underset{G}{\overset{+}\Rightarrow},表示至少推導一次
  • 最左推導:總是選擇每個句型的最左非終結符進行替換
  • 最右推導:也稱爲規範推導,總是選擇每個句型的最右非終結符進行替換

對每一個句型,該句型一定有一個推導過程(可能不唯一),推導過程一定對應一顆語法樹(推導過程可能不唯一,當然語法樹也可能不唯一)。

歸約

歸約是推導的逆過程。

  • 直接歸約:若文法 G 中有一個直接推導 α⇒β,則稱 β 可直接歸約爲 α,或 α 是 β 的一個直接歸約
  • 歸約:若文法 G 中有一個推導 α G\underset{G} {\overset{*}\Rightarrow} β,則稱 β 可歸約成 α,或 α 是 β的一個歸約
  • 最左歸約:也稱爲規範歸約,最右推導的逆過程稱爲最左歸約
  • 最右歸約:最左推導的逆過程稱爲最右歸約

下面以兩幅圖片作爲示例說明推導與歸約的過程。
最左推導
最右推導

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章