#ifndef lse_syntabstr_tic_h #define lse_syntabstr_tic_h /* Contructeur Let */ struct Let { char * champ_1; union e_expr *champ_2; union b_expr *champ_3; }; /* Contructeur Ite */ struct Ite { union e_expr *champ_1; union b_expr *champ_2; union b_expr *champ_3; }; /* Contructeur Expr */ struct Expr { union e_expr *champ_1; }; /** Type b_expr **/ union b_expr { struct Expr *champ_1; struct Ite *champ_2; struct Let *champ_3; }; /* Contructeur Op */ struct Op { union op *champ_1; union e_expr *champ_2; union e_expr *champ_3; }; /* Contructeur Const */ struct Const { int champ_1; }; /* Contructeur Id */ struct Id { char * champ_1; }; /** Type e_expr **/ union e_expr { struct Id *champ_1; struct Const *champ_2; struct Op *champ_3; }; /* Contructeur Plus */ struct Plus { }; /** Type op **/ union op { struct Plus *champ_1; }; /* Typedefs */ typedef struct Let Let; typedef struct Ite Ite; typedef struct Expr Expr; typedef union b_expr b_expr; typedef struct Op Op; typedef struct Const Const; typedef struct Id Id; typedef union e_expr e_expr; typedef struct Plus Plus; typedef union op op; /* Prototypes */ extern Let *make_Let(char *,e_expr *,b_expr *); extern Ite *make_Ite(e_expr *,b_expr *,b_expr *); extern Expr *make_Expr(e_expr *); extern b_expr *make_b_expr_of_Expr(Expr *); extern b_expr *make_b_expr_of_Ite(Ite *); extern b_expr *make_b_expr_of_Let(Let *); extern Op *make_Op(op *,e_expr *,e_expr *); extern Const *make_Const(int); extern Id *make_Id(char *); extern e_expr *make_e_expr_of_Id(Id *); extern e_expr *make_e_expr_of_Const(Const *); extern e_expr *make_e_expr_of_Op(Op *); extern Plus *make_Plus(); extern op *make_op_of_Plus(Plus *); /* Fait à la main */ #define makeLet(s,e,b) \ (make_b_expr_of_Let(make_Let(s,e,b))) #define makeIte(e,b1,b2) \ (make_b_expr_of_Ite(make_Ite(e,b1,b2))) #define makeExpr(e) \ (make_b_expr_of_Expr(make_Expr(e))) #define makePlus(e1,e2) \ (make_e_expr_of_Op(make_Op(make_op_of_Plus(make_Plus()),e1,e2))) #define makeId(s) \ (make_e_expr_of_Id(make_Id(s))) #define makeConst(n) \ (make_e_expr_of_Const(make_Const(n))) #endif /*lse_syntabstr_tic_h*/