《編譯原理》求短語,直接短語,句柄,素短語,最左素短語 - 例題解析
筆記
(一)明確概念:
| 名稱 | 概念 |
|---|---|
| 短語 | 定義: 若 S 為文法 G 的開始符號,αβδ 是該文法的一個句型,即 S ⇒* αβδ,且有 A ⇒+ β,則稱 β 是句型 αβδ 相對於非終結符 A 的短語。語法樹: 在語法樹中表示所有分支結點對應子樹,短語即子樹葉子對應的符號。注: 子樹包括語法樹本身,及句型本身也可以稱為短語。 |
| 直接短語 | 定義: 若 S ⇒* αβδ,且文法中包含產生式 A → β,則稱 β 是句型 αβδ 相對於非終結符 A 的直接短語。語法樹: 在語法樹中表示為該短語只有上下相鄰父子兩代 |
| 句柄 | “可規約串”,句柄對應某個產生式的右部,是某個,但不是任意一個。作為一種規約對象,句柄表示最左直接短語。語法樹: 在語法樹上,則表示為最左邊的只包含相鄰父子節點的短語(最左直接短語) |
| 素短語 | 定義: 是指一個短語至少包含一個終結符,並且除它自身之外不再包含其他素短語 |
| 最左素短語 | 定義: 最左素短語就是句型最左邊的素短語,是算符優先分析法的規約對象。語法樹: 通過語法樹分析時,要注意先判斷是否為素短語,再找相對最左端的素短語。 |
例題1:求短語,直接短語,句柄
給定句型:
T*P↑(T*F)
給定文法:
G[T]:
T → T*F|F
F → F↑P|P
P → (T)|i
解析:
推導步驟為:
T ⇒ T*F
⇒ T*F↑P
⇒ T*P↑P
⇒ T*P↑(T)
⇒ T*P↑(T*F)
畫出語法樹為:

該語法樹的 5 個子樹及 5 個短語為:

求直接短語方法: 該句型的語法樹有兩顆直接子樹(最左邊的兩顆子樹),由這兩顆直接子樹的葉子結點組成的符號串(或者說只包含兩層的子樹葉子結點對應的),就是句型的兩個直接短語,直接短語 P 和 T*F。
求句柄: 因為 P 相對 T*F,在語法樹上的左側,所以句柄是 P
最終結果:
| 類型 | 內容 |
|---|---|
| 短語 5 個 | P,T*F,(T*F),P↑(T*F),T*P↑(T*F) |
| 直接短語 2 個 | P,T*F |
| 句柄 | P |
例題二:求素短語,最左素短語
給定句型:
FF↑*a*
給定文法:
G[T]:
T → T*F|F
F → F↑P|P
P → (T)|i
解析:
推導步驟為:
T ⇒ TF*
⇒ TF*F*
⇒ TF↑\F*
⇒ TF↑a*
畫出語法樹:

最終結果:
根據定義可以找出素短語有:
| 類型 | 內容 |
|---|---|
| 素短語 2 個 | F↑,a |
| 最左素短語 | F↑ |
