ABC

boolean operatorに対応

http://github.com/mzp/scheme-abc/tree/master bool値を返す演算子がいくつか使えるようになった。が、リテラルの#tや#fには対応していない中途半端っぷり。#tのパース、面倒そうだなぁ。 $ cat bool.scm (print (> 1 10)) $ ocamlbuild main.byte -- bool.…

if文が難しい

if文への対応が予想以上に難しい。 jumpに、ジャンプするバイトオフセットを命令中に埋め込まないといけない。 でも、命令をバイト列に変換するのは出力直前なので、命令を生成する段階ではバイトオフセットを計算できない。しかも、命令の長さは可変長のも…

命令を追加するのが面倒

scheme-abcで命令やASTをひとつ追加するたびに、バリアントをひとつ増やして、match ... withの節をひとつ増やすのが非常に面倒。Expression Problemだよなぁ。 OCamlのオブジェクトシステムを使えば普通に解決できそうだけど、それはそれでなんかヤダ。

if文関係の命令

AVM2 Overviewだと命令がABC順にならんでて読みづらいので、整理。tamarinのcore/opcodes.hだとオペコード順に並んでて読みやすいよ。 条件分岐 命令 補足 label branchするだろうところに書いておくと、本当にジャンプできるかチェックしてくれる ifnlt not…

加算ができた

やった。加算ができたっ。 $ cat example/add.scm (print (+ 1 2)) $ ./main.byte -o add example/add.scm $ avmplus add 3トークンを作るときに、"+1"(整数の1)と"+ 1"(+というシンボルと1という整数)を区別するのが大変だった。整数のパースを先にやると+…

整数リテラルが使えるようになった

http://github.com/mzp/scheme-abc/tree/master整数リテラルが使えるようになった。やった! $ cat example/int.scm (print 42) $ ./main.byte example/int.scm $ avmplus a.abc 42

GitHub登録

Schemeっぽい言語コンパイラ for ABCをGitHubに登録してみた。http://github.com/mzp/scheme-abc/tree/master

Hello,world!!がコンパイルできたっ

Schemeっぽい言語をコンパイルして、ActionScript3 Bytecode(ABC)を出力するコンパイラを最近書いている。 やっとHello,world!!がコンパイルできるようになった。いえい。 $ cat foo.scm ;; First Program (print "Hello," "world") (print "It's wonderfull…

AVM2での関数呼び出し

ABC(ActionScript3 Bytecode)で、関数をどのように呼び出しているかのメモ。 print("Hello,world!!"); をダンプすると次のバイトコードが得られる。 6 findpropstrict print 8 pushstring "Hello,world!!" 10 callproplex print (1) 13 pop finpropstrictで…

ActionScript3 Bytecodeを手書きしてみた

http://wiki.libspark.org/wiki/AVM2/Overviewを参考に、ABC(ActionScript3 Bytecode)を手書きしてみた。 動機は、 ABCを出力するコンパイラを作りたい! u30とかのABCの基本データ方を扱えるモジュールがいるから、作った テストするために、バイトコードを…

ABCのバイトコード生成

ABC(ActionScript3 ByteCode)をどうやって生成しているか気になったので、Tamarinのソースツリーに含まれているECMAScript4のコード生成部分を追ってみた。 とりあえず、何もせず終了するだけのプログラムを生成するときのことを想定している。要するに空の…

Sceme-abc

ABC

読み方は『すきーむ・あべし』。 ActionScript3 VMで動くバイトコードを吐くSchemeコンパイラっぽい何か。完成したら、『魔法言語リリカルLisp As』を作りたいなぁと思ってる。 Scheme-abc(GitHub) http://github.com/mzp/scheme-abc/tree/master Twitter(コ…