docs: def match_rules_context_multi(tree, rules, parent_context={}):
      """Recursively matches a Tree structure with rules and returns context
  
      Args:
          tree (Tree): Parsed tree structure
          rules (dict): See match_rules
          parent_context (dict): Context of parent call
      Returns:
          dict: Context matched dictionary of matched rules or
          None if no match
      """
      all_contexts = []
      for template, match_rules in rules.items():
          context = parent_context.copy()
          if match_template(tree, template, context):
              child_contextss = []
              if not match_rules:
                  all_contexts += [context]
              else:
                  for key, child_rules in match_rules.items():
                      child_contextss.append(match_rules_context_multi(context[key], child_rules, context))
                  all_contexts += cross_context(child_contextss)    
      return all_contexts