Преобразование ANTLRInputStream в CharStream - PullRequest
0 голосов
/ 17 октября 2018

У меня есть проект на основе antlr4 с классом Main, содержащим этот код:

    package com.progur.langtutorial;

import java.io.FileInputStream;
import java.io.IOException;


import org.antlr.v4.runtime.CharStream;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CommonTokenStream;

public class Main {

    @SuppressWarnings("deprecation")
    public static void main(String[] args) {
        try {
            ANTLRInputStream input = new ANTLRInputStream(
                    new FileInputStream(args[0]));  

            GYOOLexer lexer = new GYOOLexer(input);
            GYOOParser parser = new GYOOParser(new CommonTokenStream(lexer));
            parser.addParseListener(new MyListener());

            // Start parsing
            parser.program(); 
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

}

Однако, поскольку ANTLRInputStream устарел, мне нужно вместо этого использовать CharStream.Но когда я пытался использовать CharStream, я не мог двигаться дальше, чем

CharStream input = new ANTLRInputStream(
            new FileInputStream(args[0]));

Это потому, что я не знаю, как заменить часть выражения после знака '='.Я попытался CharStreams.fromFileName(new FileInputStream(args[0]));, но затем затмение заявляет эту ошибку «CharStreams.fromFileName не может быть разрешено для типа».Я также пытался CharStreams.fromFileName(args[0]); с тем же результатом.Я даже попробовал CharStream input = new CharStreams.fromFileName("test");, где «test» - это программа, написанная для проверки написанного мной синтаксического анализатора языка.Также было то же самое.

У меня также есть другая ошибка в parser.addParseListener(new MyListener());, где написано MyListener cannot be resolved to a type.Что бы это могло значить?В каждом уроке, который я смотрел, было случайное имя для «MyListener ()».Каким должно быть правильное утверждение для этого?

Спасибо!

1 Ответ

0 голосов
/ 17 октября 2018

Примерно так:

CharStream charStream = CharStreams.fromString("test");

, где "test" - сам вход для анализа.

Или когда вход находится в файле, сделайте это:

CharStream charStream = CharStreams.fromFileName("/path/to/file.ext");

Если это не сработает, вам нужно проверить возникшее исключение (скорее всего, файл находится не там, где его ищет ANTLR: попробуйте абсолютный путь).

...