Home
 

symtab.h

symtab.h

/*
 *  symtab.h
 */

#include "p_tree.h"

class ControllerCls;
class SymtabCls;

typedef class ScopeCls *PScopeCls;
class ScopeCls {
   public:
    ScopeCls()          {;}
    static SymtabCls    *get_vista() {return vista;}
    friend class ControllerCls;
   private:
    static SymtabCls    *vista;
};

typedef class SymtabEntryCls *PSymtabEntryCls;
class SymtabEntryCls   { 
   public:
    SymtabEntryCls() {;}
    SymtabEntryCls(char *Name);
    friend class    SymtabCls;
    virtual int emit();
   protected:
    char        *name;
};

typedef class SymbolCls *PSymbolCls;
class SymbolCls: public SymtabEntryCls {
 public:
   SymbolCls() {}
   SymbolCls(char *name, PDataTypeCls dataType, PAddressCls addr);
   PDataTypeCls getDataType();
   PAddressCls getAddress();
   
 private:
   PDataTypeCls data_type;
   PAddressCls address;
};
/* end-attributes-def */

/* symtab-def */ 
/* ************************************************************** */
/*
 *  Symbol Table
 */
/* ************************************************************** */


typedef class SymtabCls *PSymtabCls;
class SymtabCls  {
   public:
    SymtabCls();
    int     insert(PSymtabEntryCls);
    PSymtabEntryCls lookup(char*);
    int     emit();
   private:
    int     tablesize;
    int     next_location;  
    int     *hashtable; 
    PSymtabEntryCls *symtab;  //N.B.:  pointers!
    int         hash(char *);   
};
/* end-symtab-def */