這是我詢問How to encode FIRST & FOLLOW sets inside a compiler的上一個問題的後續步驟,但這一個更多地是關於我的程序的設計。將FIRST和FOLLOW集合編碼爲遞歸下降解析器
我正在通過編寫遞歸下降解析器來實現我的編譯器的語法分析階段。我需要能夠利用FIRST和FOLLOW集合,以便更有效地處理源程序語法中的錯誤。我已經爲我的所有非終端計算了FIRST和FOLLOW,但在決定將它們邏輯放置在我的程序中的位置以及最佳數據結構是什麼時,無法做到這一點。
注:所有的代碼是僞代碼
選項1)使用的地圖,並通過他們的名字所有非終端映射到包含它們的前兩分集和FOLLOW集:
class ParseConstants
Map firstAndFollowMap = #create a map .....
firstAndFollowMap.put("<program>", FIRST_SET, FOLLOW_SET)
end
這似乎是一個可行的選擇,但我的解析器裏面我會那麼需要幾分醜陋這樣的代碼來獲取第一和FOLLOW,並傳遞給誤差函數:
#processes the <program> non-terminal
def program
List list = firstAndFollowMap.get("<program>")
Set FIRST = list.get(0)
Set FOLLOW = list.get(1)
error(current_symbol, FOLLOW)
end
選項2)c eate一類每一個非終端和具有第一和FOLLOW屬性:
class Program
FIRST = .....
FOLLOW = ....
end
這會導致代碼看起來更好一點:
#processes the <program> non-terminal
def program
error(current_symbol, Program.FOLLOW)
end
這是我想了兩個選項,我我很想聽聽任何其他關於如何編碼這兩組的方法的建議,以及對我發佈的兩種方式的任何批評和補充都會有所幫助。 感謝
我還張貼了這個問題在這裏:http://www.coderanch.com/t/570697/java/java/Encode-FIRST-FOLLOW-sets-recursive
感謝您提供的所有信息,這非常有幫助。 – 2012-03-18 19:38:46
沒問題。實際上,我現在正在爲我的編譯器開發更多功能,因此它已經成爲我的頭等大事了 – Shahbaz 2012-03-18 21:19:59