#java #parsing #parser-generator #javacc
#java #синтаксический анализ #анализатор-генератор #javacc
Вопрос:
Я пытаюсь реализовать отчеты об ошибках и восстановление в грамматике 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
Комментарии:
1. Что означает «отображение ошибки в слове ‘try'». Какие точные сообщения об ошибках вы видите, и в каких точных строках они происходят? Пожалуйста, помните при размещении вопросов здесь, что мы не можем видеть ваш экран отсюда, и что единственная информация, которой мы располагаем, — это то, что вы указали в своем вопросе. «отображение ошибки» бессмысленно без знания того, что это за ошибка, и остальной информации, которая у вас есть о ней. Вы гораздо быстрее получите помощь в решении возникающих проблем, если при публикации вашего вопроса вы дадите нам информацию, с помощью которой их можно решить. Спасибо. 🙂
Ответ №1:
Очевидно, вы используете не JavaCC, а JTB 1.3.2.
JTB предположительно имеет свой собственный анализатор для файлов грамматики .jj, и может случиться так, что JTB не поддерживает try -catch, как показано. В этом случае использование JavaCC на том же входе должно дать вам другой результат.
Комментарии:
1. Получение исходного кода JTB и просмотр их грамматики показали бы, поддерживается ли try-catch. Также ищите версии новее 1.3.2.