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);

0 ответов

Другие вопросы по тегам