//===================================================================== // // testexec.cpp: mini-C プログラムのインタープリタのテスト // // コンパイラ演習 2004 (c) 石浦菜岐佐 // //===================================================================== #include #include #include #include "ast.h" int main(void) { //------------------------------------------------------ // Exp_function のテスト //------------------------------------------------------ // getint(); std::list arglist1; Expression* f_getint = new Exp_function("getint", arglist1); // getchar(); std::list arglist2; Expression* f_getchar = new Exp_function("getchar", arglist2); // putint(5); Expression* c3 = new Exp_constant(Type_INT, 5); std::list arglist3; arglist3.push_back(c3); Expression* f_putint = new Exp_function("putint", arglist3); // putchar('U'); Expression* c4 = new Exp_constant(Type_CHAR, 'U'); std::list arglist4; arglist4.push_back(c4); Expression* f_putchar = new Exp_function("putchar", arglist4); // asum(n); Expression* v5 = new Exp_variable("n"); std::list arglist5; arglist5.push_back(v5); Expression* f_asum = new Exp_function("asum", arglist5); std::map func; std::map gvar; std::map lvar; func["asum"] = 0; // 実体は無いが, 表に登録しておく lvar["n"] = 7; std::cout << "n = " << lvar["n"] <run(func, gvar, lvar); std::cout << "getint() = " << rv1 <run(func, gvar, lvar); std::cout << "getchar() = " << (char) rv2 <run(func, gvar, lvar); std::cout << std::endl; std::cout << "次に putchar('U'); が呼ばれる" <run(func, gvar, lvar); std::cout << std::endl; std::cout << "最後に asum(n); が呼ばれる" <run(func, gvar, lvar); std::cout << "asum(n) = " << rv_asum <