Я хочу сгенерировать код C. Я не буду читать из входного файла, одна строка за один раз (как, например, компилятор мог бы). Скорее я буду анализировать ввод данных пользователем, когда он прибывает, одна строка за один раз.
Я предпочел бы обнаруживать и обрабатывать плохо введенный в лексическом анализаторе/синтаксическом анализаторе, например,
/* lexer tokens */
foo : "FOO";
bar : "BAR";
baz : "BAZ";
/* grammar*/
grammar : foo "=" BAZ
| foo "=" BAR
| <some non-existent Antrl-else> : {printf(stderr, "bad input\n");}
;
Хорошо, если я не могу поймать его в лексическом анализаторе/синтаксическом анализаторе, кажется, что я должен использовать displayRecognitionError()
но как??
Кто-либо может указать на меня на очень простой пример, который генерирует код C и показывает некоторую обработку ошибок недопустимого входа?
Спасибо!
Хорошо, щедрость, ура!
Но только для реального, рабочего ответа, с реальным, рабочим кодом. Никакой "метод использования X()" без wxample.
Работа с исключением распознавания в Java будет выглядеть следующим образом:
grammar X;
// ...
@rulecatch{
catch(RecognitionException rex) {
// do something
}
}
// parser rules
// lexer rules
Другими словами, просто добавьте некоторый пользовательский код на C внутри @rulecatch{ ... }
.
Что вы, скорее всего, ищу, это DisplayReCognivityError ()
Функция. Эта функция вызывается в случаях, которые вас интересуют, и является частью выполнения C.
Если вы хотите увидеть пример того, как использовать эту функцию, посмотрите этот пост списка рассылки . Хотя этот код смешивает C и C ++, вы должны быть в состоянии отработать, что вам нужно.