Пример #1
0
////////////////////////////////////////
// stm
void Stm_print (Stm_t s)
{
  switch (s->kind){
  case STM_ASSIGN:{
    Stm_Assign p = (Stm_Assign)s;
    printf ("%s = ", p->id);
    Exp_print (p->exp);
    printf (";");
    break;
  }
  case STM_PRINTI:{
    Stm_Printi p = (Stm_Printi)s;
    printf ("printi(");
    Exp_print (p->exp);
    printf (");");
    break;
  }
  case STM_PRINTB:{
    Stm_Printb p = (Stm_Printb)s;
    printf ("printb(");
    Exp_print (p->exp);
    printf (");");
    break;
  }
  default:
    break;
  }
  return;
}
Пример #2
0
//////////////////////////////////////////////////
// program entry
int main()
{
  printf("Compile starting\n");
 
  // build an expression tree:
  //            +
  //           / \
  //          +   4
  //         / \
  //        2   3
  struct Exp_t *exp = Exp_Sum_new (Exp_Sum_new(Exp_Int_new (2)
                                   , Exp_Int_new (3))
                                   , Exp_Int_new (4));

  // print out this tree:
  printf ("the expression is:\n");
  Exp_print (exp);

  // compile this tree to Stack machine instructions
  compile (exp);

  // print out the generated Stack instructions:
  printf("\n\n");
  List_reverse_print (all);
  
  printf("\nCompile finished\n");
  return 0;
}
Пример #3
0
int main(int argc,char **argv){
	parser_init(argv[1]);
	parser();
	Exp_print(exp);

	return 0;
}
Пример #4
0
// "printer"
void Exp_print (struct Exp_t *exp)
{
  switch (exp->kind){
  case EXP_INT:{
    struct Exp_Int *p = (struct Exp_Int *)exp;
    printf ("%d", p->i);
    break;
  }
  case EXP_SUM:{
    struct Exp_Sum *p = (struct Exp_Sum *)exp;
    Exp_print (p->left);
    printf ("+");
    Exp_print (p->right);
    break;
  }
  default:
    break;
  }
}
Пример #5
0
// all operations on "Exp"
void Exp_print (Exp_t exp)
{
  switch (exp->kind){
  case EXP_INT:{
    Exp_Int p = (Exp_Int)exp;
    printf ("%d", p->n);
    return;
  }
  case EXP_ADD:{
    Exp_Add p = (Exp_Add)exp;
    printf ("(");
    Exp_print (p->left);
    printf (") + (");
    Exp_print (p->right);
    printf (")");
    return;
  }
  case EXP_MINUS:{
    Exp_Minus p = (Exp_Minus)exp;
    printf ("(");
    Exp_print (p->left);
    printf (") - (");
    Exp_print (p->right);
    printf (")");
    return;
  }
  case EXP_TIMES:{
    Exp_Times p = (Exp_Times)exp;
    printf ("(");
    Exp_print (p->left);
    printf (") * (");
    Exp_print (p->right);
    printf (")");
    return;
  }
  case EXP_DEVIDE:{
    Exp_Devide p = (Exp_Devide)exp;
    printf ("(");
    Exp_print (p->left);
    printf (") / (");
    Exp_print (p->right);
    printf (")");
    return;
  }
  default:
    return;
  }
}
Пример #6
0
int main (int argc, char **argv)
{
  yyparse();

  printf ("\n");
  Exp_print (tree);
  
  // compile this tree to Stack machine instructions
  printf ("\n");
  compile (tree);

  // print out the generated Stack instructions:
  printf("\n");
  List_reverse_print (all);
 
  return 0;
}
Пример #7
0
// all operations on "Exp"
void Exp_print (Exp_t exp)
{
  switch (exp->kind){
  case EXP_INT:{
    Exp_Int p = (Exp_Int)exp;
    printf ("%d", p->n);
    return;
  }
  case EXP_TRUE:{
    printf ("true");
    return;
  }
  case EXP_FALSE:{
    printf ("false");
    return;
  }
  case EXP_ID:{
    Exp_Id p = (Exp_Id)exp;
    printf ("%s", p->id);
    return;
  }
  case EXP_ADD:{
    Exp_Add p = (Exp_Add)exp;
    printf ("(");
    Exp_print (p->left);
    printf (") + (");
    Exp_print (p->right);
    printf (")");
    return;
  }
  case EXP_SUB:{
    Exp_Sub p = (Exp_Sub)exp;
    printf ("(");
    Exp_print (p->left);
    printf (") - (");
    Exp_print (p->right);
    printf (")");
    return;
  }
  case EXP_TIMES:{
    Exp_Times p = (Exp_Times)exp;
    printf ("(");
    Exp_print (p->left);
    printf (") * (");
    Exp_print (p->right);
    printf (")");
    return;
  }
  case EXP_DIVIDE:{
    Exp_Divide p = (Exp_Divide)exp;
    printf ("(");
    Exp_print (p->left);
    printf (") / (");
    Exp_print (p->right);
    printf (")");
    return;
  }
  case EXP_AND:{
    Exp_And p = (Exp_And)exp;
    printf ("(");
    Exp_print (p->left);
    printf (") && (");
    Exp_print (p->right);
    printf (")");
    return;
  }
  case EXP_OR:{
    Exp_Or p = (Exp_Or)exp;
    printf ("(");
    Exp_print (p->left);
    printf (") || (");
    Exp_print (p->right);
    printf (")");
    return;
  }
  default:
    return;
  }
}