ANTLR4 JavaScript目标非常慢

时间:2016-07-25 14:59:37

标签: javascript java typescript grammar antlr4

我目前正在为此Grammar开发一个ANTLR4 javascript侦听器。

    var _require = require;
    var antlr = _require('./antlr4/index');
    var javaLexer = _require('./generated/JavaLexer');
    var javaParser = _require('./generated/JavaParser');
    var javaListener = _require('./generated/JavaListener');

    declare function require(name:string);

      class CodeAnalysis {

        input: String;

        constructor(input:String) {
          this.input = input;
          this.antlrStack();
        }

    private antlrStack() {
      console.log(this.input);
      var chars = new antlr.InputStream(this.input);
      var lexer = new javaLexer.JavaLexer(chars);
      var tokens = new antlr.CommonTokenStream(lexer);
      var parser = new javaParser.JavaParser(tokens);
      var listener = new javaListener.JavaListener();
      parser.buildParseTrees = true;
      var tree = parser.compilationUnit();


      antlr.tree.ParseTreeWalker.DEFAULT.walk(listener, tree);
    }

    public getInput() {
    return this.input;
    }


   }

问题是使用如下输入表现非常糟糕(花费超过两分钟):

import codescape.Dogbot;
public class MyDogbot extends Dogbot{

  public void run() {

    turnLeft();
    move();

  }
}

Java中相同的语法和相同的监听器执行速度更快(> 2秒)。

有人知道为什么吗?或者如何解决它?

布鲁诺

1 个答案:

答案 0 :(得分:1)

诚实的事实是,Javascript可能只是一种慢得多的语言....你总是可以在chrome或其他浏览器中查看analytics tools,看看ANTLR运行时是否存在瓶颈或你的拥有几行代码,但有可能更多地与Javascript engine performance有关,因为Javascript完全是文本,java编译为字节码并使用虚拟机从较低级别运行,这意味着执行的字节码通常会执行很多更快,因为字节码到机器代码的解释将非常快,而Javascript必须逐行解释才能执行。