From a1c15f046183373baf5deb66e77188e656806fb7 Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Sun, 23 Apr 2023 00:24:42 -0600 Subject: squash all the things --- submit/SymbolTable.java | 67 ++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 61 insertions(+), 6 deletions(-) (limited to 'submit/SymbolTable.java') diff --git a/submit/SymbolTable.java b/submit/SymbolTable.java index 7ca6b27..09251bc 100644 --- a/submit/SymbolTable.java +++ b/submit/SymbolTable.java @@ -3,6 +3,7 @@ package submit; import java.util.ArrayList; import java.util.HashMap; import java.util.List; +import submit.ast.VarType; /* * Code formatter project @@ -17,14 +18,71 @@ public class SymbolTable { private SymbolTable parent; private final List children; + private int offset; + + public static int LABEL_IDENTIFIER = 0; + + public static String nextId() { + return Integer.toString(SymbolTable.LABEL_IDENTIFIER++); + } + public SymbolTable() { + offset = 0; table = new HashMap<>(); parent = null; children = new ArrayList<>(); + + this.addGlobalSymbols(); + } + + public List symbolNames() { return new ArrayList<>(table.keySet()); } + + public void addGlobalSymbols() { + SymbolInfo println = new SymbolInfo("println", null, true); + this.addSymbol("println", println); + } + + public void addSymbol(String id, SymbolInfo symbol) { table.put(id, symbol); } + + public int addOffset(int n) { + offset -= 4 * n; + return offset; + } + + public int getOffset() { return this.offset; } + + // Add symbols in before and reorder offsets such that symbols in before have + // a "higher" offset + public void addOtherTableBefore(SymbolTable before) { + offset = 0; + List thisSymbols = symbolNames(); + + for (String id : before.symbolNames()) { + SymbolInfo symbol = before.find(id); + if (!symbol.isFunction()) { + addOffset(1); + symbol.setOffset(offset); + } + addSymbol(id, symbol); + } + + for (String id : thisSymbols) { + SymbolInfo symbol = table.get(id); + if (!symbol.isFunction()) { + addOffset(1); + table.get(id).setOffset(offset); + } + } } - public void addSymbol(String id, SymbolInfo symbol) { - table.put(id, symbol); + public int offsetOf(String id) { + if (table.containsKey(id)) { + return table.get(id).getOffset(); + } + if (parent != null) { + return -parent.getOffset() + parent.offsetOf(id); + } + return 0; // This shouldn't happen :D } /** @@ -56,8 +114,5 @@ public class SymbolTable { return child; } - public SymbolTable getParent() { - return parent; - } - + public SymbolTable getParent() { return parent; } } -- cgit v1.2.3-70-g09d2