Ich entwickle derzeit eine ANTLR4 JavaScript-Listener für diese Grammar.ANTLR4 JavaScript Target sehr langsam
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;
}
}
Das Problem ist, dass die Leistung ist sehr schlecht (übernimmt zwei min) mit einem Eingang wie folgen aus:
import codescape.Dogbot;
public class MyDogbot extends Dogbot{
public void run() {
turnLeft();
move();
}
}
Die gleiche Grammatik und die gleichen Zuhörer in Java führt viel schneller (> 2 Sek).
Jeder eine Idee warum? Oder wie man es repariert?
Bruno
Ich mache auch einen JS Zielparser mit ANTLR4. Es ist normalerweise langsam, aber es ist nicht unerträglich langsam. Was ich mache, wenn ich auf ein unerträgliches Ereignis stoße, ist, dass ich die Grammatik irgendwie modifiziere und die Geschwindigkeit normalerweise drastisch verbessere. – yoshi
mit demselben Problem konfrontiert. Parsing durch Javascript Antlr4 ist viel langsamer als Java Antlr4. –