1.已知文法:
S->a|^|(T)
T->T,S|S
分析句型(T,(^,a)),求全部的短語、直接短語和句柄。
解析:根據題意,語法樹如下圖:

全部短語:(T,(^,a)) T,(^,a) (^,a) ^,a ^ a
直接短語:^ a
句柄:^
2.構造上下文無關文法,描述語言:
{anbn|n>=0}
{ambn|m>=n>=0}
if語句
{(ab)n|n>=0}
{ambn|m,n>=1}
if語句
解析:
(1)G[S]:S -> aSb | ab | ε
(2)G[S]:S -> aSb | a | ε
(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
其中other代表語言中其他語句。
a)證明該文法是具有二義性的。
b)構造一個等價的無二義性文法,使得else與前面最近的沒有匹配的then匹配。
c)基於該文法構造一個語法制導翻譯模式,將條件語句翻譯改成堆棧機代碼。
句子if E1 then if E2 then S1 else S2是否有兩棵不同的語法樹?說明了什么?
a)二義性證明
根據文法:我們發現 if E1 then if E2 then S1 else S2 有2棵語法樹(2個推導方法)如下所示:

b)等價無二義性文法構造,使else說最近未匹配的then相匹配

