class SymbolTable:
    def __init__(self):
        self.symbols = {}
        return

    def put(self, token, id = None):
        try:
            id = int(id)
        except TypeError:
            try:
                id = max(self.symbols.values()) + 1
            except ValueError:
                id = 0
        except ValueError:
            raise ValueError("only digits as id possible. '%s' is not a number" % id)

        self.symbols[token] = id
        return id

    def get(self, token):
        try:
            return self.symbols[token]
        except KeyError:
            return None

    def getOrPut(self, token):
        try:
            return self.symbols[token]
        except KeyError:
            return self.put(token)