<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def get(self, key, default=None):
 """Returns a token by text or local ID, with a default. A given text image may be associated with more than one symbol ID. This will return the first definition. Note: User defined symbol IDs are always one-based. Symbol zero is a special symbol that always has no text. Args: key (unicode | int):
 The key to lookup. default(Optional[SymbolToken]):
 The default to return if the key is not found Returns: SymbolToken: The token associated with the key or the default if it doesn't exist. """

        if isinstance(key, six.text_type):
            return self.__mapping.get(key, None)
        if not isinstance(key, int):
            raise TypeError('Key must be int or Unicode sequence.')

        # TODO determine if $0 should be returned for all symbol tables.
        if key == 0:
            return SYMBOL_ZERO_TOKEN

        # Translate one-based SID to zero-based intern table
        index = key - 1
        if index < 0 or key > len(self):
            return default
        return self.__symbols[index]