home *** CD-ROM | disk | FTP | other *** search
/ Club Amiga de Montreal - CAM / CAM_CD_1.iso / files / 018.lha / parser / parser.h < prev    next >
C/C++ Source or Header  |  1986-10-19  |  3KB  |  153 lines

  1. /*
  2.     Little Smalltalk
  3.         definitions used by parser
  4. */
  5.  
  6.  
  7. /* enum vartypes {instvar, argvar, tempvar}; */
  8. #define    instvar 0
  9. #define    argvar 1
  10. #define tempvar 2
  11.  
  12. struct varstruct {
  13.     struct varstruct *nextvar;
  14.     int vtype;
  15.     char *text;
  16.     short position;
  17.     };
  18.  
  19. /* enum objtypes {classobj, varobj, instvarobj, contvarobj, 
  20.     litobj, pseuobj, primobj, exprobj, blockobj}; */
  21. #define classobj    0
  22. #define varobj        1
  23. #define instvarobj    2
  24. #define contvarobj    3
  25. #define litobj        4
  26. #define pseuobj        5
  27. #define primobj        6
  28. #define exprobj        7
  29. #define blockobj    8
  30.  
  31. struct objstruct {
  32.     int objtype;
  33.     union {
  34.         char *varname;
  35.         int varoffset;
  36.         struct litstruct *litinfo;
  37.         /* enum    pseuvars */ int pseuinfo;
  38.         struct primstruct *priminfo;
  39.         struct statestruct *stateinfo;
  40.         struct blockstruct *blockinfo;
  41.          } ee;
  42.     };
  43.  
  44. struct blockstruct {
  45.     int arglocation;
  46.     int numargs;
  47.     struct statestruct *bstates;
  48.     };
  49.  
  50. /* enum littypes {numlit, fnumlit, charlit, strlit, symlit, arlit, bytelit}; */
  51. #define numlit    0
  52. #define fnumlit 1
  53. #define charlit 2
  54. #define strlit    3
  55. #define symlit    4
  56. #define arlit    5
  57. #define bytelit 6
  58.  
  59. struct litstruct {
  60.     /* enum littypes */ int littype;
  61.     union {
  62.         int litint;
  63.         char litchar;
  64.         char *litstr;
  65.         char *litsym;
  66.         struct litlist *litarry;
  67.         } ll;
  68.     };
  69.  
  70. struct litlist {
  71.     struct litstruct *litele;
  72.     struct litlist *nextlit;
  73.     int litposition;
  74.     };
  75.  
  76. struct primstruct {
  77.     int primnumber;
  78.     struct primlist *plist;
  79.     } ;
  80.  
  81. struct primlist {
  82.     struct primlist *nextprim;
  83.     struct objstruct *pobject;
  84.     };
  85.  
  86. /* enum cmdtypes {reccmd, uncmd, bincmd, keycmd, semistart, semiend}; */
  87. #define reccmd        0
  88. #define uncmd        1
  89. #define bincmd        2
  90. #define keycmd        3
  91. #define semistart    4
  92. #define semiend        5
  93.  
  94. struct exprstruct {
  95.     /* enum    cmdtypes */ int cmdtype;
  96.     char *cmdname;
  97.     struct exprstruct *receiver;
  98.     union {
  99.         struct exprstruct *argument;
  100.         struct keylist *keys;
  101.         struct objstruct *recobj;
  102.         } cc;
  103.     struct exprstruct *nextcmd;
  104.     };
  105.  
  106. /* enum statetypes {blkupar, upar, asgn, iasgn, casgn, expr}; */
  107. #define blkupar 0
  108. #define upar    1
  109. #define asgn    2
  110. #define iasgn    3
  111. #define casgn    4
  112. #define expr    5
  113.  
  114. struct statestruct {
  115.     /* enum statetypes */ int statetype;
  116.     struct statestruct *nextstate;
  117.     union {
  118.         struct varstruct *variable;
  119.         int varpos;
  120.         } mm;
  121.     union {
  122.         struct statestruct *stateexpr;
  123.         struct exprstruct *cmd;
  124.         } nn;
  125.     };
  126.  
  127. struct keylist {
  128.     char *keyword;
  129.     struct exprstruct *arg;
  130.     struct keylist *nextkey;
  131.     };
  132.  
  133. struct methodstruct {
  134.     struct exprstruct *pattern;
  135.     int numtempvars;
  136.     struct statestruct *states;
  137.     struct methodstruct *nextmethod;
  138.     };
  139.  
  140. struct classstruct {
  141.     char *name;
  142.     char *super;
  143.     };
  144.  
  145. #define structalloc(type) (struct type *) alloc(sizeof (struct type ))
  146.  
  147. extern struct varstruct *instvars;
  148. extern struct varstruct *contextvars;
  149.  
  150. #define addinst(x) (instvars = addvlist(mkvar(x, instvar), instvars))
  151.  
  152. extern char *walloc();
  153.