void prettyINPUT(INPUT* i) { if(i == NULL) return; if(i->next) { prettyINPUT(i->next); fprintf(ofile, ", "); } prettyLVALUE(i->lvalue); fprintf(ofile, " = "); prettyID(i->id); }
void prettyEXP(EXP *exp) { if (exp == NULL) return; switch(exp->kind) { case intconstK: printf("%i",exp->val.intconstE); break; case boolconstK: if (exp->val.boolconstE == 1) printf("true"); else printf("false"); break; case stringconstK: printf("\"%s\"", exp->val.stringconstE); break; case uminusK: printf("-"); prettyEXP(exp->val.uminusE); break; case notK: printf("!"); prettyEXP(exp->val.notE.exp); break; case lvalueK: prettyLVALUE(exp->val.lvalueE); break; case assignmentK: prettyLVALUE(exp->val.assignmentE.left); printf("="); prettyEXP(exp->val.assignmentE.right); break; case equalsK: printf("("); prettyEXP(exp->val.equalsE.left); printf("=="); prettyEXP(exp->val.equalsE.right); printf(")"); break; case nequalsK: printf("("); prettyEXP(exp->val.nequalsE.left); printf("!="); prettyEXP(exp->val.nequalsE.right); printf(")"); break; case lessK: printf("("); prettyEXP(exp->val.lessE.left); printf("<"); prettyEXP(exp->val.lessE.right); printf(")"); break; case greaterK: printf("("); prettyEXP(exp->val.greaterE.left); printf(">"); prettyEXP(exp->val.greaterE.right); printf(")"); break; case lequalsK: printf("("); prettyEXP(exp->val.lequalsE.left); printf("<="); prettyEXP(exp->val.lequalsE.right); printf(")"); break; case gequalsK: printf("("); prettyEXP(exp->val.gequalsE.left); printf(">="); prettyEXP(exp->val.gequalsE.right); printf(")"); break; case plusK: printf("("); prettyEXP(exp->val.plusE.left); printf("+"); prettyEXP(exp->val.plusE.right); printf(")"); break; case minusK: printf("("); prettyEXP(exp->val.minusE.left); printf("-"); prettyEXP(exp->val.minusE.right); printf(")"); break; case multK: printf("("); prettyEXP(exp->val.multE.left); printf("*"); prettyEXP(exp->val.multE.right); printf(")"); break; case divK: printf("("); prettyEXP(exp->val.divE.left); printf("/"); prettyEXP(exp->val.divE.right); printf(")"); break; case moduloK: printf("("); prettyEXP(exp->val.moduloE.left); printf("%%"); prettyEXP(exp->val.moduloE.right); printf(")"); break; case andK: printf("("); prettyEXP(exp->val.andE.left); printf("&&"); prettyEXP(exp->val.andE.right); printf(")"); break; case orK: printf("("); prettyEXP(exp->val.orE.left); printf("||"); prettyEXP(exp->val.orE.right); printf(")"); break; case callK: printf("%s", exp->val.callE.name); printf("("); if (exp->val.callE.arguments != NULL) prettyEXP(exp->val.callE.arguments); printf(")"); break; case castK: printf("("); prettyTYPE(exp->val.castE.type); printf(")"); prettyEXP(exp->val.castE.exp); break; } if(exp->next != NULL) { printf(","); prettyEXP(exp->next); } }
void prettyEXP(EXP* e) { if(e == NULL) return; if(e->next != NULL) { prettyEXP(e->next); fprintf(ofile, ", "); } switch(e->kind) { case lvalueK: prettyLVALUE(e->val.lvalueE); break; case assignK: prettyLVALUE(e->val.assignE.lvalue); fprintf(ofile, " = "); prettyEXP(e->val.assignE.expr); break; case equalsK: prettyEXP(e->val.equalsE.left); fprintf(ofile, " == "); prettyEXP(e->val.equalsE.right); break; case notequalsK: prettyEXP(e->val.notequalsE.left); fprintf(ofile, " != "); prettyEXP(e->val.notequalsE.right); break; case ltK: prettyEXP(e->val.ltE.left); fprintf(ofile, " < "); prettyEXP(e->val.ltE.right); break; case gtK: prettyEXP(e->val.gtE.left); fprintf(ofile, " > "); prettyEXP(e->val.gtE.right); break; case lteK: prettyEXP(e->val.lteE.left); fprintf(ofile, " <= "); prettyEXP(e->val.lteE.right); break; case gteK: prettyEXP(e->val.gteE.left); fprintf(ofile, " >= "); prettyEXP(e->val.gteE.right); break; case notK: fprintf(ofile, "!"); prettyEXP(e->val.exprE); break; case plusK: prettyEXP(e->val.plusE.left); fprintf(ofile, " + "); prettyEXP(e->val.plusE.right); break; case minusK: prettyEXP(e->val.minusE.left); fprintf(ofile, " - "); prettyEXP(e->val.minusE.right); break; case multK: prettyEXP(e->val.multE.left); fprintf(ofile, " * "); prettyEXP(e->val.multE.right); break; case divK: prettyEXP(e->val.divE.left); fprintf(ofile, " / "); prettyEXP(e->val.divE.right); break; case modK: prettyEXP(e->val.modE.left); fprintf(ofile, " %% "); prettyEXP(e->val.modE.right); break; case andK: prettyEXP(e->val.andE.left); fprintf(ofile, " && "); prettyEXP(e->val.andE.right); break; case orK: prettyEXP(e->val.orE.left); fprintf(ofile, " || "); prettyEXP(e->val.orE.right); break; case joinK: prettyEXP(e->val.joinE.left); fprintf(ofile, " << "); prettyEXP(e->val.joinE.right); break; case keepK: prettyEXP(e->val.keepE.left); fprintf(ofile, " \\+ "); prettyID(e->val.keepE.right); break; case removeK: prettyEXP(e->val.removeE.left); fprintf(ofile, " \\- "); prettyID(e->val.removeE.right); break; case callK: prettyID(e->val.callE.left); fprintf(ofile, "("); prettyEXP(e->val.callE.right); fprintf(ofile, ")"); break; case intconstK: fprintf(ofile, "%d", e->val.intconstE); break; case trueK: fprintf(ofile, "true"); break; case falseK: fprintf(ofile, "false"); break; case stringconstK: fprintf(ofile, "\"%s\"", e->val.stringconstE); break; case tupleK: fprintf(ofile, "tuple {"); prettyFIELDVALUE(e->val.tupleE); fprintf(ofile, "}"); break; case parenK: fprintf(ofile, "("); prettyEXP(e->val.exprE); fprintf(ofile, ")"); break; } }