2017-03-07 9 views
0

Sweet.jsとよく似たJavaScriptファイルに新しい構文を追加したいが、Clojure/ClojureScriptを使って変換を行う。ここで ClojureでJavaScriptに構文を追加

は私がやりたいものです。

//original 

specialFunction add(a, b) { 
    return a + b; 
} 


//transformed 

function add(a, b) { 
    return a + b; 
} 
registerSpecialFunction({ 
    name: "add", 
    args: ["a", "b"], 
    func: add 
}); 

私が間違っているんだけど、私はそれがで最高の仕事だと思うなら、私を修正してください:ASTにJSファイルを解析

  1. たASTではJavaScript
としてバックアウト変換
  • 印刷を行います0

    パーツ1とパーツ3のやり方に関するアイデアはありますか?私はここでも正しいアイデアを持っていますか?

  • +0

    なぜあなたはそれをしたいですか? – akond

    +0

    clojurescriptやjavaスクリプトのように見える構文を追加しますか? –

    +1

    また、入力形式の例を投稿してから、変換する必要があるものの一致するサンプルを投稿することができれば、回答に役立ちます(おそらくあなたにとっても役に立ちます)。 –

    答えて

    1

    頭が上がっているように、これは自明なことではないかもしれませんが、おそらく偉大な学習課題です。

    Clojureから同じコントロールが必要な場合は、Sweet.jsの概念やマクロ、Babylon(Babelのパーサー)のカスタムパーサー拡張のアイデアを再実装する必要があります。

    いずれにしても、JavaScriptの構文のスーパーセットを理解するパーサーを作成する必要があります。 instaparse (Clojure)peg.js (JavaScript)のようなパーサジェネレータを見たいかもしれません。

    次に、言語文法(Babelなど)に一定数の追加を行うか、マクロが独自の文法拡張/置換規則(Sweet.jsなど)を定義できるようにするかどうかを決定する必要があります。この時点で、パーサによって生成されたASTを変換するためのエンジンを作成する必要があります。

    マクロは、replacement rules like you'd find in C and C++からAST like you'd find in Clojureで直接動作する完全なコンパイル時評価関数まで、さまざまな方法で実装できます。

    この新しいツールでASTを解析して変換した後、有効なJavaScript ASTに変換する必要があります。これにより、escodegenのようなツールを使用して実際にAST自体からJavaScriptコードを生成することができるため、ESTree specificationとの互換性を維持しやすくなります。

    もちろん、peg.jsやescodegenのようなピギーバックツールは、ツールをClojureScriptとして作成し、NodeJSに対してコンパイルして実行する場合にのみ可能です。もう1つの選択肢は、JVMエコシステム内で互換性のあるツールを見つけ、代わりにJVMコンパイル済みClojureで使用することです。

    JavaScriptのエコシステムには、ESコードの解析、変換、生成に使用できるツールが豊富に用意されていますが、ClojureScriptを作成して実行している場合は、それはNodeの下で、実際にはJavaScriptの実行可能ファイルを作成しており、JavaScriptを最初から使い始める方が簡単かもしれません。