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

語法樹及其二義性

基礎概念

  • 短語: S 爲文法 G 的開始符號,αβδ 是該文法的一個句型。若 SGαβδS \underset{G}{\overset{*}\Rightarrow} αβδA+GβA\underset{G}{\overset{+}\Rightarrow}β,則稱 β 是句型 αβδ 相對於非終結符 A 的短語。在語法樹中,相當於子樹的末端結點形成的符號串
  • 直接短語:又稱簡單短語。若SGαβδS \underset{G}{\overset{*}\Rightarrow} αβδ,且有產生式AβA→β,則稱 β 是句型 αβδ 相對於非終結符 A 的直接短語。在語法樹中,相當於簡單子樹(只有一層分支的子樹) 的末端結點形成的符號串.
  • 句柄:也稱爲最左直接短語,即直接短語中在語法樹中位於最左邊的爲該句型的句柄
  • 素短語:是指一個短語至少包含一個終結符,並且除它自身之外不再包含其他素短語
  • 最左素短語:語法樹最左邊的素短語稱爲最左素短語

語法樹

語法樹,也稱語法分析樹,是針對上下文無關文法,用來表示一個句型的生成過程的一種描述手段,是推導的圖形表示形式。
例如,對於產生式A→XYZ,在語法樹中就可以這樣表示:
語法樹

  • 給定句型:T * i ↑ (T * F)

  • 給定文法G[T]:

T → T * F | F
F → F ↑ P | P
P → (T) | i

語法樹如下:
語法樹示例

  • 短語
    • i
    • T ↑ F
    • (T ↑ F)
    • i ↑ (T ↑ F)
    • T * i ↑ (T * F)
  • 直接短語
    • i
    • T * F
  • 句柄
    • i
  • 素短語
    • i
  • 最左素短語
    • i

文法二義性

如果一個文法存在某個句子對應兩顆不同的語法樹,則說這個文法是二義的。

不存在一個算法,能在有限步驟內,確切判定任給的一個文法是否爲二義的。只要找到一個句子,該句子對應兩個不同的語法樹,即證明該文法是二義的。

例如,證明文法G(S)是二義的:

S→aB | Ad
A→ab
B→bd

對於句子abc,存在下列兩個不同的語法樹:
在這裏插入圖片描述
所以該文法G(S)具有二義性。

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