実装の続き
今日は、、、。
while,break,continue,function,returnを実装しました。
あとは、actionscriptで動くように直しました。
なんと、actionscriptでは、正規表現が使えないという問題点がありまして、(AS3ではあるらしいのだけど)RegExpのactionscriptによる実装を拾ってきて、paraflaでコンパイルできるように改造して使えるようにしてみました。
paraflaは文法がかなり制限されていて、困ります。また、バグも結構あって、死ななくていいところで死んだりしますが、何とか動くようにしました。しかし、動作があまりにも遅すぎました。(短い1文を構文解析するのに1秒とかかかってしまう)お!動いた!でも、遅いよ。ってことで終わってしまいました。なんで、IEのJavaScriptより遅いのよ!
あとは、インタラクティブにいじれるようにしたら、公開できるかと思いますが、だから、どーしたって感じかもしれません。
見難い言語が出来ただけジャンってことになりかねない。というか、なっているので。
でも、とてもシンプルな言語なので、(全部で現在、700行くらい)いろいろいじって遊ぶにはいい言語だと思います。その割に、演算子の優先順位も変えられるし、字句解析のルールも変更できます。
次は、マクロ機能を作ろうと思います。
まずは、簡単な、defmacro[name](valuelist){statements}
cのmacroと同じような、単純置き換えです。
defmacro[add](a,b){(a+b)}
と言った感じな仕様にしようと思います。
defmacro[add](a,b){(a+b)}stdio.write(add(1,2)+"\n")
で
3
と出ればいいかなって感じで。
このマクロは、実行する前に展開するので、今回作った実行環境のノウハウは役に立つと思います。