1

JavaCC文法でエラー報告と回復を実装しようとしています

.jjt文法ファイルで次のコードについて言及しました

void Stm() :
{}
{
  try {
    (
      IfStm()
    |
      WhileStm()
    )
  }catch (ParseException e) {
    error_skipto(SEMICOLON);
  }
}


void error_skipto(int kind) {
  ParseException e = generateParseException();  // generate the exception object.
  System.out.println(e.toString());  // print the error message
  Token t;
  do {
    t = getNextToken();
  } while (t.kind != kind);
}

コマンドを実行すると、jjtree CMinus.jjt次のエラーが発生します。

ファイルCMinus_ragu.jjtからの読み取り。。。入力の解析エラー:org.javacc.jjtree.ParseException: "" {" "{" "a t行111、列30が発生しました。次のいずれかが予期されていました:" throws "...": "..."#".. 。

コードのエラーとは何ですか?エラー回復をどのように処理する必要がありますか?

4

1 に答える 1

1

キーワードJAVACODEは、文法ファイルのエラーハンドラコードの前に追加する必要があります。したがって、メソッドは次のように表示されます。

JAVACODE
void error_skipto(int kind) {
  ParseException e = generateParseException();  // generate the exception object.
  System.out.println(e.toString());  // print the error message
  Token t;
  do {
    t = getNextToken();
  } while (t.kind != kind);
}

これは、Javaスタイルのプロダクションを使用する前に、キーワードJAVACODEを追加する必要があるためです。

于 2012-03-17T16:53:41.230 に答える