haxe

haXeで作るプログラミング言語(14)

Lisp相当のマクロが使えるように変更今回の連載の最終回です。 Lisp相当のマクロを実装します。 マクロの定義はmac(変換前の式)変換後の式と書くことにします。 例) mac(mul('a,'b))a*b上のようにマクロを定義しておき、 mul(2,3)とすると2*3が計算されて6が…

haXeで作るプログラミング言語(13)

縁起を担いで2回にわけます。 シンボル 今回はシンボルという概念を導入することで、識別子と文字列を分けて考えることができるようにします。 シンボルはRubyやLispではおなじみの概念ですが、他の言語では聞きなれないものかと思います。 識別子は変数名…

haXeで作るプログラミング言語(12)

関数がクロージャになるように変更 みなさんは、クロージャってご存知でしょうか? 正確に説明となると難しいですが、簡単にいうと親の関数の環境も参照できる関数をクロージャといいます。 親の親の関数の環境も、親の親の親の関数の環境も、と祖先の環境を…

haXeで作るプログラミング言語(11)

改行で後置括弧演算子を結合しないようにする。 if(a){ b; } { c; }上の例のようにif文の、後ろに括弧があった場合、ローカルブロックになるのがC言語です。通常の手法であればif文の後ろにローカルブロックがあるだけとできます。 しかし、今の式ベースの言…

haXeで作るプログラミング言語(10)

後置演算子追加今回は、後置演算子を追加します。 後置演算子とは、後ろにつく演算子のことです。たとえば、1を足す演算子などがそれです。 i++ 今回作成する言語ではセミコロン';'も後置演算子として扱います。セミコロンは式と式を分離させる意味をもって…

haXeで作るプログラミング言語(9)

今回は前回作った文演算子を使って、if文とwhile文を作ります。 これは、無名関数を作成するfunと同じ章で書くとよかったなと思うので、 次に書くときはまとめることを検討しないととおもいます。 というか、内部表現をいろいろ変えたのでそのへんでおなかい…

無名関数?について

SiroKuroさんのトラックバックがあったので返信。たしかにfun(c)c+1 が文脈的に特別扱いしているように見えますね。修正しないと。 文演算子は無名関数以外にfor,if else ,while,do while,等とc言語の構文の多くを表すことを目的としています。だから、funを…

haXeで作るプログラミング言語(8)

今回は関数の定義を追加してa=fun(c)c+1 a(2)で、3が返るようにします。 そのために、文演算子というものを用意します。 文演算子?はぁ???なにそれ?って思うと思いますが、 要するに symbol ( param1 ) param2というようにかける物を文演算子と呼ぶこ…

haXeで作るプログラミング言語(7)

前回は括弧演算子を作りました。今回は後置括弧演算子を作ります。 後置括弧演算子とは、以下のような形のものとします。 関数呼び出し a() 配列アクセス a[] ブロック a{} C言語だと、関数呼び出しと配列呼び出し等にあたるものです。 {}はrubyのブロックの…

haXeで作るプログラミング言語(6)

今回は括弧演算子を作ります。括弧演算子って何?って思うかもしれませんが以下のようなものを括弧演算子と呼びます。 括弧 () {} [] で、括弧の中身が空であることを表すために、vidという特別なものを作ります。voidにしたいのだけど、voidだとぶつかるの…

haXeで作るプログラミング言語(5)

今回は変数を追加します。例)a = 1それと代入演算子は左結合と右結合の話もちょっとします。 同じ優先順位の演算子が2つ並んだ場合に、 どっちが優先して結合されるかっていうのが右結合とか左結合というわけ方になります。 変数への値の代入 変数への値の…

haXeで作るプログラミング言語(4)

さて、今回はさらに簡略化しまっす。 パーサを手書きでどんどん増やすのも手なのですけど、メンドクサイので再帰下降型の演算子順位法を使って、演算子をいくらでも追加できるようなパーサの構造に変えます。今回作ったのは以下のソースです。 enum Exp { ni…

haXeで作るプログラミング言語(3)

こんにちは。今日は3回目になりますね。 RubyのGCを弄り回しているid:authorNariさんがついにRuby1.8のGCの高速化を実現したそうです。 構文木の寿命が基本長いので隔離することで高速化できたようです。 すばらしいですね。継続は力なりだなぁっと思います…

haXeで作るプログラミング言語(2)

さて今回は、2パスの計算機を作ります。 パスってのはプログラムを動かす上での段階ってかんじで、何段に分かれてるかをあらわすのにいいます。 前回は、パースしながら計算してたので1パスでした。 今回は、1パースした結果を構文木に保存する 2構文木…

haXeで作るプログラミング言語(1)

Flash上でFlashのコンパイルを出来るライブラリがそろっている言語。 私の中でHaxeとはそんな言語です。 今回はひとつ、頑張ってhaXeで俺言語を作るってのを書いていこうと思います。 どんな言語を作るかというと、Algol文法にLISPのマクロと同等の能力を持…