Ejemplo n.º 1
0
  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;
  }
Ejemplo n.º 2
0
  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;
  }