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 );
}
Generator.java 文件源码
java
阅读 27
收藏 0
点赞 0
评论 0
项目:protoc
作者:
评论列表
文章目录