5 public class SymbolTable {
7 private Hashtable table;
8 private SymbolTable parent;
9 private HashSet valueset;
11 public SymbolTable() {
12 table = new Hashtable();
13 valueset = new HashSet();
17 public SymbolTable(SymbolTable parent) {
18 table = new Hashtable();
22 public void add(Descriptor d) {
23 add(d.getSymbol(), d);
26 public void add(String name, Descriptor d) {
27 if (!table.containsKey(name))
28 table.put(name, new HashSet());
29 HashSet hs=(HashSet)table.get(name);
34 public Set getSet(String name) {
38 private HashSet getPSet(String name) {
41 hs=parent.getPSet(name);
44 if (table.containsKey(name)) {
45 hs.addAll((HashSet)table.get(name));
50 public Set getSetFromSameScope(String name) {
51 return getPSetFromSameScope(name);
54 private HashSet getPSetFromSameScope(String name) {
55 if (table.containsKey(name)) {
56 HashSet hs=(HashSet)table.get(name);
62 public Descriptor get(String name) {
63 Descriptor d = getFromSameScope(name);
64 if (d == null && parent != null) {
65 return parent.get(name);
71 public Descriptor getFromSameScope(String name) {
72 if (table.containsKey(name)) {
73 HashSet hs=(HashSet) table.get(name);
74 return (Descriptor) hs.iterator().next();
80 public Enumeration getNames() {
84 public Iterator getNamesIterator() {
85 return table.keySet().iterator();
88 public Set getValueSet() {
92 public Iterator getDescriptorsIterator() {
93 return getValueSet().iterator();
96 public Set getAllValueSet() {
99 hs=(HashSet) parent.getAllValueSet();
106 public Iterator getAllDescriptorsIterator() {
107 return getAllValueSet().iterator();
110 public boolean contains(String name) {
111 return (get(name) != null);
114 public SymbolTable getParent() {
118 public void setParent(SymbolTable parent) {
119 this.parent = parent;
122 public String toString() {
123 return "ST: " + table.toString();