Closed andreasabel closed 3 years ago
The C backend defines constructors, but no destructors for ASTs.
Too add a recursive deallocation procedure e.g. for grammar Calc.cf we need to:
Calc.cf
Absyn.h
void freeExp(Exp p);
Absyn.c
void freeExp (Exp p) { switch (p->kind) { case is_EAdd: freeExp(p->u.eadd_.exp_1); freeExp(p->u.eadd_.exp_2); break; case is_ESub: freeExp(p->u.esub_.exp_1); freeExp(p->u.esub_.exp_2); break; case is_EMul: freeExp(p->u.emul_.exp_1); freeExp(p->u.emul_.exp_2); break; case is_EDiv: freeExp(p->u.ediv_.exp_1); freeExp(p->u.ediv_.exp_2); break; case is_EInt: break; } free(p); }
The code could be adapted from the printer generator.
Similarly, we want clone_XXX methods to recursively copy trees.
clone_XXX
The C backend defines constructors, but no destructors for ASTs.
Too add a recursive deallocation procedure e.g. for grammar
Calc.cf
we need to:Add to
Absyn.h
Add to
Absyn.c
The code could be adapted from the printer generator.