2014-05-01から1ヶ月間の記事一覧

OCamlの型検査の働きもしくは多相性とガベージコレクションが共通して持つ物

結局、次に作成するコンパイラはCamlP4は使わずにocamlyaccとocamllexでMinCamlに近い形で作る事にしました。 そして、テストファーストで四則演算、それ以外の関係演算子や比較演算子、論理演算子等を加え、LLVMに出力し、参照を導入して、mutableな変数の…

後置、前置、cast

とりあえず、三項演算子以外のCの式のほとんどをカバーする所まで作ってみました。 プリプロセッサとして、Lisp的なマクロを行う場合はこの方式は良さそうだけど、今はユーザー定義の演算子は必要ないのでこの方式は一度、ここで止める事にしました。 (* $ o…

様々な演算子

演算子順位法を使って、C言語の2項演算子をパース出来るようにしました。 &と*はポインタ演算に使うので特殊に扱いますが、基本的に記号の連続は1つの演算子として字句解析するようにしました。 (* $ ocamlc -pp camlp4o calc.ml *) open Format type toke…

operator precedence

今回は、四則演算のパーサを優先順位法を使って書き換えたバージョンを書きました。 テストは前回と同じだけど、Hashtblを使っています。これがさらっとかけるようになれば、LLVMのカレイドスコープのパーサも簡単と言えるようになるでしょう。 (* $ ocamlc …

test first

四則演算のパーサを作る際に、テストファーストにするとよいはずです。という事で、テストだけ先に書きます。 (* $ ocamlc -pp camlp4o calc.ml *) open Format type token = | Number of float | Op of char type e = | Num of float | Bin of e * string *…

四則演算

EXTENDを使わないでCamlp4使って四則演算を作れるところまで何段階かに分けて書いてみました。今はocamllex/ulex + menhir がよいらしいんですけど ま、使ってみないと分からないし。 (* $ ocamlc -pp camlp4o test2.ml $ ./a.out *) open Format (* 字句解…

CamlP4を使ってトークンを1つ取り出す

とりあえず、取り出すだけなら以下のコードで出来ました。 (* $ ocamlc -pp camlp4o test2.ml *) open Format type token = Number of float let print_token ppf = function | Number n -> fprintf ppf "Number(%f)@?" n let rec lex = parser (* Skip any …

LLVM OCaml Samples

OCamlでLLVMのライブラリを使うのにサンプルコードが欲しいので書き始めました。https://bitbucket.org/h_sakurai/llvm-ocaml-samples/wiki/Home