2016-04-22 2 views
0

特定の言語を受け入れるJavaCCプログラムを作成しています。私はこれを行っていますが、生成されたParseExceptionを使用して入力の問題を判別し、出力エラーメッセージをカスタマイズする方法を理解できません。JavaCCの解析例外に基づいて特定のエラーメッセージを作成する方法

は、これまでのところ、私のコードは次のようになります。

try { 
    task parser = new task(System.in); 
    parser.start(); 
    System.out.println("YES"); // If accepted print YES. 
} catch (ParseException e) { 
    System.out.println("NO"); // If rejected print NO. 
    switch (e) { 
    case 1: 
     System.err.println("Some error case") 
    case 2: 
     ... 
    } 
} 

私が見てきたいくつかのソースははParseExceptionとJavaCCのエラー処理ページのドキュメントです。どちらも私がずっと良く理解するのを助けてくれませんでした。

誰かが助けてくれることがあれば、本当に感謝します。

+0

通常行うべきことは、 'System.err.println(e.getMessage())'のようなものです。これらのメッセージはあなたのアプリケーションにとって十分ではありませんか? –

+0

残念なことに、これは近い将来に私が尋ねようとしていたもう1つの質問でした。私は文字列が受け入れられなかった理由を正確に指定しなければなりません(文字列の長さが間違っているという単純な例があります)。 – fierynot

+0

しかし、この質問については、私のコードは、このタイプのエラーのために正しいか?私は間違いなくエラー処理にはあまり良くはありません。私はそれが 'switch(e)'ではないと思います - たぶん 'switch(e.getPosition())'でしょうか?さらに、このコードを含むメソッドは 'throws ParseException'する必要がありますか、' try ... catch'はこれを必要としませんか? – fierynot

答えて

2

いつでもParseExceptionにカスタム文字列をスローすることができます。あなたが十分な努力に行くために喜んでいる場合の例

void Primary() : {} 
{ 
    <INT> 
| 
    "(" 
| 
    {throw new ParseException("At "+getCoords() 
           +" there was \""+ getToken(1).image 
           + "\", but the parser expected either" 
           + " a \"(\" or an integer literal.");} 
} 

の場合は、カスタムメッセージを持っていませんParseExceptionをスローすることはありませんパーサを作成することが可能でなければなりません。

関連する問題