Example #1
0
def greedy_seplist(compiler, cont, item, separator, template=None, result=None):
  if result is None:
    return begin(item, greedy_any1(begin(separator, item))
                 ).cps(compiler, cont)  
  else:
    result1  = compiler.new_var(il.ConstLocalVar('result'))
    result2  = compiler.new_var(Var('result'))
    result2_2  = result2.interlang()
    template1 = template.interlang()
    return begin(item, 
                 direct_interlang(il.Assign(result1, il.GetValue(template1))), 
                 greedy_any2(begin(separator, item), template, result2),
                 eval_unify(result, direct_interlang(il.add(il.MakeList(result1), result2_2)))
                 ).cps(compiler, cont)  
Example #2
0
def seplist(compiler, cont, item, separator, template=None, result=None):
    if result is None:
        return begin(item, any1(begin(separator, item))).cps(compiler, cont)
    else:
        result1 = compiler.new_var(il.ConstLocalVar('result'))
        result2 = compiler.new_var(Var('result'))
        result2_2 = result2.interlang()
        template1 = template.interlang()
        return begin(
            item, direct_interlang(il.Assign(result1, il.GetValue(template1))),
            any2(begin(separator, item), template, result2),
            eval_unify(
                result,
                direct_interlang(il.add(il.MakeList(result1),
                                        result2_2)))).cps(compiler, cont)
Example #3
0
def unify_macro_head_item1(compiler, cont, arg, head_item):
    # for direct call
    if isinstance(head_item, Var) and not isinstance(head_item, LogicVar):
        k = compiler.new_var(il.ConstLocalVar("cont"))
        return Assign(head_item, direct_interlang(il.Lamda((k,), arg.cps(compiler, k))))
    else:
        return unify(arg, head_item)
Example #4
0
def unify_macro_head_item1(compiler, cont, arg, head_item):
  # for direct call
  if isinstance(head_item, Var) and not isinstance(head_item, LogicVar):
    k = compiler.new_var(il.ConstLocalVar('cont'))
    return Assign(head_item, direct_interlang(il.Lamda((k, ), 
                  arg.cps(compiler, k))))
  else: 
    return unify(arg, head_item)
Example #5
0
 def cps_call(self, compiler, cont, args):
     # see The 90 minute Scheme to C compiler by Marc Feeley
     if self.has_cut():
         fun = wrap_cut(self.body).cps(compiler, cont)
     else:
         fun = self.body.cps(compiler, cont)
     params = tuple(x.interlang() for x in self.params)
     for var, arg in reversed(zip(params, args)):
         k = compiler.new_var(il.ConstLocalVar("cont"))
         fun = direct_interlang(il.Lamda((k,), arg.cps(compiler, k))).cps(compiler, il.Clamda(var, fun))
     return fun
Example #6
0
 def cps_call(self, compiler, cont, args):
   # see The 90 minute Scheme to C compiler by Marc Feeley
   if self.has_cut():
     fun = wrap_cut(self.body).cps(compiler, cont)
   else:
     fun = self.body.cps(compiler, cont)
   params = tuple(x.interlang() for x in self.params)
   for var, arg in reversed(zip(params, args)):
     k = compiler.new_var(il.ConstLocalVar('cont'))
     fun = direct_interlang(il.Lamda((k, ), arg.cps(compiler, k))
                            ).cps(compiler, il.Clamda(var, fun))
   return fun