ANTLR, невозможно передать параметр в сгенерированный класс Lexer
Я использую Java в Eclipse. Мне удалось установить плагин ANTLR в Eclipse, и я запускаю класс TestRig, чтобы сгенерировать образ дерева и проверить правильность выражений по отношению к грамматике. В данный момент я запускаю класс TestRig из Eclipse, использую опцию Run Now Now Run Configuration, выбираю класс и устанавливаю аргументы.
Вместе со Стефано мы решили, что первым шагом для облегчения тестирования грамматики может быть упрощение сгенерированного дерева (в настоящий момент оно очень многословно), чтобы показать только основные узлы и листья. Мы можем сделать это, используя метод ParseTreeWalker.
Чтобы сделать это, я предполагаю, что сначала мне нужно сгенерировать дерево внутри кода, и именно здесь я столкнулся с проблемой. При передаче ANTLRInputStream в экземпляр сгенерированного класса VtlLexer ( VtlLexer lexer = new VtlLexer(input);) я получаю ошибку (VtlLexer не может принимать 'input' в качестве параметра):
String fileName = "someInputBasedOnYourGrammarRules.lang";
File file = new File(fileName);
FileInputStream fis = null;
try {
// Open the input file stream
fis = new FileInputStream(file);
// Create a CharStream that reads from standard input
ANTLRInputStream input = new ANTLRInputStream(fis);
// Create a lexer that feeds off of input CharStream
VtlLexer lexer = new VtlLexer(input);
// Create a buffer of tokens pulled from the lexer
CommonTokenStream tokens = new CommonTokenStream(lexer);
// Create a parser that feeds off the tokens buffer
VtlParser parser = new VtlParser(tokens);
// Begin parsing at rule prog HERE CHANGED TO START
ParseTree tree = parser.start();
// Close the input file
fis.close();
// Create a generic parse tree walker that can trigger callbacks
ParseTreeWalker walker = new ParseTreeWalker();
// Walk the tree created during the parse, trigger callbacks
walker.walk(new VtlListener(), tree);
System.out.println(); // print a \n after translation
// Walk the tree again to translate to java
walker.walk(new VtlTranslator(), tree);