<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def register(self, table):
 """Adds a shared table to the catalog. Args: table (SymbolTable):
 A non-system, shared symbol table. """

        if table.table_type.is_system:
            raise ValueError('Cannot add system table to catalog')
        if not table.table_type.is_shared:
            raise ValueError('Cannot add local table to catalog')
        if table.is_substitute:
            raise ValueError('Cannot add substitute table to catalog')

        versions = self.__tables.get(table.name)
        if versions is None:
            versions = {}
            self.__tables[table.name] = versions
        versions[table.version] = table