2
我試圖在此語法中找到歧義,因此我可以將其刪除並將其轉換爲LL(1),但是對於生活我無法找到模糊的地方。任何幫助都感激不盡。如何顯示語法不是LL(1)並將語法轉換爲LL(1)
D -> if (C) {S} | if (C) {S} else {S}
S -> D | SA | A
A -> V = T;
V -> x | y
T -> 1 | 2
C -> true | false
我試圖在此語法中找到歧義,因此我可以將其刪除並將其轉換爲LL(1),但是對於生活我無法找到模糊的地方。任何幫助都感激不盡。如何顯示語法不是LL(1)並將語法轉換爲LL(1)
D -> if (C) {S} | if (C) {S} else {S}
S -> D | SA | A
A -> V = T;
V -> x | y
T -> 1 | 2
C -> true | false
語法不含糊。但是,它不是LL(1),因爲當前瞻標記爲if
時,無法知道D
的兩個製作中的哪一個將被使用。
要成爲LL(1),您需要left-factorD
。
另外,'S'的生成是左遞歸的,所以語法不是LL(任何東西)。 – ebohlman 2013-05-13 00:07:36
謝謝你們,這是正確的,我不得不離開因子D,並從S中刪除左遞歸 – 2013-05-21 09:16:12