(patterns, nodes)
Generator yielding matches for a sequence of patterns and nodes.

    Args:
        patterns: a sequence of patterns
        nodes: a sequence of nodes

    Yields:
        (count, results) tuples where:
        count: the entire sequence of patterns matches nodes[:count];
        results: dict containing named submatches.
Generator yielding matches for a sequence of patterns and nodes.
Generator yielding matches for a sequence of patterns and nodes .
def generate_matches(patterns, nodes):
    """
    Generator yielding matches for a sequence of patterns and nodes.

    Args:
        patterns: a sequence of patterns
        nodes: a sequence of nodes

    Yields:
        (count, results) tuples where:
        count: the entire sequence of patterns matches nodes[:count];
        results: dict containing named submatches.
        """
    if not patterns:
        yield 0, {}
    else:
        p, rest = patterns[0], patterns[1:]
        for c0, r0 in p.generate_matches(nodes):
            if not rest:
                yield c0, r0
            else:
                for c1, r1 in generate_matches(rest, nodes[c0:]):
                    r = {}
                    r.update(r0)
                    r.update(r1)
                    yield c0 + c1, r
def generate_matches ( patterns , nodes ) : if not patterns : yield 0 , { } else : p , rest = patterns [ 0 ] , patterns [ 1 : ] for c0 , r0 in p . generate_matches ( nodes ) : if not rest : yield c0 , r0 else : for c1 , r1 in generate_matches ( rest , nodes [ c0 : ] ) : r = { } r . update ( r0 ) r . update ( r1 ) yield c0 + c1 , r