-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathSymbolTable.java
50 lines (44 loc) · 1.27 KB
/
SymbolTable.java
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
import java.util.HashMap;
/**
* Since Hack instructions can contain symbolic references, the assembly process must resolve them into actual
* addresses. The assembler deals with this task using a <i>symbol table</i>, designed to create and maintain the
* correspondence between symbols and their meaning (in Hack's case, RAM and ROM addresses).
*
* @author Maarten Derks
*/
class SymbolTable {
private final HashMap<String, Integer> st;
/**
* Creates a new empty symbol table.
*/
SymbolTable() {
st = new HashMap<>();
}
/**
* Adds <code><symbol,address></code> to the table.
*
* @param symbol the symbol to be added
* @param address the address of the symbol
*/
void addEntry(String symbol, int address) {
st.put(symbol, address);
}
/**
* Does the symbol table contain the given <code>symbol</code>?
*
* @param symbol
* @return
*/
boolean contains(String symbol) {
return st.get(symbol) != null;
}
/**
* Returns the address associated with the <code>symbol</code>.
*
* @param symbol
* @return the address (int) associated with symbol
*/
int getAddress(String symbol) {
return st.get(symbol);
}
}