def parse(scanner, rules, scope = ParserScope.empty)
      backtracking(scanner) do
        if scope = parse_children(scanner, rules, scope.nest)
          yield scope if block_given?
          parse_result(scope)
        end
      end
    end
def parse(scanner, rules, scope = ParserScope.empty)
      backtracking(scanner) do
        if scope = parse_children(scanner, rules, scope.nest)
          yield scope if block_given?
          parse_result(scope)
        end
      end
    end
Try each parser in sequence, and if they all succeed return an array of
 captured results, or return +false+ if any parser fails.

 @param (see Match#parse)

 @return an array of captured results of each parser in sequence, or
   +false+