2014-10-22 87 views
0

我在下面有這個語法並試圖弄清楚是否可以使用LL語法分析器進行分析?如果沒有,請解釋。LL語法分析器語法

S --> ab | cB 
A --> b | Bb 
B --> aAb | cC 
C --> cA | Aba 

從我所瞭解的兩組交集必須是空的通過配對不相交測試。

但我不知道從哪裏開始,一直在瀏覽我的教科書和http://en.wikipedia.org/wiki/LL_parser#Parsing_procedure,但無法理解或發現任何示例需要遵循。我只需要查看一些步驟或步驟來了解如何解決其他類似問題。任何幫助表示讚賞。

+0

如果存在左遞歸,則LL(k)解析器無法解析它。 – Mephy 2014-10-22 02:28:28

+0

@Mephy:不幸的是,反過來並不成立 - 即使沒有左遞歸,它也可能不是LL(k) – 2014-10-22 02:33:54

回答

1

計算所有非終端的FIRST集合,並檢查FIRST是否爲給定非終端的備選集合設置都是不相交的。如果都是,那是LL,並且如果有任何非終端它不是。如果有任何的ε規則,您還需要FOLLOW集。

計算FIRST 設置是很容易的,並會告訴你,如果語法是LL(1)。計算FIRST k集合涉及的內容相當多,但會告訴您,如果語法是LL(k),對於您計算的第一個集合中的任何特定k值,

+0

所以B的第一組是{a,c},C是{c,b,a }和A是{b,a,c}。我是否正確?所以現在S會是什麼? – 2014-10-22 06:06:44

+0

@JessicaDinh是的,它看起來像正確計算了A,B和C的FIRST設置。並且因爲它們不是不相交的,所以語法不是LL1可解析的。現在你可以繼續爲更大的Ks生成FIRST集,直到找到合適的K或放棄。您是否必須確定語法是否爲任何K的LL(1)或LL(K)? – 2014-10-22 17:23:22