camlp4で四則演算。
30分プログラム、その183。camlp4で計算機をつくってみる。
いきなりcamlp4をバリバリつかうのは大変そうなので、まずはパーサ部分だけをつかって計算機を作ってみた。
これは、パーサとして使うのもありかもしれない。ただ、どうも字句解析器をつくるのがえらい面倒そうなんだよなぁ。
使い方
$ ./p4 "1+4*2" 9 $ ./p4 42 42
ソースコード
(* ocamlc -pp 'camlp4o pa_extend.cmo' -I +camlp4 gramlib.cma 183-p4.ml *) let (@@) f g = f g let ($) f g x = f (g x) let gram = Grammar.gcreate @@ Plexer.gmake () let expr = Grammar.Entry.create gram "expr" EXTEND expr:[ "factor" LEFTA [ x = expr; "+"; y = expr -> x + y | x = expr; "-"; y = expr -> x - y] | "term" RIGHTA [ x = expr; "*"; y = expr -> x * y | x = expr; "/"; y = expr -> x / y] | "simple" NONA [ x = INT -> int_of_string x | "("; e = expr; ")" -> e] ]; END let _ = Printf.printf "%d\n" @@ Grammar.Entry.parse expr (Stream.of_string Sys.argv.(1))