Advertisement
Guest User

Untitled

a guest
Sep 19th, 2019
108
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.23 KB | None | 0 0
  1. def lit(a):
  2.     def inner(s):
  3.         if s.startswith(a):
  4.             return a, s[len(a):]
  5.         return None, s
  6.     return inner
  7.  
  8. def seq(*exprs):
  9.     def inner(s):
  10.         results = []
  11.         new_s = s
  12.         for expr in exprs:
  13.             result, new_s = expr(new_s)
  14.             if result is None:
  15.                 return None, s
  16.             results.append(result)
  17.         return results, new_s
  18.     return inner
  19.  
  20. def alt(*exprs):
  21.     def inner(s):
  22.         for expr in exprs:
  23.             result, new_s = expr(s)
  24.             if result is not None:
  25.                 return result, new_s
  26.         return None, s
  27.     return inner
  28.  
  29. def opt(expr):
  30.     def inner(s):
  31.         result, s = expr(s)
  32.         if result is None:
  33.             return '', s
  34.         return result, s
  35.     return inner
  36.  
  37. def many(expr):
  38.     def inner(s):
  39.         results = []
  40.         while True:
  41.             result, new_s = expr(s)
  42.             if result is None:
  43.                 break
  44.             results.append(result)
  45.             s = new_s
  46.         return results, s
  47.     return inner
  48.  
  49. def many1(expr):
  50.     def inner(s):
  51.         result, s = many(expr)(s)
  52.         if not result:
  53.             return None, s
  54.         return result, s
  55.     return inner
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement