home *** CD-ROM | disk | FTP | other *** search
/ Power Programming / powerprogramming1994.iso / progtool / microcrn / issue_40.arc / DAIMS.ARC / SYMCLASS.HXX < prev    next >
Text File  |  1988-02-10  |  2KB  |  51 lines

  1. /* SYMCLASS.H header for symbol table class */
  2. enum vartype { INTEGER, DOUBLE, MATRIX, STRTYPE, KEYWORD };
  3.  
  4. struct name {
  5.   char* label;            /* identifier or keyword string */
  6.   vartype type;            /* what kind of thing is this? */
  7.   name* next;            /* link to next item in this hash entry */
  8.   union  {
  9.     int intval;
  10.     double doubleval;
  11.     matrix * matptr;
  12.     string * cstrptr;
  13.   } value ;
  14. };
  15.  
  16. enum insert_request { LOOKUP = 0, NEWNAME = 1, NEWKEYWORD = 2 };
  17.  
  18. const TBLSZ = 23;
  19.  
  20. /* 
  21. -*++ class sym_tab: symbol table object for the DAIMS interpreter
  22. ** 
  23. ** (*++ history: 
  24. **      7 Dec 87    Bruce Eckel    Creation date
  25. ** ++*)
  26. ** 
  27. ** (*++ detailed: 
  28. ** ++*)
  29. */
  30.  
  31. class sym_tab {
  32.  
  33.   name* tb[TBLSZ];        /* hashed symbol table heads */
  34.  
  35.  public:
  36.   sym_tab();            /* constructor */
  37.   ~sym_tab();            /* destructor defined in symclass.c */
  38.   name* look(char* p, int ins = 0);  
  39.   /* ins == 0 means look up name in table, return 0 if name not found, */
  40.   /* pointer to name structure containing the string if found  */
  41.   /* ins != 0 means insert a new name or a new keyword */
  42.   /* ins == NEWNAME means insert new name in table */
  43.   /* ins == NEWKEYWORD means insert new keyword in table */
  44.   name* insert(char* s) { return look(s,NEWNAME); };
  45.   void remove(name*); /* remove a name from the table */
  46.   name* keyword(char *s) { return look(s,NEWKEYWORD); };
  47.   int iskeyword(char *s) { return (look(s)->type == KEYWORD); };
  48.   void dump();            /* dump symbol table to cout */
  49.   void error(char * msg) { cerr << "symbol table error: " << msg << "\n";  exit(1);};
  50. };
  51.