def parse(scanner, rules, scope = ParserScope.empty)
      result = false
      backtracking(scanner) do
        if scope = parse_children(scanner, rules, scope.nest) {|r| result = r }
          yield scope if block_given?
          result
        end
      end
    end
def parse(scanner, rules, scope = ParserScope.empty)
      result = false
      backtracking(scanner) do
        if scope = parse_children(scanner, rules, scope.nest) {|r| result = r }
          yield scope if block_given?
          result
        end
      end
    end
Parse each parser in sequence, and if they all succeed return the result
 of applying the semantic action to the captured results.

 @param (see Match#parse)

 @return the result of applying the semantic action to the captured
   results of each parser, or +false