4. MinCamlの言語仕様
? 型はbool, int, float, array, tuple。
? 四則演算、条件分岐、変数定義、関数定義、クロージャを
サポート。
? 構文はOCamlを最小化したもの。
? コンパイラの理解が目的なので言語仕様は最低限。
let rec f a b = a + b in print_int (f 1 2)
20. バイトコード生成(参考)
// f : int -> int -> int
// f a b = a + b
mv = cw.visitMethod(ACC_PUBLIC + ACC_STATIC, "f", "(II)I", null, null);
mv.visitCode();
mv.visitVarInsn(ILOAD, 0);
mv.visitVarInsn(ILOAD, 1);
mv.visitInsn(IADD);
mv.visitInsn(IRETURN);
mv.visitMaxs(2, 2);
mv.visitEnd();
int f(inta, int b) { return a + b; }
IntFunction<IntUnaryOperator> f$(){ return a -> f$$(a); }
IntUnaryOperator f$$(int a){ return b -> f(a, b); }