2011-09-01から1ヶ月間の記事一覧

社内のDev会で発表しました

ちょっと前に、時間貰ったので、今作ってるコンパイラの話をしました。最近はふと、flashのパーサの仕様を記述しておいて、パーサ自動生成だーっと思って、作りはじめて、優先順位地獄にはまって大変です。 普通のパーサのほうが楽なんじゃないかと思い始め…

AST2ST

抽象構文木から構文木への変換プログラムです。 手抜きはありますが、いちお、変換出来マッス。 object st2ast { def main(argv:Array[String]) { val st = ( ("main","=",("fun","(","void",")",( ("a","=",("add","(",((1,",",2),",",3),")")), "@", ("pri…

変換イメージ

コンパイラを作る上で大切なのがどんなデータがどう変換されていくかというイメージです。 それがはっきりしていればずっと、作るのが楽なはず。 そして、それだけを書き出してみるのはいい練習になると思います。 ということで、書いてみました。ソースコー…

パーサを書きなれよう

コンパイラのバックエンドを作っていて、あとはフロントエンドをくっつければ完成なわけですが、 フロントエンドも1からささっと作りたいけど、疲れて作れないのは悔しい。 ということで、1からささっとパーサを作る練習をしております。scalaで、clean bo…

関数ができたぞと

とりあえず、今週末は関数コールのコンパイルを作りました。 1から作るのは初めてなので、偉い、リファクタリングが必要だぁ。構造が変わるぅ。分けわかんねぇ。 あっちもこっちも直さないといけねぇ。っと、いろいろ大変でした。 でもまぁ、出来ました。 …

関数の定義だけ考える

昨日は、なんだか悩んでしまってたのですが、 関数には関数の呼び出し部分と、関数定義の2つがあって、当たり前なんですけど、 昨日はごっちゃになっていたので今日は関数定義の方だけ考えることにしました。 ということで、もう一度最初から int a(int a,i…

関数コール

Macでの関数の呼び出しについて調べないと、関数が実装出来ません。 ということで、関数コールについて調べてみます。 void a(int a,int b, int c,int d, int e, int f, int g, int h,int i, int j) { printf("%d\n", a+b+c+d+e+f+g+h+i+j); } void ac() { a…