Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def lit(a):
- def inner(s):
- if s.startswith(a):
- return a, s[len(a):]
- return None, s
- return inner
- def seq(*exprs):
- def inner(s):
- results = []
- new_s = s
- for expr in exprs:
- result, new_s = expr(new_s)
- if result is None:
- return None, s
- results.append(result)
- return results, new_s
- return inner
- def alt(*exprs):
- def inner(s):
- for expr in exprs:
- result, new_s = expr(s)
- if result is not None:
- return result, new_s
- return None, s
- return inner
- def opt(expr):
- def inner(s):
- result, s = expr(s)
- if result is None:
- return '', s
- return result, s
- return inner
- def many(expr):
- def inner(s):
- results = []
- while True:
- result, new_s = expr(s)
- if result is None:
- break
- results.append(result)
- s = new_s
- return results, s
- return inner
- def many1(expr):
- def inner(s):
- result, s = many(expr)(s)
- if not result:
- return None, s
- return result, s
- return inner
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement