Generator.java 文件源码

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

项目:protoc 作者:
public void parse(InputStream stream, ProtoParserBaseVisitor<Void> visitor, boolean trace) throws IOException {
    final ANTLRInputStream input = new ANTLRInputStream( stream );
    final ProtoParserLexer lexer = new ProtoParserLexer( input );
    final CommonTokenStream tokens = new CommonTokenStream( lexer );
    final ProtoParserParser parser = new ProtoParserParser( tokens );
    final List<String> parseErrros = new LinkedList<String>();
    parser.addErrorListener( new BaseErrorListener() {
        @Override
        public void syntaxError(Recognizer<?, ?> recognizer,
                                Object offendingSymbol,
                                int line,
                                int charPositionInLine,
                                String msg,
                                RecognitionException e) {
            List<String> stack = ( (ProtoParserParser) recognizer ).getRuleInvocationStack();
            Collections.reverse( stack );

            String parseError = String.format( "line %s:%s at %s: error=%s", line, charPositionInLine, offendingSymbol, msg );

            LOGGER.warn( "rule stack: " + stack );
            LOGGER.warn( parseError );
            parseErrros.add( parseError );
        }
    } );
    if ( failOnParseErrors && !parseErrros.isEmpty() ) {
        for ( String err : parseErrros ) {
            LOGGER.error( err );
        }
        throw new IllegalStateException( "schema has errors" );
    }
    parser.setTrace( trace );
    ProtoContext protoContext = parser.proto();
    visitor.visit( protoContext );
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号