Esempio n. 1
0
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]);
}