Чтение команд из STDIN и выполнение каждой по мере ввода - PullRequest
1 голос
/ 26 сентября 2011

Я бы хотел адаптировать приведенный ниже код для использования ANTLRReaderStream, поэтому мне не нужно создавать новый парсер для каждой строки.Но он должен обрабатывать каждую строку индивидуально, что я не имею ни малейшего представления о том, как это сделать в настоящее время, и я не вижу способа спросить парсер, есть ли у него данные готовы (или что бы то ни было эквивалентно String line = stdin.readLine().

основной цикл:

stdin = new BufferedReader(new InputStreamReader(System.in));

while (true) {
    String line = stdin.readLine();
    if (line == null) {
        System.exit(0);
    }

    processLine(line.trim());
}

обрабатывать одну строку:

public void processLine(String line) throws IOException {
    try {
        QuotaControlCommandsLexer lexer = new QuotaControlCommandsLexer();
        lexer.setCharStream(new ANTLRStringStream(line));           
        CommonTokenStream tokens = new CommonTokenStream(lexer);
        QuotaControlCommandsParser parser = new QuotaControlCommandsParser(tokens);

        Command cmd = parser.command();
        boolean result = cmd.execute();         
        output(result ? "1" : "0");
        stdout.flush();
    }
    catch (RecognitionException e) {
        logger.error("invalid command: " + line);
        output("ERROR: invalid command `" + line + "`");
    }
}

1 Ответ

1 голос
/ 22 мая 2012

Если используется JDK1.6, мы можем сделать основной цикл следующим образом:

    Console console = System.console();

    if (console != null) {
        String line = null;

        while ((line = console.readLine()) != null) {
            processLine(line.trim());
        }
    } else {
        System.out.println("No console available!!");
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...