typedef enum type_e { application = 0, function, integer } type; typedef struct func_s { char name[16]; } func typedef struct exp_s { type t; union c { app *a; func f; int i; } } expression; typedef struct app_s { expression *f; expression *v; } app;