void prettyDECL(int indent, DECL *decl) { switch(decl->kind){ case formalK: prettyTYPE(decl->type); printf("%s",decl->val.formalD.name); if(decl->next != NULL) printf(", "); break; case variableK: indentprintf(indent, ""); prettyModifierKind(decl->val.variableD.modifier); prettyTYPE(decl->type); prettyIDENTIFIER(decl->val.variableD.identifiers); if (decl->val.variableD.initialization != NULL) { printf(" = "); prettyEXP(decl->val.variableD.initialization); } printf(";\n"); break; case simplevarK: prettyTYPE(decl->type); printf("%s",decl->val.simplevarD.name); if (decl->val.simplevarD.initialization != NULL) { printf(" = "); prettyEXP(decl->val.simplevarD.initialization); } if(decl->next != NULL) printf(", "); break; } if(decl->next != NULL) prettyDECL(indent, decl->next); }
void prettyARGUMENT(ARGUMENT* a) { if(a == NULL) return; if(a->next != NULL) { prettyARGUMENT(a->next); fprintf(ofile, ", "); } prettyTYPE(a->type); prettyID(a->id); }
void prettyVARIABLE(VARIABLE* v) { if(v == NULL) return; if(v->next != NULL) { prettyVARIABLE(v->next); /*fprintf(ofile, "");*/ } prettyTYPE(v->type); prettyID(v->id); fprintf(ofile, ";"); newline(); }
void prettyFUNCTION(int indent, FUNCTION *function) { indentprintf(indent, ""); prettyTYPE(function->type); printf("%s(",function->name); if (function->formals != NULL) prettyDECL(indent, function->formals); printf(")\n"); indentprintf(indent, "{\n"); #if (PRINTSYMBOL) prettySymbolTable(indent+1, function->sym); #endif if (function->stms != NULL) prettySTM(indent+1, function->stms); indentprintf(indent, "}\n"); }
void prettyFUNCTION(FUNCTION* f) { if(f == NULL) return; if(f->next != NULL) { prettyFUNCTION(f->next); newline(); } prettyTYPE(f->type); prettyID(f->id); fprintf(ofile, "("); prettyARGUMENT(f->argument); fprintf(ofile, ")"); newline(); prettyCOMPOUNDSTM(f->compoundstm); newline(); }
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); } }