我正在尝试将语法从v3转换为v4,并且在找到所有合适的片段时遇到了一些麻烦。

在v3中处理字符串时,我使用了:

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

如何将其更改为在v4中工作?

最佳答案

对于ANTLR 4.7,API进行了一些更改(不建议使用ANTLRInputStream):

InputStream stream = new ByteArrayInputStream(input.getBytes(StandardCharsets.UTF_8));
lexer.setInputStream(CharStreams.fromStream(stream, StandardCharsets.UTF_8));
parser.setInputStream(new CommonTokenStream(lexer));

提示:如果要重用parser + lexer实例,请在设置其输入流后调用其“reset()”方法。

10-04 20:14