sumi
ぜんぜん、簡単ではない、簡単なインタプリタにテストをつけて書き直しをしました。 14回でここまで作るソースもあるのですけど、解説書く前にいろいろやることがあるとおもうので まだまだ先になりそうです。 Go言語 C言語の後継としていい線いってそうな…
土曜日は、仙台オータムセミナーの携帯サイトの2009年バージョンの対応をしてきました。 昨日は、片平堂で仙台hackathon#02をしてきました。今週は結構疲れてたのと計画から離れたことをしてたので進捗具合はそれほどよくなかった。 でも、いずれ必要になる…
土曜日は片平堂さんのオフィスを借りて、勉強会をしてきました。 勉強会というか、もくもく作る会。。。近所の洋食屋さんのご飯がうまかった。おのおのの目的に向かって意見を聞いたり、言ったりしてきました。 katahiraさんのは、AIRのアプリ h_sakuraiは式…
今回はRubyでプログラミング言語を作ります。プログラミング言語といってもいろいろありますが、今回作る言語は式をベースとしたJavaScriptのようなインタプリタ言語です。第一回目は簡単な計算機を作ります。対象はある程度プログラミング言語の知識がある…
LISP級マクロ付きのインタプリタをPHPで書いてみました。 作る順番は、だいたい決まってきて、必要ない機能はある程度削られてますけど、 一番本質的な部分はつかめると思います。以下ソースです。
LISP級マクロ付きのインタプリタをRubyで書いてみました。 書き方は、じっくり書いていきますが、haXeで書くより綺麗に書けたと思います。 次はphpでざくざくっと書いてみようと思います。以下ソースです。
C言語風でBNFが短いと言うと しかし、そのBNFには存在しない、シンタックスシュガーがあります。 そのシンタックスシュガーとは一体なんなんですか? というところがよくわかりません。 勉強不足ですスイマセン。 Ioは結局のところオブジェクト指向な言語で…
たぶん、javascriptを直だと色々セキュリティ的に問題ありそうだけど、sumiだとdocumentオブジェクトや、ならそのへんは大丈夫
IT戦記を見て、sumi言語に適応してみた。 <script src="smi.js"> print("hello world<br>"); </script> とhtmlに書けば、動きます。 ついでに、sumiを短くして、smiにしてみた。 http://sakurai.s59.xrea.com/compact/compact/smi.html
Ocamlあたりのmatch式のsumiバージョンです。 f:(a){ match(a){ case(qq{$a+$b}){qq{add}} case(new XOX(qq{$a},qq{$b},qq{$c})){qq{xox}} default{a} } } print(f(qq{1+2})+"\n") print(f(qq{1*2})+"\n") print(f(qq{abc})+"\n") で、 add xox abc abcとい…
xox(100,_) syntax(qq{$a _ $b}){$a+$b} 1 _ 2 http://sakurai.s59.xrea.com/compact/compact/sumi.html?in=xox%28100%2C_%29%0D%0Asyntax%28qq%7B%24a+_+%24b%7D%29%7B%24a%2B%24b%7D%0D%0A1+_+2%0D%0Aこれで、3が返ります。まだ、完全ではないかんじだけど…
switch式は a:"a" switch(a){ case("a"){1} case("b"){2} default{3} }で、1が返ります。 http://sakurai.s59.xrea.com/compact/compact0.0.5/sumi.html?in=a%3A%22a%22%0D%0Aswitch%28a%29%7B%0D%0Acase%28%22a%22%29%7B1%7D%0D%0Acase%28%22b%22%29%7B2%7D…
通りすがりの人に、普通のASTと何が違う言われて、んんん? 普通のASTってどんなものなのかいまいちわかってないので何ともいえません。Template HaskellとかDylanを見直して理解しないと差がわからない。 抽象構文木じゃなくて、只の構文木であるところが違…
S式はATOMをCONSセルで結合しています。基本は。 C式はこれを拡張して、XOX,XO,OY,XOY,XPXP,PXPという6つ種類の演算子で結合しています。 sumi言語はC式で記述されています。 LISPは構造化データ=プログラムです。 JavaScriptは文字列データ=プログラムです…
sumi言語で、quote()で囲まれた部分は構文木を返すようにしてみました。 そして、sumi言語で作ったmatch関数を使って構文木をマッチングできるように なりました。 print(match( quote($f($arg){$body}), quote(a.b(a,b,c){a+b*d}),{} )+"\n")上の例では、 $…
sumiとは、(C言語っぽい汎用データ言語の)C式と呼んでいる言語のサブセットによって 構成されるシンプルなScheme用メタランゲージである。 なんて感じの適当、M式to Schemeを作ってみてます。これが、全然C式と綺麗に融合してくれない。(T-T)Scheme Usual …