home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1994 October / usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso / misc / volume19 / wacco / part01 / defs.h < prev    next >
C/C++ Source or Header  |  1991-05-19  |  4KB  |  184 lines

  1. // Copyright (c) 1991 by Parag Patel.  All Rights Reserved.
  2. // $Header: defs.h,v 1.15 91/05/17 16:29:55 hmgr Exp $
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <ctype.h>
  7. #include <string.h>
  8. #include <malloc.h>
  9.  
  10. #include "boolean.h"
  11. #include "darray.h"
  12. #include "table.h"
  13. #include "bitset.h"
  14.  
  15. inline char *strdup(const char *s)
  16.     { return s == NULL ? NULL : strcpy((char*)malloc(strlen(s) + 1), s); }
  17. inline char *strnew(size_t len) { return (char*)malloc(len + 1); }
  18. #if FREE_TAKES_CHAR
  19. inline void strfree(const char *s) { if (s != NULL) free((char *)s); }
  20. #else
  21. inline void strfree(const char *s) { if (s != NULL) free((const void *)s); }
  22. #endif
  23.  
  24. // for large switch statements
  25. #define Case break;case
  26. #define Default break;default
  27.  
  28.  
  29. const TERMINAL         = 1;
  30. const NONTERMINAL    = 2;
  31. const CODE        = 3;
  32.  
  33. const END        = 0;
  34. const EMPTY        = 1;
  35. const START        = 2;
  36.  
  37.  
  38. #define RET_NONE    0x00
  39. #define RET_VALUE    0x01
  40. #define RET_CODE    0x02
  41.  
  42.  
  43. struct symbol;
  44. struct symnode;
  45. struct resynclist;
  46.  
  47. struct Set
  48. {
  49.     Bitset *set;
  50.     int id;
  51.  
  52.     Set(Bitset *s = NULL) { set = s; }
  53.     operator Bitset*() { return set; }
  54.     boolean operator==(Bitset *b) { return *set == *b; };
  55. };
  56.  
  57. struct symbol
  58. {
  59.     char *name;
  60.     int id;
  61.     int parserid;
  62.     int type;
  63.  
  64.     char *rettype;
  65.     union
  66.     {
  67.     char *lexstr;
  68.     char *realname;
  69.     };
  70.     char *code;
  71.  
  72.     union
  73.     {
  74.     int usedret;
  75.     boolean lexdef;
  76.     int line;
  77.     };
  78.  
  79.     int usecount;
  80.     char toempty;
  81.     char export;
  82.     char mkstruct;
  83.  
  84.     Bitset *first;
  85.     Bitset *follow;
  86.     union
  87.     {
  88.     Set *resync;
  89.     resynclist *list;
  90.     };
  91.  
  92.     symnode *node;
  93.  
  94.     symbol(const char *n = NULL);
  95.     operator char *() { return name; }
  96.     boolean operator==(const char *k) { return strcmp(name, k) == 0; }
  97. };
  98.  
  99. struct symnode
  100. {
  101.     symbol *sym;
  102.     char *alias;
  103.     symnode *next;
  104.     symnode *or;
  105.     union
  106.     {
  107.     Set *resync;
  108.     resynclist *list;
  109.     };
  110.  
  111.     symnode();
  112. };
  113.  
  114. struct resynclist
  115. {
  116.     char *name;
  117.     char first;
  118.     char follow;
  119.     char paren;
  120.     resynclist *next;
  121.  
  122.     resynclist(char *);
  123.     ~resynclist() { delete name; }
  124. };
  125.  
  126.  
  127. declare_table(Settab, Setiter, Set, Bitset*);
  128. extern Settab settab;
  129.  
  130. extern boolean optimize;
  131. extern boolean dumpcode;
  132. extern boolean statonly;
  133. extern boolean docompare;
  134. extern boolean casesensitive;
  135. extern boolean dargstyle;
  136. extern boolean genlineinfo;
  137. extern char *headername;
  138. extern char *scannername;
  139. extern char *parsername;
  140. extern void getoptions(int argc, char *argv[]);
  141. extern FILE *makefile(char *fname);
  142. extern void cmpandmv(char *file);
  143. extern boolean exportedname;
  144.  
  145. extern int numsymbols(void);
  146. extern symbol *getsymbol(int);
  147. extern int numterms(void);
  148. extern int numnonterms(void);
  149. extern symbol *getterm(int);
  150. extern symbol *getnonterm(int);
  151. extern symbol *addsymbol(const char *);
  152. extern void addterm(symbol *);
  153. extern void addnonterm(symbol *);
  154. extern symbol *findsymbol(const char *);
  155. extern void initsym(void);
  156. extern symbol *startsymbol;
  157. extern symbol *startcode;
  158.  
  159. extern "C" {
  160.     extern int w_input(void);
  161.     extern int w_unput(int chr);
  162. }
  163.  
  164. extern boolean gotlexstr;
  165. extern void readccomment(void);
  166. extern char *readtype(void);
  167. extern char *readcode(int &);
  168. extern char *readblockcode(int &);
  169. extern char *getword(void);
  170.  
  171. extern void buildsets(void);
  172. extern void check(void);
  173. extern void gencode(char *infile);
  174.  
  175. extern void quit(char *fmt, ...);
  176. extern int error(char *fmt, ...);
  177.  
  178. extern char **strsep(const char *str, const char *sep,
  179.     boolean whsp = TRUE, int *num = NULL);
  180. extern const char *strbldf(const char *fmt, ...);
  181.  
  182. declare_array(charbuf, char);
  183. declare_array(charvec, char*);
  184.