1 #ifndef __expr_h 2 #define __expr_h 3 4 #define EE_OK 0 5 #define EE_RETURN 1 6 #define EE_BREAK 2 7 #define EE_NOCASE 3 8 #define EE_NOTDEF 4 9 #define EE_NOTLIT 5 10 #define EE_BADFUNC 6 11 #define EE_DIV0 7 12 #define EE_OVERFLOW 8 13 #define EE_INTERNAL -1 14 15 typedef int EValueLookup(const char *func,const char *name,void *data,int *rval); 16 17 typedef struct expr { 18 int op; /* Op code */ 19 char *lit; /* Literal or function name */ 20 int value; /* Value of expression */ 21 struct expr *l,*r,*x; /* left, right and extended operands */ 22 } Expr; 23 24 Expr *Expr_lit(const char*); 25 Expr *Expr_num(int); 26 Expr *Expr_op(int,Expr*,Expr*); 27 Expr *Expr_case(int,int); 28 Expr *Expr_op3(int,Expr*,Expr*,Expr*); 29 Expr *Expr_func(const char*,Expr*,Expr*); 30 int Expr_print(Expr *e); 31 int Expr_sprint(char *buf,int n,Expr *e); 32 33 int Expr_eval(Expr *e,int *rval,EValueLookup *f,void *d); 34 35 void delete_Expr(Expr *e); 36 37 const extern char *expr_errsym; 38 39 #endif 40