2007-01-01から1年間の記事一覧

うお、もう仕事、行かないと。

番兵君をたくさん置いて、XMLの短いバージョンのパーサだけ作ってみた。 class dom{ char[] name; char[][char[]] attr; dom[] childs; int id; void parse(char[] str) { char c; while((c = str[id++]) != 0) { name ~= c; } // attrs while((c = str[id++…

エラーメッセージをまともにする。

SAC

ちょっとだけ、まともにしてみた。lineも出してみた。

ショートコーディングは意味があるぞ。

J2ME用のライブラリは小さければ小さいほどいいと思う。 なので、ショートコーディングの技で特に、バイナリサイズを小さくするってところは ビジネスに生きるじゃんと思ったのでした。 XMLのパーサが2kとかで便利って話を聞いて。。。 ん?俺もそのくらいの…

リアルタイムOSが動いてたよ。

ちうか、仕事で使ってました。と、Jに突っ込もうと思ってパスワードがわからず、 というか、長すぎてめんどくさいので諦めて、悔しいのでここに書いてみる。

出た!

ので、ドキュメントをちょいと書きました。 if式、switch式、while式、whileメソッド、with式あたりを。 それだけって言えばそれだけですが何か? http://sakurai.s59.xrea.com/compact/index.cgi?p=sumi どーもドキュメントって苦手。だけど書かないと誰も…

出ないです。

なんだか、寂しい気分で、やる気が出ません。 うう、時間だけがすぎていく。もったいない。

switch,while式を追加。

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を見直して理解しないと差がわからない。 抽象構文木じゃなくて、只の構文木であるところが違…

CompactというかC式と言ってるものの何が凄いのか

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")上の例では、 $…

2進数表記追加

話題の2進数表記を追加してみました。 http://sakurai.s59.xrea.com/compact/compact0.0.2/sumi.html?0b1111+0b1 ついでに、URLのクエリー文字列にプログラムを書くと実行されるようにしてみました。http://sakurai.s59.xrea.com/compact/compact0.0.2/sumi…

仕様

式言語Compactの仕様書を作成中です。 http://sakurai.s59.xrea.com/compact/ ドキュメントを書くのはトテモ苦手なので、困ってますが、とりあえず、 かけるところからガツガツ書いてみてます。

APIを分離してみました。

とりあえず、XMLにあやかって、Bison風の仕事をするものをcsax、 jjtree的なツリーを生成するものをcdomとか適当に名前を付けてそれぞれ分離してみました。 で、目標?のFizzBuzzが動くようにしてみました。 http://sakurai.s59.xrea.com/compact/compact…

俺と声(1)

なんか、id:yaneuraoさんとid:Ozyさんが音楽の話を書いてるので俺も書いてみようかと思います。 俺の場合、幼稚園のときに英語を使った授業をする幼稚園に通い始めたときの 発音がちがう。「バナナ」じゃない。「バネェナァ」ってかんじ。 「アップル」じゃ…

式ベースのパーサと処理系

式ベースのパーサとインタプリタを作ってみました。 {a:(a,b){a+b};b:(a,b){a*b}(5,2);c:(a(10,20)+b)*5;d:{a:a;c:c}}.d このような、式をパースして、実行すると、 {a:Lambda([a,b],XOX(a,+,b)),c:200} のような、式が帰って来ます。 今までは、括弧は特別…

演算子定義できるパーサとインタプリタ

ほぼ、C言語の演算子が定義できてて+αの演算子がついてる言語です。 最初構文木を作って、それをインタプリタで動くいう。 なにが、新しいのかというと、プログラムは数値や識別子以外は演算子でつながってるってこと。 演算子でつながってるだけなので、構…

100オーダーな優先順位付き演算子定義構文解析器

優先順位をリストで管理してやることで、とびとびの値の優先順位を付けられる ようなパーサを作ってみました。サンプル http://sakurai.s59.xrea.com/diary/100order.html以下ソース

優先順位付き演算子定義の可能な小さな構文解析器

以下のような簡単な構文解析器を作ります。前も書いたような気がしますが、 たまに、やらないと忘れて難しいことになってしまうし。 あろはさんが面白そう言ってたのでまぁ、のせて見ます。 出来たもののアドレス、、、。 http://sakurai.s59.xrea.com/diary…

エコする充電器

なにやら、NHK見てたら、携帯電話の充電器をコンセントにつなげっぱなしにしておくと、 待機電力を食うという話をしていた。携帯を持っている人口がかなり多いので、 それをはずしておくだけでずいぶんエコらしい。 しかし、はずすのはめんどくさい。 スイッ…

Mini_0

今回はSECD ManiaのMini_0 SECDマシンのjavascript版です。 このマシンは Henderson を継承しています。 オリジナルの Henderson コンパイラはただ1つだけ 算術構文を使っています - (ADD (QUOTE 1) x)。1. SECDからすべての算術コードを削除し、 INC コー…

selfjs.html

<script src="secd_cod.js"></script> <script src="compiler.js"></script> <script> Array.prototype.toString=function(){return"["+this.join(",")+"]"} function main() { document.getElementById("compiler.secd.new").value=""; document.getElementById("fout").value="initialize ...\n"; setTimeout(main2,100);…

compiler.js

function COMPILE (E) { return COMP(E,null,[4,[21,null]]) function ATOM(E){ return E==null || typeof(E) != "object" } function COMP (E,N,C) { if(ATOM(E)) return [1,[LOCATION(E,N),C]] switch(E[0]){ case "QUOTE": return [2,[E[1][0],C]] case "…

HendersonのSECDマシンコンパイラのJavaScript版

compiler.lispは、lispがわかっていればいいのかもしれませんが、 括弧がやはり、読みにくいのでjavascriptに移植して可読性UP+高速化しました。 ファイル名はcompiler.jsです。 selfjs.htmlを開くと、compiler.lispをcompiler.jsを使ってコンパイルして…

はてなメッセージが恐い

メールをチェックしていたら、こんなメールが!! 送信者 h_sakurai あて先 h_sakurai 件名 [Hatena::S] [javascript] 継続インタプリタ これはなに?? http://d.hatena.ne.jp/h_sakurai/20070917#p1 http://m.hatena.ne.jp/送信者 h_sakurai あて先 h_saku…

self.html

<script src="secd_cod.js"></script> <script> function main() { document.getElementById("fout").value="initialize ...\n"; setTimeout(main2,100); } function main2() { init(); printf("Reading compiler code ...\n"); flush(); setTimeout(main3,100); } function main3() { readSFrom("compil…

compiler.secd

(6 2 NIL 3 (1 (0.0) 2 NIL 14 8 (2 NIL 9) (2 NIL 1 (0.0) 11 13 1 (1.5) 4 1 (0.0) 10 11 13 9) 5) 13 3 (1 (0.0) 2 NIL 14 8 (2 NIL 9) (2 NIL 1 (0.0) 11 13 1 (1.4) 4 1 (0.0) 10 10 13 9) 5) 13 3 (6 2 NIL 3 (1 (0.0) 11 2 1 1 (0.0) 10 15 13 5) 13 …

compiler.lisp

(LETREC COMPILE (COMPILE LAMBDA (E) (COMP E (QUOTE NIL) (QUOTE (4 21)))) (COMP LAMBDA (E N C) (IF (ATOM E) (CONS (QUOTE 1) (CONS (LOCATION E N) C)) (IF (EQ (CAR E) (QUOTE QUOTE)) (CONS (QUOTE 2) (CONS (CAR (CDR E)) C)) (IF (EQ (CAR E) (QUO…

secd_cod.js

/* secd_mem */ var maxReg = 10; var regs = new Array(maxReg + 1); function error(s) { printf("\n"+s+" !\n"); flush(); throw s; } function showStat() { printf("--- SECD stats: Loops= "+loopCnt+"\n"); } /** * regs[s]のcarをregs[d]に入れる。 …

HendersonのSECDマシン

SECD ManiaのHendersonのSECDマシンをjavascriptに移植したので、載せておきます。 self.htmlを開くとcompiler.secdコードを使ってcompiler.lispを セルフコンパイルします。結果が画面上に表示されます。 ファイル読み込みは、AJax使ってます。 VMなので、…