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]
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.