code: def parse(self, text):
          
          text = self.preprocess(text)
          token_stack = []
          last_pos = 0
  
          # Iterate through all matched tokens
          for match in self.regex.finditer(text):
              # Find which token has been matched by regex
              token, match_type, group = self.get_matched_token(match)
  
              # Get params from stack of tokens
              params = self.get_params(token_stack)
  
              # Should we skip interpreting tokens?
              skip = token_stack[-1].skip if token_stack else False
  
              # Check for end token first
              if match_type == MatchType.end:
                  if not skip or token_stack[-1] == token:
                      removed = self.remove_token(token_stack, token)
                      if removed:
                          skip = False
                      else:
                          skip = True
  
              if not skip:
                  # Append text preceding matched token
                  start_pos = match.start(group)
                  if start_pos > last_pos:
                      yield Segment(self.postprocess(text[last_pos:start_pos]), **params)
  
                  # Actions specific for start token or single token
                  if match_type == MatchType.start:
                      token_stack.append(token)
                  elif match_type == MatchType.single:
                      single_params = params.copy()
                      single_params.update(token.params)
                      single_text = token.text if token.text is not None else match.group(group)
                      yield Segment(single_text, token=token, match=match, **single_params)
  
                  # Move last position pointer to the end of matched token
                  last_pos = match.end(group)
  
          # Append anything that's left
          if last_pos < len(text):
              params = self.get_params(token_stack)
              yield Segment(self.postprocess(text[last_pos:]), **params)
docs: Parse text to obtain list of Segments