ConfigurationParser.java 文件源码

java
阅读 28 收藏 0 点赞 0 评论 0

项目:rocana-configuration 作者:
public <T> T parse(Reader reader, Class<T> targetType) throws IOException {
  logger.debug("Parsing configuration for type:{}", targetType);

  ANTLRErrorListener listener = new BaseErrorListener() {

    @Override
    public void syntaxError(Recognizer<?, ?> recognizer, Object offendingSymbol, int line, int charPositionInLine, String msg, RecognitionException e) {
      throw new ConfigurationException(String.format("Unable to parse configuration: %s (at line:%s pos:%s)", msg, line, charPositionInLine), e);
    }

  };

  TypeDescriptor typeDescriptor = TypeMapping.ofType(targetType);

  ANTLRInputStream inputStream = new ANTLRInputStream(reader);
  ConfigurationLexer lexer = new ConfigurationLexer(inputStream);
  lexer.removeErrorListeners();
  lexer.addErrorListener(listener);

  CommonTokenStream tokenStream = new CommonTokenStream(lexer);
  com.rocana.configuration.antlr.ConfigurationParser parser = new com.rocana.configuration.antlr.ConfigurationParser(tokenStream);

  parser.removeErrorListeners();
  parser.addErrorListener(listener);

  ParseTree parseTree = parser.config();

  logger.debug("Parsed configuration:{}", parseTree.toStringTree(parser));

  Visitor<T> visitor = new Visitor<>(typeDescriptor);

  visitor.visit(parseTree);

  logger.debug("Configured object:{}", visitor.getResult());

  return visitor.getResult();
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号