int
main (void)
{
  jumper (func);

  return 0;
}
示例#2
0
void generateThen(){
	int pl=tempCode.size();
	if(DEBUG)printf("Generuje then w linii %d\n", pl);
	addCodeLine("JUMP");
	jumper();
	labeler();
}
示例#3
0
void generateDo(){
	int pl=tempCode.size();
	if(DEBUG)printf("Generuje else w linii %d\n", pl);
	addCodeLine("JUMP");
	jumper();
	labeler();
	fixWhileLabels();
}
示例#4
0
int generateBoolOp(str op, str a, str b){
	generateP_AB(a, b);
	
	//w tym miejscu w REJ_A jest 'b', pierwszy w p_666
	
	if(op==S_GET){
		addCodeLine("SUB " + op_temp_a); // REJ_A=b-a
		addCodeLine("JG"); // if b-a > 0 <=> b > a -> skacz,
	}else if(op==S_EQ){
		addCodeLine("STORE " + op_temp_b);
		addCodeLine("SUB " + op_temp_a); // REJ_A=b-a
		addCodeLine("STORE " + op_temp_c);
		addCodeLine("LOAD " + op_temp_a);
		addCodeLine("SUB " + op_temp_b); // REJ_A=a-b
		addCodeLine("ADD " + op_temp_c); // w Z by sie to skrocilo; dla N wynik > 0 swiadczy o niezerowosci ktoregos ze skladnikow
		addCodeLine("JG"); //skaczemy gry (b-a) + (a-b) > 0, wtedy sa nierowne
	}else if(op==S_NEQ){
		addCodeLine("STORE " + op_temp_b);
		addCodeLine("SUB " + op_temp_a); // REJ_A=b-a
		addCodeLine("STORE " + op_temp_c);
		addCodeLine("LOAD " + op_temp_a);
		addCodeLine("SUB " + op_temp_b); // REJ_A=a-b
		addCodeLine("ADD " + op_temp_c); // w Z by sie to skrocilo; dla N wynik > 0 swiadczy o niezerowosci ktoregos ze 
		addCodeLine("JZ");
	}else if(op==S_GT){
		addCodeLine("STORE " + op_temp_b);
		addCodeLine("SUB " + op_temp_a); // REJ_A = b-a
		addCodeLine("STORE " + op_temp_c);
		addCodeLine("LOAD " + op_temp_a); 
		addCodeLine("SUB " + op_temp_b); // REJ_A = a-b
		addCodeLine("SUB " + op_temp_c);
		addCodeLine("JZ");
	}else{
		return -1;
		if(ERR)printf("Nieznany operator %s", op.c_str());
	}
	jumper();
	return 0;
}