2014-09-21 90 views
0

The Grammar is:在LR解析中難以解決這個例子?

S→(L) ID
L→S | L,S

我試圖計算CLOSURE和GOTO對給定的語法使用LR解析。

我們的老師解決了這個,但在第一個步驟,他沒有使用第二個生產L-->S|L,S,我不知道爲什麼。 所以我解決了同樣的例子,但在第一步uisng完整的語法。
由此,原單隻有9步驟,但我的是10步驟。

我的問題是,我的解決方案是否正確?我想我做了LR(1)。


1)解決方法講座-------- 2)解決我的問題。

enter image description here

回答

1

您的解決方案是不正確的。

起始配置是:

S' → . S $ 

該狀態然後膨脹遞歸以包括所有生產A → ω其中A出現立即位置標記以下。最初,這點後面的唯一一個非終端S,所以我們增加所有作品爲S

S' → . S $ 
S → . (L) 
S → . id 

有沒有以下的點更多的非終端,所以國家就完成了。現在

,繼該.每個符號,我們通過在符號移動的點構建的後續狀態。這裏唯一有趣的是第二個,它將說明關閉規則。我們先從:

S → (. L) 

現在我們有一個生產,其中L緊跟着點,所以我們擴大L進入狀態:

S → (. L) 
L → . S 
L → . L , S 

我們還沒有完成呢,因爲現在有另一個非終點跟着點,S。因此,我們要添加這些作品,以及:

S → (. L) 
L → . S 
L → . L , S 
S → . (L) 
S → . id 

現在對於直接跟隨.每一個非終端的生產被列入國家,所以國家是完整的。

+0

+1,謝謝你的回答。我構建瞭解析表並在考試中解析了句子id + id *(id)'。教師應該將整個問題標記爲錯誤還是隻將第一部分標記爲錯誤? 再次感謝您的提示。 – 2014-09-22 05:22:59

+1

@Caffè:我對你的老師的標記算法可能不會有任何評論:)你的狀態表將(可能)構造出正確的解析,因爲儘管你錯誤地把'L - >(L)| id'置於狀態1,將會在該狀態下嘗試'GOTO(L)'。 (你能看出爲什麼不?)。因此,你的狀態10是無法訪問的,在這種情況下,錯誤是無關緊要的。然而,一般來說,這個錯誤可能會導致明顯的轉換/減少或減少/減少衝突,這顯然會影響解析。無論如何,祝你好運。 – rici 2014-09-22 05:34:08

+0

是的,你說得對。我也注意到,它並沒有影響我的解析表。我希望他明白我的所作所爲。 – 2014-09-22 05:40:40