-
Notifications
You must be signed in to change notification settings - Fork 0
/
symbol_table.py
36 lines (32 loc) · 1.28 KB
/
symbol_table.py
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
from value import Value
class SymbolTable():
def __init__(self, parent):
self.symbols = {}
self.parent = parent
def getSymbol(self, symbol, symbol_type=None):
if symbol in self.symbols.keys():
value = self.symbols[symbol]
if symbol_type is not None and symbol_type != value.getType():
value = self.parent.getSymbol(symbol, symbol_type)
return value
else:
return value
else:
if self.parent is not None:
symbol = self.parent.getSymbol(symbol)
return symbol
else:
raise ValueError("Variable {} not declared \
".format(symbol))
def setSymbol(self, symbol, value):
if symbol in self.symbols.keys():
var = self.symbols[symbol]
var.setValue(value)
else:
if self.parent is not None:
self.parent.setSymbol(symbol, value)
else:
raise ValueError("Variable {} not declared \
".format(symbol))
def createSymbol(self, symbol, var_type):
self.symbols[symbol] = Value(var_type)