blob: 992e87368cf00a18a80292637a238d2ab5756fc7 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
package sableCCCalculator;
import java.util.HashMap;
import sableCCCalculator.types.*;
public class SymbolTable {
public interface SymbolTableIndex {}
public abstract class Name implements SymbolTableIndex {
// can be used for functions too hopefully one day...
protected String name;
String getName() {
return this.name;
}
}
public class Constant implements SymbolTableIndex {
int index;
public Constant(int index) {
this.index = index;
}
}
public class Variable extends Name {
public Variable(String name) {
this.name = name;
}
}
private HashMap<SymbolTableIndex, Type> theSymbolTable = new HashMap<>();
public SymbolTableIndex addConstant(Type item) {
SymbolTableIndex index = new Constant(item.hashCode());
theSymbolTable.put(index, item);
return index;
}
public SymbolTableIndex addVariable(Type item, String name) {
SymbolTableIndex index = new Variable(name);
theSymbolTable.put(index, item);
return index;
}
public void updateVariable(Type newItem, SymbolTableIndex index) {
theSymbolTable.replace(index, newItem);
}
public Type get(SymbolTableIndex index) {
return theSymbolTable.get(index);
}
public static void main(String[] args) {
SymbolTable symbolTable = new SymbolTable();
symbolTable.addConstant(new Int(3));
SymbolTableIndex i_var = symbolTable.addVariable(new Int(0), "i");
System.out.println(symbolTable.get(i_var));
symbolTable.updateVariable(symbolTable.get(i_var).add(new Int(1)), i_var);
System.out.println(symbolTable.get(i_var));
}
}
|