TestRig.java 文件源码

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

项目:codebuff 作者:
protected void process(Lexer lexer, Class<? extends Parser> parserClass, Parser parser, InputStream is, Reader r) throws IOException, IllegalAccessException, InvocationTargetException, PrintException {
    try {
        ANTLRInputStream input = new ANTLRInputStream(r);
        lexer.setInputStream(input);
        CommonTokenStream tokens = new CommonTokenStream(lexer);

        tokens.fill();

        if ( showTokens ) {
            for (Object tok : tokens.getTokens()) {
                System.out.println(tok);
            }
        }

        if ( startRuleName.equals(LEXER_START_RULE_NAME) ) return;

        if ( diagnostics ) {
            parser.addErrorListener(new DiagnosticErrorListener());
            parser.getInterpreter().setPredictionMode(PredictionMode.LL_EXACT_AMBIG_DETECTION);
        }

        if ( printTree || gui || psFile!=null ) {
            parser.setBuildParseTree(true);
        }

        if ( SLL ) { // overrides diagnostics
            parser.getInterpreter().setPredictionMode(PredictionMode.SLL);
        }

        parser.setTokenStream(tokens);
        parser.setTrace(trace);

        try {
            Method startRule = parserClass.getMethod(startRuleName);
            ParserRuleContext tree = (ParserRuleContext)startRule.invoke(parser, (Object[])null);

            if ( printTree ) {
                System.out.println(tree.toStringTree(parser));
            }
            if ( gui ) {
                Trees.inspect(tree, parser);
            }
            if ( psFile!=null ) {
                Trees.save(tree, parser, psFile); // Generate postscript
            }
        }
        catch (NoSuchMethodException nsme) {
            System.err.println("No method for rule "+startRuleName+" or it has arguments");
        }
    }
    finally {
        if ( r!=null ) r.close();
        if ( is!=null ) is.close();
    }
}
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号