docs: 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]