void expr_print(struct expr *e) { if(!e) return; expr_print(e -> left); expr_pretty_print(e); expr_print(e->right); if (e->kind == EXPR_FUNC) printf(")"); if (e->kind == EXPR_ARRAY_DEREF) printf("]"); }
//recursively prints out an expression tree void expr_print(struct expr *e){ if(!e) return; if(e->kind == EXPR_PARENS) { printf("("); expr_print(e->right); printf(")"); } else if(e->kind == EXPR_FCALL){ expr_print(e->left); printf("("); expr_print(e->right); printf(")"); } else if(e->kind == EXPR_ARRCALL){ expr_print(e->left); expr_print(e->right); } else if(e->kind == EXPR_ARRINDEX){ printf("["); expr_print(e->left); printf("]"); expr_print(e->right); } else if(e->kind == EXPR_BLOCK){ printf("{"); expr_print(e->right); printf("}"); } else { if(e->left || e->right){ //printf("("); expr_print(e->left); expr_pretty_print(e); expr_print(e->right); //printf(")"); } else { expr_print(e->left); expr_pretty_print(e); expr_print(e->right); } } }