start of new file
[IRC.git] / Robust / src / IR / SymbolTable.java
1 package IR;
2
3 import java.util.*;
4
5 public class SymbolTable {
6
7     private Hashtable table;
8     private SymbolTable parent;
9     private HashSet valueset;
10   
11     public SymbolTable() {
12         table = new Hashtable();
13         valueset = new HashSet();
14         this.parent = null;
15     }
16
17     public SymbolTable(SymbolTable parent) {
18         table = new Hashtable();
19         this.parent = parent;
20     }
21
22     public void add(Descriptor d) {
23         add(d.getSymbol(), d);
24     }
25     
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);
30         hs.add(d);
31         valueset.add(d);
32     }
33
34     public Set getSet(String name) {
35         return getPSet(name);
36     }
37
38     private HashSet getPSet(String name) {
39         HashSet hs=null;
40         if (parent!=null)
41             hs=parent.getPSet(name);
42         else
43             hs=new HashSet();
44         if (table.containsKey(name)) {
45             hs.addAll((HashSet)table.get(name));
46         }
47         return hs;
48     }
49
50     public Set getSetFromSameScope(String name) {
51         return getPSetFromSameScope(name);
52     }
53
54     private HashSet getPSetFromSameScope(String name) {
55         if (table.containsKey(name)) {
56             HashSet hs=(HashSet)table.get(name);
57             return hs;
58         } else
59             return new HashSet();
60     }
61
62     public Descriptor get(String name) {
63         Descriptor d = getFromSameScope(name);
64         if (d == null && parent != null) {
65             return parent.get(name);
66         } else {
67             return d;
68         }
69     }
70
71     public Descriptor getFromSameScope(String name) {
72         if (table.containsKey(name)) {
73             HashSet hs=(HashSet) table.get(name);
74             return (Descriptor) hs.iterator().next();
75         } else
76             return null;
77
78     }
79     
80     public Enumeration getNames() {
81         return table.keys();
82     }
83
84     public Iterator getNamesIterator() {
85         return table.keySet().iterator();
86     }
87
88     public Set getValueSet() {
89         return valueset;
90     }
91
92     public Iterator getDescriptorsIterator() {
93         return getValueSet().iterator();
94     }
95
96     public Set getAllValueSet() {
97         HashSet hs=null;
98         if (parent!=null)
99             hs=(HashSet) parent.getAllValueSet();
100         else
101             hs=new HashSet();
102         hs.addAll(valueset);
103         return hs;
104     }
105
106     public Iterator getAllDescriptorsIterator() {
107         return getAllValueSet().iterator();
108     }
109
110     public boolean contains(String name) {
111         return (get(name) != null);
112     }
113             
114     public SymbolTable getParent() {
115         return parent;
116     }
117     
118     public void setParent(SymbolTable parent) {
119         this.parent = parent;
120     }
121
122     public String toString() {
123         return "ST: " + table.toString();               
124     }
125 }