Пример #1
0
	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();
	}
Пример #2
0
	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();

		}
	}
Пример #3
0
	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();
	}
Пример #4
0
	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();
	}
Пример #5
0
	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();
	}
Пример #6
0
	std::string codeprint(Context& cont) {
		if (e!=NULL) {
			std::string x = e->codeprint(cont);
			return x;			
		}
	}
Пример #7
0
	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();
	}