2014-11-05 75 views
0

我的下一個語法:爲什麼這個語法不是LL(1)

C := (PZ) 
P := X | C 
X := iQ | eQ | rQ 
Q := AX | ε 
A := + 
L := > 
Z := LP | AP | ε 

,我使用JFLAP建立一個LL(1)分析表,但在我鍵入這些規則的時刻, JFLAP給我一個錯誤,說:語法不是LL(1)。我發現錯誤在哪裏,在規則'Q'中。

第一組Q是Q = {+,ε},Q的後續集合是Q = {),+,>},並且在解析表中,我將在表[Q ,+],這是錯誤的,但我不知道如何解決它,因爲我需要有規則Q - >ε

回答

1

基本問題是,你的語法是不明確的 - 你有兩個嵌套的重複模式從您的規則XZ,他們都可以匹配i+i片段。所以,你需要決定要如何解決這種模糊 - 哪種方式應該像i+i比賽片段:

  PZ       PZ 
     /\      /\ 
     X ε      X AP 
    /\      /\/\ 
    i Q      i Q + X 
     /\      / /\ 
     A X      ε  i Q 
    //\        | 
    + i Q        ε 
      | 
      ε 

最簡單的解決方法是使其始終符合正確的榜樣,您可以通過剛開始做擺脫X/Q重複模式:

C := (PZ) 
P := X | C 
X := i | e | r 
A := + 
L := > 
Z := LP | AP | ε 

如果你想始終與左側的例子中,你需要在Z模式,以禁止+

C := (PZ) 
P := X | C 
X := iQ | eQ | rQ 
Q := AX | ε 
A := + 
L := > 
Z := LP | ε