示例#1
0
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);
}
示例#2
0
void prettyARGUMENT(ARGUMENT* a)
{
    if(a == NULL) return;
    if(a->next != NULL)
    {
        prettyARGUMENT(a->next);
        fprintf(ofile, ", ");
    }
    prettyTYPE(a->type);
    prettyID(a->id);
}
示例#3
0
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();
}
示例#4
0
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");
}
示例#5
0
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();
}
示例#6
0
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);  
  }  
}