I'm trying to convert my grammar from v3 to v4 and having some trouble finding all the right pieces.
In v3 to process a String, I used:
public static DataExtractor create(String dataspec) {
CharStream stream = new ANTLRStringStream(dataspec);
DataSpecificationLexer lexer = new DataSpecificationLexer(stream);
CommonTokenStream tokens = new CommonTokenStream(lexer);
DataSpecificationParser parser = new DataSpecificationParser(tokens);
return parser.dataspec();
}
How do I change this to work in v4?
For ANTLR 4.7 the API was changed a little (ANTLRInputStream is deprecated):
InputStream stream = new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8));
lexer.setInputStream(CharStreams.fromStream(stream, StandardCharsets.UTF_8));
parser.setInputStream(new CommonTokenStream(lexer));
Hint: if you want to re-use the parser+lexer instances, call their 'reset()' methods after setting their input streams.