-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathSymbolTable.cpp
More file actions
53 lines (46 loc) · 1.5 KB
/
SymbolTable.cpp
File metadata and controls
53 lines (46 loc) · 1.5 KB
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
/*
* Created by Francois W. Nel on 27 Jun 2016.
*/
#include "SymbolTable.h"
using namespace std;
SymbolTable::SymbolTable() {
// Populate the table with predefined symbols.
symbolAddressTable["SP"] = 0;
symbolAddressTable["LCL"] = 1;
symbolAddressTable["ARG"] = 2;
symbolAddressTable["THIS"] = 3;
symbolAddressTable["THAT"] = 4;
symbolAddressTable["R0"] = 0;
symbolAddressTable["R1"] = 1;
symbolAddressTable["R2"] = 2;
symbolAddressTable["R3"] = 3;
symbolAddressTable["R4"] = 4;
symbolAddressTable["R5"] = 5;
symbolAddressTable["R6"] = 6;
symbolAddressTable["R7"] = 7;
symbolAddressTable["R8"] = 8;
symbolAddressTable["R9"] = 9;
symbolAddressTable["R10"] = 10;
symbolAddressTable["R11"] = 11;
symbolAddressTable["R12"] = 12;
symbolAddressTable["R13"] = 13;
symbolAddressTable["R14"] = 14;
symbolAddressTable["R15"] = 15;
symbolAddressTable["SCREEN"] = 16384;
symbolAddressTable["KBD"] = 24576;
}
void SymbolTable::addEntry(string symbol, int address) {
if (symbolAddressTable.find(symbol) == symbolAddressTable.end()) {
symbolAddressTable[symbol] = address;
}
}
bool SymbolTable::contains(string symbol) {
return (symbolAddressTable.find(symbol) != symbolAddressTable.end());
}
int SymbolTable::getAddress(string symbol) {
if (symbolAddressTable.find(symbol) != symbolAddressTable.end()) {
return symbolAddressTable[symbol];
}
// If the table does not contain the symbol.
return 0;
}