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)