概念:
語法樹求短語、簡單短語和句柄:
1)短語:子樹的末端結點形成的符號串。
2)簡單子樹:只有一層分支的子樹。
3)直接短語(簡單短語):簡單子樹的末端結點形成的符號串。
4)句柄:子樹中最左邊的那棵只有父子兩代的子樹的所有葉結點自左至右排列起來,就是該句型的句柄。
例子:
由此可得S=(Sd(T)db)為此文法的一個句型:
-
短語:S,(T),b,Sd(T),Sd(T)db,(Sd(T)db)
-
直接短語:S,(T),b
-
句柄:S
-
此時的最左直接短語是S所有句柄為S
題目:
1.已知文法:
S->a|^|(T)
T->T,S|S
分析句型(T,(^,a)),求全部的短語、直接短語和句柄。
答:依題意得到語法樹如下圖:
全部短語:(T,(^,a)) T,(^,a) (^,a) ^,a ^ a
直接短語:^ a
句柄:^
2.構造上下文無關文法,描述語言:
(1){anbn|n>=0}
(2){ambn|m>=n>=0}
(3) if語句
(4){(ab)n|n>=0}
(5){ambn|m,n>=1}
答:(1)G[S]:S -> aSb | ab | ε
由S產生任意多個相同數量的a和b
(2)G[S]:S -> aSb | a | ε
由S產生任意多個a和任意多個b,數量a比b多
(3)if語句 -> if<條件>then<語句> | if<條件>then<語句>else<語句>
(4)G[S]:S -> aSb | aaSbb | ... | (ab)n | ε
由S產生任意多個相同數量的a和b
(5)G[S]:S -> aS|Sb | a | ε
由S產生任意多個a和任意多個b,a和b的個數都大於1個
3.如果if語句的方法:
stmt->if expr then stmt
| if expr then stmt else stmt
| other
句子if E1 then if E2 then S1 else S2是否有兩棵不同的語法樹?說明了什么?
答:依題意畫出語法樹如下圖:
語法樹(1)
語法樹(2)
依題意可以畫出兩顆語法樹,兩顆語法樹都是可以描述同一個文法的。這說明了這個文法是二義性的。