Поиск очень простого примера обработки ошибок ANTLR при генерации кода C - PullRequest
5 голосов
/ 05 января 2010

Я хочу сгенерировать 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 и показывает некоторую обработку ошибок при неверном вводе?

Спасибо!


Хорошо, щедрость, ура!

Но только для реального, рабочего ответа, с реальным, рабочим кодом. Нет "use method X ()" без wxample.

Ответы [ 2 ]

7 голосов
/ 13 января 2010

Скорее всего, вы ищете функцию displayRecognitionError(). Эта функция вызывается в случаях, которые вас интересуют, и является частью среды выполнения C.

Если вы хотите увидеть пример использования этой функции, посмотрите это сообщение в списке рассылки . Хотя этот код сочетает в себе C и C ++, вы должны быть в состоянии понять, что вам нужно из него.

5 голосов
/ 05 января 2010

Обработка исключения распознавания в Java будет выглядеть так:

grammar X;

// ...

@rulecatch{
  catch(RecognitionException rex) {
    // do something
  }
}

// parser rules

// lexer rules 

Другими словами, просто добавьте некоторый пользовательский код C внутри блока @rulecatch{ ... }.

...