int main (void) { jumper (func); return 0; }
void generateThen(){ int pl=tempCode.size(); if(DEBUG)printf("Generuje then w linii %d\n", pl); addCodeLine("JUMP"); jumper(); labeler(); }
void generateDo(){ int pl=tempCode.size(); if(DEBUG)printf("Generuje else w linii %d\n", pl); addCodeLine("JUMP"); jumper(); labeler(); fixWhileLabels(); }
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; }