/*
* 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 */
|