我覺得解析器發電機是一個很不錯的工具,在你的編程工具包使一些玩耍後,我寫我自己只是爲了瞭解事情做得更好,它竟然是比我預想的要好所以我一直堅持下去。錯誤報告和恢復分析器生成
有一件事情一直纏着我最近雖然是錯誤報告和恢復。我做得不好。我知道一種方法是令牌同步,但線索似乎停在那裏。除了滾動你自己的遞歸下降解析器,幷包括各種啓發式算法,在解析器生成器中處理錯誤報告和錯誤恢復的一些通用目的是什麼?
我覺得解析器發電機是一個很不錯的工具,在你的編程工具包使一些玩耍後,我寫我自己只是爲了瞭解事情做得更好,它竟然是比我預想的要好所以我一直堅持下去。錯誤報告和恢復分析器生成
有一件事情一直纏着我最近雖然是錯誤報告和恢復。我做得不好。我知道一種方法是令牌同步,但線索似乎停在那裏。除了滾動你自己的遞歸下降解析器,幷包括各種啓發式算法,在解析器生成器中處理錯誤報告和錯誤恢復的一些通用目的是什麼?
隨着PEG,這是自上而下的,可以實現的「切割」功能,可以自動或手動包含,所以你可以報告錯誤接近它們的來源地。參見Grako和參考article by Kota Mizushima。在輸入中看到特定的令牌後,「剪切」會使備選無效,因此解析器可以知道如何儘早失敗。
一般來說,我不喜歡錯誤恢復,因爲第一個錯誤之後報告的錯誤往往是令人討厭的,因爲Turbo Pascal一旦證明。
恢復一般的策略是執行重寫,插入或刪除,對輸入序列所以解析器可以繼續。對於僅基於刪除的簡單恢復策略(跳過輸入直到預期的令牌),請參見Wirth's A+D=P的第5.9節。
你寫什麼類型的解析器生成的? – Apalala
@Apalala:帶有一些OMeta語義動作和謂詞的PEG。 – davidk01