code: def setup_regex(self):
          
          #Regex for matching the entire body of the type and getting top-level modifiers.
          self._RX_TYPE = r"\n\s*type(?P<modifiers>,\s+(public|private))?(\s*::)?\s+(?P<name>[A-Za-z0-9_]+)" + \
                          r"(?P<contents>.+?)end\s*type(\s+(?P=name))?"
          self.RE_TYPE = re.compile(self._RX_TYPE, re.DOTALL | re.I)
          #This regex is the same as RE_TYPE, only the contents are removed from the definition.
          self._RX_SIG =  r"type(?P<modifiers>,\s+(public|private))?(\s+::)?\s+(?P<name>[A-Za-z0-9_]+)"
          self.RE_SIG = re.compile(self._RX_SIG, re.I)
  
          #Regex for finding if the type is private
          self._RX_PRIV = "private.+?(contains)?"
          self.RE_PRIV = re.compile(self._RX_PRIV, re.DOTALL | re.I)
          #Regex for finding methods buried in a type declaration.
          self._RX_EXEC = r"^\s*(?P<modifiers>[^:]+)\s+::\s+(?P<name>[A-Za-z0-9_]+)" + \
                          r"(\s+=>\s+(?P<points>[A-Za-z0-9_]+))?$"
          self.RE_EXEC = re.compile(self._RX_EXEC, re.M | re.I)
          #Regex for getting text after contains statement
          self._RX_CONTAINS = "\n\s*contains(?P<remainder>.+)"
          self.RE_CONTAINS = re.compile(self._RX_CONTAINS, re.DOTALL | re.I)
docs: Sets up the patterns and compiled regex objects for parsing types.