我目前正在为此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秒)。
有人知道为什么吗?或者如何解决它?
布鲁诺
答案 0 :(得分:1)
诚实的事实是,Javascript可能只是一种慢得多的语言....你总是可以在chrome或其他浏览器中查看analytics tools,看看ANTLR运行时是否存在瓶颈或你的拥有几行代码,但有可能更多地与Javascript engine performance有关,因为Javascript完全是文本,java编译为字节码并使用虚拟机从较低级别运行,这意味着执行的字节码通常会执行很多更快,因为字节码到机器代码的解释将非常快,而Javascript必须逐行解释才能执行。