2015-03-31 55 views
0

起初我有這個語法。如何製作此文法LL(1)?

S -> A | B 
A -> Aa | epsilon 
B -> Bb | epsilon 

我消除左遞歸有這樣:

S -> A | B 
A -> A' 
A' -> aA' | epsilon 
B -> B' 
B' -> bB' | epsilon 

此語法不是LL(1)爲第一(A)和第一(B)在常見已EPSILON。我知道常見的第一個符號通常用分解法來解決。我不知道如何解決A和B第一組中的常見ε。

+0

epsilon是*不是一個正常的符號 – CapelliC 2015-03-31 11:15:54

+0

@CapelliC這正是我問我的問題的原因! – Nina 2015-03-31 11:26:25

回答

0

語法是模糊的,因爲一個空字符串可以通過任一小號來製造甲 →&小量;或SB →&epsilon ;.爲了使語法可以解析,你需要解決歧義。

最簡單的可能是添加規則S →ε然後將其從AB中刪除,使得它們的基本產物分別是ab