2011-10-28 53 views
2

這個問題是在我的CS作業,我不知道該怎麼做。語法解析樹?

考慮語法

S ← (L) 
S ← a 
L ← L , S 
L ← S 

畫一個解析樹句子(a , (a , a))

我試過結構以下,我結束了(L,(L,L))似乎並非是正確的,但。有誰能把我推向正確的方向嗎?

回答

2

這裏是你以後的部分:

enter image description here

現在你做的工作:)

+0

謝謝,我終於解決了。我以錯誤的方式繼續說下去。謝謝你的幫助。 – Jonathan

2

看句子(a, (a, a))。哪個右邊(RHS)可以匹配?只有第一個,S ← (L)。所以你的樹的根將是一個S - 有三個孩子的節點:一個(-node,一個L-節點和一個)-node。

現在您需要弄清楚L節點的孩子是什麼,他們必須匹配剩餘的輸入:a,(a,a)。所以看看LHS上有L的規則。那些規則中哪一個的RHS可以匹配a,(a,a)

+1

提示:哪一個右手邊有逗號。 – morningstar

0

(a,(a,a))的解析樹是從一個最左推導得到的休息(a,(a,a))

S => (L)  [S -> (L)] 
    => (L,S)  [L -> L,S] 
    => (S,S)  [L -> S ] 
    => (a,S)  [S -> a ] 
    => (a,(L)) [S -> (L)] 
    => (a,(L,S)) [L -> L,S] 
    => (a,(S,S)) [L -> S ] 
    => (a,(a,S)) [S -> a ] 
    => (a,(a,a)) [S -> a ] 

您解析樹的根是S。對於派生中的每個非終結符號的重寫,在分析樹中繪製適當的節點。另外,你的語法不是最優的,除此之外,還包含鏈式規則。刪除它們將防止必須從L派生S以推導出a