Блок try-catch в грамматике JavaCC - PullRequest
1 голос
/ 15 марта 2012

Я пытаюсь реализовать отчеты об ошибках и восстановление в 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: Обнаружено "" {"" {"" в строке 111, столбец 30. Ожидалось одно из: "throws" ... ":" ... "#" ...

Что такое ошибка в коде и как мне ее устранить?

1 Ответ

1 голос
/ 17 марта 2012

Ключевое слово 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);
}

Это потому, что ключевое слово JAVACODE должно быть добавлено перед использованием производства в стиле Java.

...