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

やっぱり、独自路線を行くことに

今、必要なのは、関数型言語で書いた、とっても簡単なネイティブコンパイラ入門なのです。 なので、特にレジスタ割り付けは必要なくて、メモリに割り付けてしまうのがいいんです。 でもって、プログラムはリストになっていて、そのリストをコンパイルするだ…

アセンブラ出力練習ソース

最近は、時間もないので、1日に1回くらい、Ifまでのアセンブラ出力部を空で書けるように練習してみてます。 以下が、昼休みに書いたアセンブラ出力部のプログラムです。 作成順、1、hello world的プログラムを書きます。 2、test.cという、printIntとpri…

方針をちょっと変えた

今週末は、アセンブラ周りのif文について考えてました。 で、いろいろ悩んだ結果、mincamlのscalaバージョンのemit_x86.scala周りを修正して、というか削って、 こんな感じっていうプログラムを作って、いちお出来たことにしました。情けないんですけど、俺…

コンパイラ動く

現状、a=1+2*3+4/5みたいな式をb=1 c=2 d=3 e=4 f=5 a=b+c*d+e/f と展開するプログラムと a=b+c*d+e/f をi1 = c*d i2 = b + i1 i3 = e / f i4 = i2 + i3 a = i4 のように展開するプログラムを作って、コンパイル出来るようになりました。 ここの展開を自分で…

悔しいなぁっと

前、大崎に住んでたのだけど、自然に飢えてたのだけど、いいかんじに公園が出来てたので行ってみてきました。 なんか、おお、虫が鳴いている! って喜んで来ました。と喜んでるときに、id:w_o先生のx86_64勉強会の話をやっていたらしく、非常に悔しい思いを…

タイプによるサイズ変更対応版

// address.scala object address { sealed abstract class T case class IntT(a:Int) extends T case class ByteT(a:Int) extends T var address = 0 def main(argv:Array[String]) { val vars = List(("a",IntT(2)),("b",ByteT(5)),("a",IntT(3)),("d",Int…

アドレスを求める計算の練習

変数と値のリストから、アドレスを求めるプログラムを作ってみました。 マッチングやらタプルやら末尾再帰やら、やっぱりScala便利です。 object main { def main(argv:Array[String]) { val tes = List(("a",1),("b",2),("a",3),("d",5),("e",6)); val rc =…

scalaをマクロアセンブラのマクロ用言語にしてます

最近、川で遊んでて、emobileを流してしまったので、家でネットが出来ません。 かってくればいいんだけど、買いにいく気力がない。 ってことで、家だと黙々プログラム組むしかないんで、時間が出来たらアセンブラをいじってます。 昨日やったのは、Scalaの関…