diff options
Diffstat (limited to 'st/SymbolTable.java')
-rw-r--r-- | st/SymbolTable.java | 52 |
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; + } + +} |