Как создать конкретные сообщения об ошибках на основе исключений разбора в JavaCC

Я делаю JavaCC программу, чтобы принять определенный язык. Я сделал это, но не могу понять, как использовать сгенерированное исключение ParseException для определения проблемы во входных данных и настройки выходного сообщения об ошибке.

Пока мой код выглядит так:

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. Ни один из них не помог мне понять намного лучше.

Если бы кто-нибудь мог помочь / намекнуть, я был бы очень благодарен.

1 ответ

Решение

Вы всегда можете бросить 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 это не имеет специального сообщения.

Другие вопросы по тегам