Ошибка распознавания токена в: '#i' при разборе грамматики c

1

Я пытаюсь проанализировать очень простой файл C, используя грамматику antlr v4, найденную по адресу https://github.com/antlr/grammars-v4. Файл выглядит следующим образом:

#include <stdio.h>
int main()
{
  printf("hello world!");
  return 0;
}

Я пытаюсь проанализировать файл следующим образом:

public void parse(FileInputStream myFile) throws IOException {
  ANTLRInputStream source = new ANTLRInputStream(myFile);
  CLexer lexer = new CLexer(source);
  CommonTokenStream stream = new CommonTokenStream(lexer);
  CParser parser = new CParser(stream);
  ParseTree tree = parser.primaryExpression();
  ParseTreeWalker.DEFAULT.walk(new MyParseListener(), tree);
}

Поскольку я пытаюсь разобрать это, я получу ошибку.

line 1:0 token recognition error at: '#i'

Есть ли еще один шаг, который мне нужно сделать для обработки предварительной обработки? Является ли грамматика C неполной?

Теги:
antlr4
parsing

1 ответ

2
Лучший ответ

Предоставляемая грамматика не поддерживает директивы #include, насколько я могу видеть в текущей завершенной версии.

Фактически директива #include не является частью грамматики C как таковой, и поэтому она не обрабатывается обычно компилятором, а препроцессором

Определение препроцессора C

Ещё вопросы

Сообщество Overcoder
Наверх
Меню