Я пытаюсь проанализировать очень простой файл 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 неполной?
Предоставляемая грамматика не поддерживает директивы #include, насколько я могу видеть в текущей завершенной версии.
Фактически директива #include не является частью грамматики C как таковой, и поэтому она не обрабатывается обычно компилятором, а препроцессором