'Initializer.
Args:
content: optional sequence of subsequences of patterns;
if absent, matches one node;
if present, each subsequence is an alternative [*]
min: optional minimum number of times to match, default 0
max: optional maximum number of times to match, default HUGE
name: optional name assigned to this match
[*] Thus, if content is [[a, b, c], [d, e], [f, g, h]] this is
equivalent to (a b c | d e | f g h); if content is None,
this is equivalent to \'.\' in regular expression terms.
The min and max parameters work as follows:
min=0, max=maxint: .*
min=1, max=maxint: .+
min=0, max=1: .?
min=1, max=1: .
If content is not None, replace the dot with the parenthesized
list of alternatives, e.g. (a b c | d e | f g h)*'

def __init__(self, content=None, min=0, max=HUGE, name=None):

    assert (0 <= min <= max <= HUGE), (min, max)
    if (content is not None):
        content = tuple(map(tuple, content))
        assert len(content), repr(content)
        for alt in content:
            assert len(alt), repr(alt)
    self.content = content
    self.min = min
    self.max = max
    self.name = name
