Как упомянуть блок try-catch в грамматике JavaCC - PullRequest
2 голосов
/ 14 ноября 2011

Я пытаюсь реализовать отчеты об ошибках и восстановление в грамматике JavaCC, как указано в http://javacc.java.net/doc/errorrecovery.html

После упоминания кода;

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);
    // The above loop consumes tokens all the way up to a token of
    // "kind".  We use a do-while loop rather than a while because the
    // current token is the one immediately before the erroneous token
    // (in our case the token immediately before what should have been
    // "if"/"while".
}

Файл не удалось проанализировать с помощью JavaCCс ошибкой в ​​слове «try» и в строке

'void error_skipto(int kind)' .

Как правильно это сделать?

Заранее спасибо

This is the error that is coming

enter image description here

1 Ответ

2 голосов
/ 14 ноября 2011

Видимо, вы не используете JavaCC, но JTB 1.3.2.

JTB предположительно имеет свой собственный анализатор для файлов грамматики .jj, и это может быть случай, когда JTB не поддерживает try-catch, как показано. В этом случае использование JavaCC на одном входе должно дать другой результат.

...