Javascriptプリプロセッサ

JavascriptJavascriptプリプロセッサを作れば、Javascriptでマクロが使えるようになるんじゃね、と思ったので作ってみた。

テストページ(Firefoxで確認、Operaでは動かない)

パーサはNarcissus(Javascript on Javascript)のものを流用したので苦労してない。ただ、構文木を文字列に落す部分は自分で書いている。

ちなみに、今使えるのは以下の機能のみ。

  • 関数宣言
  • 初期値付きの変数宣言(OK:var x=0,NG:var x)
  • マクロ宣言
  • 加算(+)
  • 代入
  • 関数呼び出し。オブジェクトを経由した関数呼び出し(hoge.f)は未対応

例えば、0を代入するようなマクロは次のように書ける。

macro reset(v){ 
  return parse(v+'=0')
}

reset(x); // x = 0;と同じ

作ってみて思ったんだけど、関数呼び出ししかマクロにできないのは今ひとつかもしれない。やっぱりcamlp4のようにパーサ部分をいじれるようにするべきなのかもしれない。