summaryrefslogtreecommitdiffstats
path: root/src/front/symbols.py
blob: a868d77159d0980d8436918a9a8cef07c533fb58 (plain) (blame)
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
class SymbolTable:
    def __init__(self):
        self.symbols = {}
        return

    def put(self, token, id=None):
        if id and not id.isdigit():
            raise Exception("Only digits as id possible. '%s' is not a number" % id)

        if id == None:
            if len(self.symbols) <= 0:
                id = 0
            else:
                id = max(self.symbols.values()) + 1
            
        self.symbols[token] = id
        return id
        

    def get(self, token):
        if token in self.symbols:
            return self.symbols[token]

        return None

    def getOrPut(self, token):
        if self.get(token):
            return self.get(token)

        return self.put(token)