2014-01-30 17 views
1

我正在構建一個簡單的解釋器,並且有很多區域可能會失敗。在Java中執行錯誤報告的正確方法?

例如,無效的標識符,無效的操作碼等

我想它使得這些誤差可以保持在一個數組,然後我可以稍後其饋送到某種輸出流。

這樣做的簡單方法是創建一個錯誤對象,我傳遞給我的源代碼加載器,解析器,解釋器等,他們添加錯誤,因爲他們發現它們。

如果在任何時候,任何這些對象發現錯誤,我抓住錯誤,不要繼續下一節課。例如,如果解析失敗,不要打擾運行解釋器。

這是一個適當的方式來解決這個問題,還是有沒有更好的方式,我沒有想到(例外?),錯誤接口?

這是一個命令行應用程序。

謝謝

+0

此應用程序是否有GUI或命令行? – christopher

+0

這是命令行。 – jmasterx

+1

你確實是對的。在這裏例外不是一個好的選擇(因爲解析錯誤並不是一個特例)。通過一個錯誤隊列並推送它直到你失敗是這裏的正確方法。而且,命令行與GUI是完全不相關的。 –

回答

1

Eclipse有一個狀態的概念。

IStatus接口有嚴重性代碼和消息。多狀態(MultiStatus)實現組合模式。 自定義後代定義了附加字段來表示不同類型的消息以其特定的形式。 通常,一個方法返回由其被調用者的返回值組成的IStatus。

在交互式圖形用戶界面和控制檯中查看所得到的層次結構非常方便。

0

這聽起來很不錯。用各種錯誤標誌定義一個類(這些可能是布爾值或計數器或計數器的地圖,取決於嚴重程度),在工作時收集錯誤,然後在特定點檢查累積問題是否能保證救助。

我這樣做了幾次我自己。另外,收集顯式錯誤消息文本的列表可能很有用。通過這種方式,所有檢測到的問題都可以在最後轉儲給用戶,以便於理解。該程序會說:「現在我會停下來,因爲有5個錯誤和20個警告......累積的文本如下......」我有一個「故事」類,基本上是一個可格式化的東西的列表,使用一段時間只是那個目的。

0

您提出的方法看起來與spring validation中使用的方法非常相似。某些累加器Errors傳遞給所有Validator並收集所有遇到的錯誤的對象。

雖然這對於驗證框架來說看起來相當不錯,但在您的情況下,我會認爲將錯誤載體添加到所有方法簽名中有點不自然。如果您確實需要運營商轉向無限期的連鎖店,請考慮在每一步中保持其生命週期。

由於您有精確的檢查點,並且當前遇到錯誤時您將無法進入下一個階段,爲什麼不從每個處理步驟返回一些Result對象?

這個結果將保存整個錯誤列表(如果「不成功」),但它將在特定步驟中被實例化和填充,然後返回給調用者(以防任何人關心)。您還可以爲每個步驟提供特定的子類(如LoadResult,ParseResult等)以及特定的數據和元數據。