語法樹求短語、簡單短語和句柄:spa
1)短語:子樹的末端結點造成的符號串。blog
2)簡單子樹:只有一層分支的子樹。語法
3)直接短語(簡單短語):簡單子樹的末端結點造成的符號串。方法
4)句柄:子樹中最左邊的那棵只有父子兩代的子樹的全部葉結點自左至右排列起來,就是該句型的句柄。im
例子:margin
由此可得S=(Sd(T)db)爲此文法的一個句型:db
短語:S,(T),b,Sd(T),Sd(T)db,(Sd(T)db)img
直接短語:S,(T),b語言
句柄:Sdi
此時的最左直接短語是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)
依題意能夠畫出兩顆語法樹,兩顆語法樹都是能夠描述同一個文法的。這說明了這個文法是二義性的。