Я бы хотел адаптировать приведенный ниже код для использования 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 + "`");
}
}