2013-09-30 36 views
0

我爲我的解釋器項目創建了一個詞法分析器和一個解析器。詞法和句法錯誤

我有一個關於如何實現錯誤處理的問題。

目前,我發現第一個錯誤並在控制檯上顯示它後停止詞法分析器/解析器。

但我不確定這是否正確。所以我想問一下哪種更好的做法:

  1. 無論何時發現第一個錯誤並停止掃描儀/解析器並在控制檯上顯示它。

  2. 編譯所有錯誤,並在掃描/解析完成後顯示所有錯誤。

非常感謝。

回答

0

如果您設法合理地做到這一點,那麼您的用戶會更加欣賞策略(2)。在一次編輯中修復大量錯誤的速度要比檢查/編輯/檢查/編輯/檢查/編輯循環每個語法錯誤要快得多。

但是,從您的角度來看,在檢測到錯誤之後恢復解析是非常困難的。您需要弄清楚(或更準確地說,猜測)如何修復您檢測到的語法錯誤,以便忽略它並繼續解析。如果您猜錯了,最終可能會創建大量無用的語法錯誤報告。

最常用的解釋器停在檢測到的第一個錯誤處,而大多數常用編譯器會嘗試繼續(儘管並非所有這些都做得特別好),並且只有在達到某個閾值時纔會失敗。

根據我的經驗,執行良好編譯時錯誤處理的語言實現與創建良好錯誤消息並從語法錯誤中恢復的代碼相比,其餘的代碼能夠解析語法上正確的程序。但是,一如既往,YMMV。