node.H 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. /* 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 */
  2. struct node {
  3. struct node *nd_left;
  4. #define nd_next nd_left
  5. struct node *nd_right;
  6. int nd_class; /* kind of node */
  7. #define Value 0 /* constant */
  8. #define Name 1 /* an identifier */
  9. #define Uoper 2 /* unary operator */
  10. #define Boper 3 /* binary operator */
  11. #define Xset 4 /* a set */
  12. #define Set 5 /* a set constant */
  13. #define Call 6 /* a function call */
  14. #define NameOrCall 7 /* call or name of function */
  15. #define Arrow 8 /* ^ construction */
  16. #define Arrsel 9 /* array selection */
  17. #define Def 10 /* an identified name */
  18. #define Link 11
  19. #define LinkDef 12
  20. #define Cast 13 /* convert integer to real */
  21. #define IntCoerc 14 /* coercion of integers to longs */
  22. #define IntReduc 15 /* reduction of longs to integers */
  23. /* do NOT change the order or the numbers!!! */
  24. struct type *nd_type; /* type of this node */
  25. struct token nd_token;
  26. #define nd_def nd_token.tk_data.tk_def
  27. #define nd_set nd_token.tk_data.tk_set
  28. #define nd_lab nd_token.tk_data.tk_lab
  29. #define nd_symb nd_token.tk_symb
  30. #define nd_lineno nd_token.tk_lineno
  31. #define nd_IDF nd_token.TOK_IDF
  32. #define nd_STR nd_token.TOK_STR
  33. #define nd_SLE nd_token.TOK_SLE
  34. #define nd_SLA nd_token.TOK_SLA
  35. #define nd_INT nd_token.TOK_INT
  36. #define nd_REL nd_token.TOK_REL
  37. #define nd_RLA nd_token.TOK_RLA
  38. #define nd_RIV nd_token.TOK_RIV
  39. };
  40. /* ALLOCDEF "node" 50 */
  41. extern struct node *MkNode(), *MkLeaf(), *ChkStdInOut();
  42. #define IsProcCall(lnd) ((lnd)->nd_type->tp_fund & T_ROUTINE)
  43. #define NULLNODE ((struct node *) 0)