-package IR;
-
-import java.util.*;
-
-public class SymbolTable {
-
- private Hashtable table;
- private SymbolTable parent;
- private HashSet valueset;
-
- public SymbolTable() {
- table = new Hashtable();
- valueset = new HashSet();
- this.parent = null;
- }
-
- public SymbolTable(SymbolTable parent) {
- table = new Hashtable();
- this.parent = parent;
- }
-
- public void add(Descriptor d) {
- add(d.getSymbol(), d);
- }
-
- public void add(String name, Descriptor d) {
- if (!table.containsKey(name))
- table.put(name, new HashSet());
- HashSet hs=(HashSet)table.get(name);
- hs.add(d);
- valueset.add(d);
- }
-
- public Set getSet(String name) {
- return getPSet(name);
- }
-
- private HashSet getPSet(String name) {
- HashSet hs=null;
- if (parent!=null)
- hs=parent.getPSet(name);
- else
- hs=new HashSet();
- if (table.containsKey(name)) {
- hs.addAll((HashSet)table.get(name));
- }
- return hs;
- }
-
- public Set getSetFromSameScope(String name) {
- return getPSetFromSameScope(name);
- }
-
- private HashSet getPSetFromSameScope(String name) {
- if (table.containsKey(name)) {
- HashSet hs=(HashSet)table.get(name);
- return hs;
- } else
- return new HashSet();
- }
-
- public Descriptor get(String name) {
- Descriptor d = getFromSameScope(name);
- if (d == null && parent != null) {
- return parent.get(name);
- } else {
- return d;
- }
- }
-
- public Descriptor getFromSameScope(String name) {
- if (table.containsKey(name)) {
- HashSet hs=(HashSet) table.get(name);
- return (Descriptor) hs.iterator().next();
- } else
- return null;
-
- }
-
- public Enumeration getNames() {
- return table.keys();
- }
-
- public Iterator getNamesIterator() {
- return table.keySet().iterator();
- }
-
- public Set getValueSet() {
- return valueset;
- }
-
- public Iterator getDescriptorsIterator() {
- return getValueSet().iterator();
- }
-
- public Set getAllValueSet() {
- HashSet hs=null;
- if (parent!=null)
- hs=(HashSet) parent.getAllValueSet();
- else
- hs=new HashSet();
- hs.addAll(valueset);
- return hs;
- }
-
- public Iterator getAllDescriptorsIterator() {
- return getAllValueSet().iterator();
- }
-
- public boolean contains(String name) {
- return (get(name) != null);
- }
-
- public SymbolTable getParent() {
- return parent;
- }
-
- public void setParent(SymbolTable parent) {
- this.parent = parent;
- }
-
- public String toString() {
- return "ST: " + table.toString();
- }
-}