summaryrefslogtreecommitdiff
path: root/st/SymbolTable.java
diff options
context:
space:
mode:
Diffstat (limited to 'st/SymbolTable.java')
-rw-r--r--st/SymbolTable.java52
1 files changed, 52 insertions, 0 deletions
diff --git a/st/SymbolTable.java b/st/SymbolTable.java
new file mode 100644
index 0000000..0757541
--- /dev/null
+++ b/st/SymbolTable.java
@@ -0,0 +1,52 @@
+package st;
+
+import java.util.*;
+
+public class SymbolTable {
+
+ private HashMap<String,AbstractInstance> symt;
+
+ public SymbolTable() {
+ this.symt = new HashMap<>();
+ }
+
+ public String toString() {
+ StringBuilder mapAsString = new StringBuilder("{");
+ for (String key : this.symt.keySet()) {
+ mapAsString.append(key + ":" + this.symt.get(key) + ", ");
+ }
+ mapAsString.delete(mapAsString.length()-2, mapAsString.length()).append("}");
+ return mapAsString.toString();
+ }
+
+ public void addMethod() {
+ this.
+ }
+
+ public void put(String id, AbstractInstance symbol) {
+ this.symt.put(id, symbol);
+ }
+
+ public TypeInstance getType(String index) {
+ AbstractInstance symbol;
+ return ((symbol = this.symt.get(index)) !=
+ null && symbol.getType() != TypeEnum.classname &&
+ symbol.getType() != TypeEnum.method) ?
+ (TypeInstance) symbol : null;
+ }
+
+ public MethodInstance getMethod(String index) {
+ AbstractInstance symbol;
+ return ((symbol = this.symt.get(index)) !=
+ null && symbol.getType() == TypeEnum.method) ?
+ (MethodInstance) symbol : null;
+ }
+
+ public ClassInstance getClass(String index) {
+ AbstractInstance symbol;
+ return ((symbol = this.symt.get(index)) !=
+ null && symbol.getType() == TypeEnum.classname) ?
+ (ClassInstance) symbol : null;
+ }
+
+}