Как создать конкретные сообщения об ошибках на основе исключений разбора в 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
это не имеет специального сообщения.