private static ParserRuleContext createParseTree(String source, Definition definition) { final ANTLRInputStream stream = new ANTLRInputStream(source); final ErrorHandlingLexer lexer = new ErrorHandlingLexer(stream); final PlanAParser parser = new PlanAParser(new CommonTokenStream(lexer)); final ParserErrorStrategy strategy = new ParserErrorStrategy(); lexer.removeErrorListeners(); lexer.setTypes(definition.structs.keySet()); parser.removeErrorListeners(); parser.setErrorHandler(strategy); ParserRuleContext root = parser.source(); // System.out.println(root.toStringTree(parser)); return root; }
static Executable compile( Loader loader, final String name, final String source, final Definition custom, CompilerSettings settings) { long start = System.currentTimeMillis(); final Definition definition = custom == null ? DEFAULT_DEFINITION : new Definition(custom); // long end = System.currentTimeMillis() - start; // System.out.println("types: " + end); // start = System.currentTimeMillis(); // final ParserRuleContext root = createParseTree(source, types); final ANTLRInputStream stream = new ANTLRInputStream(source); final ErrorHandlingLexer lexer = new ErrorHandlingLexer(stream); final PlanAParser parser = new PlanAParser(new CommonTokenStream(lexer)); final ParserErrorStrategy strategy = new ParserErrorStrategy(); lexer.removeErrorListeners(); lexer.setTypes(definition.structs.keySet()); // List<? extends Token> tokens = lexer.getAllTokens(); // for (final Token token : tokens) { // System.out.println(token.getType() + " " + token.getText()); // } parser.removeErrorListeners(); parser.setErrorHandler(strategy); ParserRuleContext root = parser.source(); // end = System.currentTimeMillis() - start; // System.out.println("tree: " + end); final Adapter adapter = new Adapter(definition, source, root, settings); start = System.currentTimeMillis(); Analyzer.analyze(adapter); // System.out.println(root.toStringTree(parser)); // end = System.currentTimeMillis() - start; // System.out.println("analyze: " + end); // start = System.currentTimeMillis(); final byte[] bytes = Writer.write(adapter); // end = System.currentTimeMillis() - start; // System.out.println("write: " + end); // start = System.currentTimeMillis(); final Executable executable = createExecutable(loader, definition, name, source, bytes); // end = System.currentTimeMillis() - start; // System.out.println("create: " + end); return executable; }