def match1(p, text):
if not text: return False
return p == '.' or p == text[0]
def match_star(p, pattern, text):
return (match(pattern, text) or
(match(p, text) and
match_star(p, pattern, text[1:])))
print test()
api
def lit(string): return ('lit', string)
def seq(x, y): return ('seq', x, y)
def alt(x, y): return ('alt', x, y)
def star(x): return ('star', x)
def plus(x): return seq(x, star(x))
def opt(x): return alt(lit(''), x) #opt(x) means that x is optional
def oneof(chars): return ('oneof', tuple(chars))
dot = ('dot',)
eol = ('eol',)
def search(pattern, text):
for i in range(len(text)):
m = match(pattern, text[i:])
if :
return m
def match(pattern, text):
remainders = matchset(pattern, text)
if remainders:
shortest = min(remainders, key=len)
return
def components(pattern):
x = pattern[1] if len(pattern) > 1 else None
y = pattern[2] if len(pattern) > 2 else None
return pattern[0], x, y
def matchset(pattern, text):
elif 'seq' == op:
return set(t2 for t1 in matchset(x, text) for t2 in matchset(y, t1))
def seq(x, y) return lambda text: set().union(*map(y, x(text)))
def alt(x, y) return lambda text: x(text) | y(ext)
def genseq(x, y, Ns):
Nss = range(max(Ns)+1)
return set(m1 + m2
for m1 in x(Nss) for m2 in y(Nss)
if len(m1 + m2) in Ns)