RhinoでgotoとかArrow Functionとかやって遊んでたら、CTOに「Rhinoはオワコン、時代はNashorn(意訳)」と言われたのでNashorn触りました。
ビルドの方法はこの辺を参考にしました。
https://wiki.openjdk.java.net/display/Nashorn/Building+Nashorn
個人的にどの程度メタプログラミングができるか気になったのでParser部分を呼び出してみました。
NodeVisitorに各構文のenter/leaveをハンドリングできるメソッドが用意されているのでesprimaレベルの使い勝手が期待できます。ただRhinoのJavaAdapterが見当たらなかったのでNodeVisitorを継承するコードがECMAScript invalidな構文になってしまうあたりはあまり好みではありません。あと私が試したバージョンだと暗黙の文字列変換にバグがあって、TokenType#toStringがnullを返すとConsString内でNullPointerExceptionになります。
ちなみにConsStringは文字列のRope表現をするためのクラスで、LispのCons Cellと同じ構造をしています。Rhinoにも同名のクラスがあり微妙に実装方法が違うので興味があればコードを読んでみると面白いと思います。
関連文書:
最近のコメント