int main(int argc, char *argv[]){ //std::string scenarioname = "yosemite"; std::string scenarioname = "whale"; std::unordered_map<std::string, parameter> parameters; makeParameters(parameters); // load images cv::Mat image1 = cv::imread("images/RubberWhale/frame10.png", CV_LOAD_IMAGE_GRAYSCALE); cv::Mat image2 = cv::imread("images/RubberWhale/frame11.png", CV_LOAD_IMAGE_GRAYSCALE); cv::Mat i1; cv::Mat i2; image1.convertTo(i1, CV_64F); image2.convertTo(i2, CV_64F); // load truth GroundTruth truth("images/RubberWhale/flow10.flo"); // create scenario file cv::FileStorage s(scenarioname+".xml", cv::FileStorage::WRITE); s << "scenarioname" << scenarioname; s << "image1" << i1; s << "image2" << i2; s << "groundtruth" << truth.truthfield; s << "truthmask" << truth.mask; s << "interactive" << true; saveParameters(s, parameters); s.release(); }
TAC* generateCode(TREE* node) { int i; TAC *code[MAX_CHILDREN], *generatedCode; if (!node) return NULL; for (i=0; i<MAX_CHILDREN; i++) { if (node->children[i]) code[i] = generateCode(node->children[i]); else code[i] = 0; } switch (node->type) { case TREE_SYMBOL: return tacCreate(TAC_SYMBOL, node->symbol, 0, 0); case TREE_VAL_TRUE: return tacCreate(TAC_SYMBOL, gbl_value_true, 0, 0); case TREE_VAL_FALSE: return tacCreate(TAC_SYMBOL, gbl_value_false, 0, 0); case TREE_DECL_FUNC: return tacJoin3( tacCreate(TAC_BEGINFUN, 0, node->children[1]?node->children[1]->symbol:0, 0), code[3], tacCreate(TAC_ENDFUN, 0, node->children[1]?node->children[1]->symbol:0, 0) ); case TREE_COMM_NOP: return tacCreate(TAC_NOP, 0, 0, 0); case TREE_COMM_IN: generatedCode = makeParameters(node, TAC_READ); // The code of the expressions in the parameters return generatedCode; case TREE_COMM_OUT: generatedCode = makeParameters(node, TAC_PRINT); return generatedCode; // The code of the expressions in the parameters case TREE_COMM_ASSIG: return tacJoin(code[1], tacCreate(TAC_MOVE, code[0]?code[0]->res:0, code[1]?code[1]->res:0, 0) ); case TREE_COMM_ASSIG_VEC: return tacJoin3(code[1], code[2], tacCreate(TAC_STRIDX, code[0]?code[0]->res:0, code[1]?code[1]->res:0, code[2]?code[2]->res:0) ); case TREE_COMM_IF_ELSE: return makeIfThenElse(code[0], code[1], code[2]); case TREE_COMM_WHILE: return makeWhile(code[0], code[1]); case TREE_COMM_RETURN: return tacJoin(code[0], tacCreate(TAC_RET, 0, code[0]?code[0]->res:0, 0)); case TREE_EXPR_ARIT_FUNCALL: return tacJoin(makeParameters(node, TAC_ARG), // The code of the expressions in the parameters tacCreate(TAC_CALL, hash_make_temp(), code[0]?code[0]->res:0, 0)); case TREE_EXPR_ARIT_VEC_READ: return tacJoin(code[1], tacCreate(TAC_LOADIDX, hash_make_temp(), code[0]?code[0]->res:0, code[1]?code[1]->res:0) ); break; case TREE_EXPR_ARIT_ADD: return makeBinOp(TAC_ADD, code[0], code[1]); case TREE_EXPR_ARIT_SUB: return makeBinOp(TAC_SUB, code[0], code[1]); case TREE_EXPR_ARIT_MUL: return makeBinOp(TAC_MUL, code[0], code[1]); case TREE_EXPR_ARIT_DIV: return makeBinOp(TAC_DIV, code[0], code[1]); case TREE_EXPR_BOOL_LT: return makeLogicOp(TAC_LTZ, code[0], code[1]); case TREE_EXPR_BOOL_GT: return makeLogicOp(TAC_GTZ, code[0], code[1]); case TREE_EXPR_BOOL_LE: return makeLogicOp(TAC_LEZ, code[0], code[1]); case TREE_EXPR_BOOL_GE: return makeLogicOp(TAC_GEZ, code[0], code[1]); case TREE_EXPR_BOOL_EQ: return makeLogicOp(TAC_EQZ, code[0], code[1]); case TREE_EXPR_BOOL_NE: return makeLogicOp(TAC_ANEG, code[0],code[1]); case TREE_EXPR_BOOL_AND: return makeLogicOp(TAC_AND, code[0], code[1]); case TREE_EXPR_BOOL_OR: return makeLogicOp(TAC_OR, code[0], code[1]); default: break; } return tacJoin4(code[0], code[1], code[2], code[3]); }