3

據我所知,FOLLOW-Set在第一時間可以告訴我輸入流中是否有錯誤。是對的嗎?LL-1解析器:跟隨器是否真的有必要?

因爲否則我想知道你究竟需要什麼。考慮你的解析器對堆棧的頂部的非終端(在我們班,我們使用了棧抽象爲LL-解析器)

[TOP] X...[BOTTOM] 

的X - 讓它成爲非 - 終端 - 在下一步將被替換,因爲它位於堆棧的頂部。因此解析器詢問分析表使用什麼推導X.考慮輸入

+ b 

+b都是終端。

假設X具有"",即其FIRST集合中的空字符串。他的第一盤中沒有+

至於我看到它在這種情況下,分析器可以簡單地檢查是否有在第一組X的無+,然後用它可以讓X溶解到""即空字符串,因爲它是唯一的推導分析器可能如何繼續解析輸入而不會引發錯誤。如果輸入流無效,解析器無論如何都會在稍後的某個時刻識別它。我明白FOLLOW集可以幫助您立即確定解析是否可以繼續而不會出現錯誤。

我的問題是 - 這真的是FOLLOW集合發揮的唯一作用嗎?

我希望我的問題屬於這裏 - 如果不是,我很抱歉。如果事情不清楚,也請隨時要求澄清。

謝謝你提前

回答

1

你是對的。解析器最終可能會繼續解析,並最終以另一種方式找到衝突。 除此之外,關於語法的推理,FOLLOW集合可以非常方便。不是由解析器,而是由構建語法的人。例如,如果您發現存在任何FIRST/FIRST或FIRST/FOLLOW衝突,則您制定了模糊的語法,並且可能需要修改它。

相關問題