2016-04-15 22 views
0

私はJavaでコンパイラ型チェッカーを実装しています。私のtypeCheckingクラスは、与えられた入力ファイル(プログラム)が意味的に間違っている場合にRuntimeExceptionsを投げるメソッドで構成されています。呼び出されたメソッドの複数の例外の出力

私のプログラムがエラーを発見したときに例外がスローされ、プログラムが終了します。私が望む機能は、typeCheckingクラスで例外が発生した場合、すべての例外メッセージをどこかに保存して、Mainクラスに出力することです。

擬似コード例:

// Main class part of code 
public static void main(String[] args){ 

    call typeChecking method 

    if an exception (or more) occurred in the typeChecking class 
     then print all the exception messages 
    else no semantic errors found 
     then do something else 
} 

私は何を思ったことは、静的String配列を作成し、その中のすべての例外メッセージを追加することです。私のMainクラスでは、配列のサイズが0かどうかを調べるつもりです。そうでない場合は、例外が発生したことを意味します。

これを行うにはもっと良い方法はありますか?

+1

これは非常に興味深い質問です。一方では、コンパイラの仕事をしたいと思っています。これはソフトウェアエンジニアリングではかなり高度なトピックとしてよく見られます。一方;あなたはあなたのメインの方法で "本当のもの"を行うことをお勧めします。後で何とかして、あなたはまだ良いデザインについてあまり知らないことを示しています。それで、これがいくつかの "宿題"プロジェクトでない限り、コンパイル構築のようなトピックに飛び乗る前に、実際にOOの設計(例えば、Fowlerによる "SOLID"ルールのチェックアウト)について教えてください。 – GhostCat

+0

問題は、とにかく問題を報告するために間違った方法かもしれません。あなたは "(以上)"の例外を持つことはできません。発見された1つ以上のエラーに関する情報を含むオブジェクトのリストを返すことがより良い方法です。 – Arkadiy

+0

私が知る限り、例外を「キャッチして続ける」ことはできません。 – apokryfos

答えて

0

try-catchブロックを使用して例外をキャッチし、キャッチされた例外で何でもしてください。私。

// Main class part of code 
public static void main(String[] args){ 
    boolean exceptionOccured = false; 
    try{ 
     call typeChecking method 
    }catch(RuntimeException e){ 
     exceptionOccured = true; 
     ...print it or put in an array or whatever. 
    } 
    if(exceptionOccured) 
     do something else 
} 
+0

これはtypeCheckingメソッドを中断しませんか?私はそれが他のエラーを見つけるために実行し続けたい場合 – pirox22

+0

@ pirox22何かが例外をスローした場合、中断され、それを停止することはできません。 – kan