public static StringTemplate fromString(String pattern) {
class DescriptiveErrorListener extends BaseErrorListener {
public List<String> errors = new ArrayList<>();
@Override
public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol,
int line, int charPositionInLine,
String msg, RecognitionException e) {
errors.add(String.format("%d:%d: %s", line, charPositionInLine, msg));
}
}
final DescriptiveErrorListener error_listener = new DescriptiveErrorListener();
final StringSubstitutionLexer lexer = new StringSubstitutionLexer(CharStreams.fromString(pattern));
lexer.removeErrorListeners();
lexer.addErrorListener(error_listener);
final StringSubstitutionParser parser = new StringSubstitutionParser(new UnbufferedTokenStream(lexer));
parser.removeErrorListeners();
parser.addErrorListener(error_listener);
parser.setErrorHandler(new BailErrorStrategy());
final StringSubstitutionParser.ExprContext result = parser.expr();
if (result.exception != null)
throw new IllegalArgumentException("errors during parsing: " + pattern, result.exception);
else if (!error_listener.errors.isEmpty())
throw new IllegalArgumentException("syntax errors during parsing:\n" + String.join("\n", error_listener.errors.stream().map(s -> " " + s).collect(Collectors.toList())));
return result.s;
}
StringTemplate.java 文件源码
java
阅读 21
收藏 0
点赞 0
评论 0
项目:monsoon
作者:
评论列表
文章目录