std::string codeprint(Context& cont) { std::stringstream ss; ss << "#Declarator " << id << "\n"; if(e!=NULL) { ss << e->codeprint(cont) << "\n"; } ss << "addu $9, $8, $0\n"; ss << Helper::writeNewVar(id,cont) << "\n"; return ss.str(); }
std::string codeprint(Context& cont) { if(right!=NULL) { std::stringstream ss; ss << right->codeprint(cont) << "\n"; ss << "#AssignExp "<< "\n"; ss << "addu $9, $8, $0\n"; ss << Helper::writeVar(left->print(), cont); return ss.str(); } }
std::string codeprint(Context& cont) { std::stringstream ss; ss << "#return\n"; if (e!=NULL) { ss << e->codeprint(cont); } else { ss << "addu $8, $0, $0\n"; } ss << "addu $2, $8, $0\n"; ss << "j $31\n"; ss << "nop\n"; return ss.str(); }
std::string codeprint(Context& cont) { std::stringstream ss; ss << "#while\n"; int x = cont.labelNum; cont.labelNum++; ss << "label" << x << "a:\n"; ss << e->codeprint(cont); ss << "beq $8, $0, " << "label" << x << "c\n"; ss << "label" << x << "b:\n"; ss << s->codeprint(cont); ss << "j label" << x << "a\n"; ss << "label" << x << "c:\n"; return ss.str(); }
std::string codeprint(Context& cont) { std::stringstream ss; ss << "#UnaryExp " << op << "\n"; ss << e->codeprint(cont) << "\n"; if(op=="-") { ss << "subu $8,$0, $8\n"; } else if(op=="~") { ss << "lui $10, 0xffff\n"; ss << "sra $10,$10,16\n"; ss << "xor $8,$8, $10\n"; } else if(op=="!") { int x = cont.labelNum; cont.labelNum++; ss << "seq $8,$8, $0\n"; ss << "bne $8, $0, label" << x << "\n"; ss << "addu $8, $8, $0\n"; ss << "label" << x << ":\n"; } return ss.str(); }
std::string codeprint(Context& cont) { if (e!=NULL) { std::string x = e->codeprint(cont); return x; } }
std::string codeprint(Context& cont) { std::stringstream ss; ss << "#BinExp " << op << "\n"; ss << left->codeprint(cont) << "\n"; ss << Helper::pushStack(8,cont) << "\n"; ss << right->codeprint(cont) << "\n"; ss << Helper::pushStack(8,cont) << "\n"; ss << Helper::popStack(5,cont) << "\n"; //ss << "addu $2, $5, $0\n"; //ss << "j $31\n"; ss << Helper::popStack(6,cont) << "\n"; ss << "addu $5,$8, $0\n"; if(op=="+") { ss << "addu $8,$6, $5\n"; } else if(op=="-") { ss << "subu $8,$6, $5\n"; } else if(op=="&") { ss << "and $8,$6, $5\n"; } else if(op=="^") { ss << "xor $8,$6, $5\n"; } else if(op=="|") { ss << "or $8,$6, $5\n"; } else if(op=="*") { ss << "mul $8,$6, $5\n"; } else if(op=="<") { ss << "slt $8,$6, $5\n"; } else if(op==">") { ss << "slt $8,$5, $6\n"; } else if(op==">=") { ss << "sge $8,$6, $5\n"; } else if(op=="<=") { ss << "sle $8,$6, $5\n"; } else if(op=="==") { ss << "seq $8,$6, $5\n"; } else if(op=="!=") { ss << "sne $8,$6, $5\n"; } else if(op=="/") { ss << "div $8,$6, $5\n"; } else if(op=="%") { ss << "div $6, $5\n"; ss << "mfhi $8\n"; } else if(op==">>") { ss << "sra $8,$6, $5\n"; } else if(op=="<<") { ss << "sll $8,$6, $5\n"; } else if(op=="&&") { ss << "sne $6, $6, $0\n"; ss << "sne $5, $5, $0\n"; ss << "and $8, $6, $5\n"; } else if(op=="||") { ss << "sne $6, $6, $0\n"; ss << "sne $5, $5, $0\n"; ss << "or $8, $6, $5\n"; } /*TODO: ADD NOT IMP EXPS*/ return ss.str(); }