/* N O D E O F A N A B S T R A C T P A R S E T R E E */ #ifndef NODE_H_ #define NODE_H_ struct node { struct node *nd_left; #define nd_next nd_left struct node *nd_right; int nd_class; /* kind of node */ #define Value 0 /* constant */ #define Name 1 /* an identifier */ #define Uoper 2 /* unary operator */ #define Boper 3 /* binary operator */ #define Xset 4 /* a set */ #define Set 5 /* a set constant */ #define Call 6 /* a function call */ #define NameOrCall 7 /* call or name of function */ #define Arrow 8 /* ^ construction */ #define Arrsel 9 /* array selection */ #define Def 10 /* an identified name */ #define Link 11 #define LinkDef 12 #define Cast 13 /* convert integer to real */ #define IntCoerc 14 /* coercion of integers to longs */ #define IntReduc 15 /* reduction of longs to integers */ /* do NOT change the order or the numbers!!! */ struct type *nd_type; /* type of this node */ struct token nd_token; #define nd_def nd_token.tk_data.tk_def #define nd_set nd_token.tk_data.tk_set #define nd_lab nd_token.tk_data.tk_lab #define nd_symb nd_token.tk_symb #define nd_lineno nd_token.tk_lineno #define nd_IDF nd_token.TOK_IDF #define nd_STR nd_token.TOK_STR #define nd_SLE nd_token.TOK_SLE #define nd_SLA nd_token.TOK_SLA #define nd_INT nd_token.TOK_INT #define nd_REL nd_token.TOK_REL #define nd_RLA nd_token.TOK_RLA #define nd_RIV nd_token.TOK_RIV }; /* ALLOCDEF "node" 50 */ struct node *MkNode(int class, struct node *left, struct node *right, struct token *token); struct node *MkLeaf(int class, struct token *token); void FreeNode(register struct node *nd); int NodeCrash(struct node *expp); #define IsProcCall(lnd) ((lnd)->nd_type->tp_fund & T_ROUTINE) #define NULLNODE ((struct node *) 0) #endif