2016-07-25 10 views
2

私は現在、GrammarのANTLR4ジャバスクリプトリスナーを開発中です。 >(ANTLR4 JavaScriptターゲットが非常に遅い

import codescape.Dogbot; 
public class MyDogbot extends Dogbot{ 

    public void run() { 

    turnLeft(); 
    move(); 

    } 
} 

同じ文法とJavaで同じリスナーが速く、多くのことを行います。

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; 
    } 


    } 

問題は、パフォーマンスが非常に悪いです。このような入力を(2分を引き継ぐ)ということです2秒)。

誰かアイデアなぜですか?またはそれを修正する方法?

ブルーノ

+0

ANTLR4を使用してJSターゲットパーサーも実行しています。それは通常遅いですが、それは耐え難いほど遅くはありません。私が苦しんでいるときに遭遇するのは、何とか文法を変更することで、スピードが大幅に向上します。 – yoshi

+0

は同じ問題に直面しています。 javascript antlr4を解析するのは、java antlr4よりはるかに遅いです。 –

答えて

1

が正直な真実はそれだけでJavascriptがはるかに遅い言語であるということであってもよいことである....あなたは常にクロムや他のブラウザでanalytics toolsを表示し、ANTLRランタイムのボトルネックがあるかどうかを見ることができましたあなた自身の数行のコードを持っているかもしれませんが、チャンスはJavascript engine performanceともっと関係しています.Javascriptは完全にテキストで、Javaはバイトコードにコンパイルされ、仮想マシンを使って下位レベルから実行されるため、通常は実行されるバイトコードはバイトコードの機械コードへの解釈は非常に高速であり、一方、Javascriptは行ごとに解釈されて実行されなければならない。