Exemple #1
0
def char_on_predicate(test, name=''):
  def func(solver, cont, arg0):
    #assert isinstance(arg0, Var) and arg0.free(solver.env)
    text, pos = solver.parse_state
    c = text[pos]
    if not test(c): return
    for _ in unify(arg0, c, solver.env):
      solver.parse_state = text, pos+1
      yield cont,  True
      solver.parse_state = text, pos
  if name=='': name = test.__name
  return matcher(name)(func)
Exemple #2
0
def string__on_predicate(test, name='', onceMore=True):
  def func(solver, cont,  arg):
    #assert isinstance(arg, Var) and arg.free(solver.env)
    text, pos = solver.parse_state
    string = ''
    i = 0
    while pos+i<len(text):         
      char = text[pos+i]
      if not test(char): break
      string += char
      i += 1
    if onceMore and string=='': return
    for _ in unify(arg, string, solver.env):
      solver.parse_state = text, pos+i
      yield cont,  True
      solver.parse_state = text, pos
  if name=='': name = test.__name
  return matcher(name)(func)
Exemple #3
0
def quote_string(quote, name):
  def func(solver, cont,  arg0):
    #assert isinstance(arg0, Var) and arg0.free(solver.env)
    text, pos = solver.parse_state
    if pos>=len(text): return
    if text[pos]!=quote: return
    p = pos+1
    while p<len(text): 
      char = text[p]
      p += 1
      if char=='\\': p += 1
      elif char==quote: 
        string = text[pos+1:p-1]
        break
    else: return
    for _ in unify(arg0, string, solver.env): 
      solver.parse_state = text, p
      yield cont,  True
      solver.parse_state = text, pos
  return matcher(name)(func)