def impl_op(engine, precedence, typ, name):
    from pypy.lang.prolog.interpreter import parsing

    if engine.operations is None:
        engine.operations = parsing.make_default_operations()
    operations = engine.operations
    precedence_to_ops = {}
    for prec, allops in operations:
        precedence_to_ops[prec] = allops
        for form, ops in allops:
            try:
                index = ops.index(name)
                del ops[index]
            except ValueError:
                pass
    if precedence != 0:
        if precedence in precedence_to_ops:
            allops = precedence_to_ops[precedence]
            for form, ops in allops:
                if form == typ:
                    ops.append(name)
                    break
            else:
                allops.append((typ, [name]))
        else:
            for i in range(len(operations)):
                (prec, allops) = operations[i]
                if precedence > prec:
                    operations.insert(i, (precedence, [(typ, [name])]))
                    break
            else:
                operations.append((precedence, [(typ, [name])]))
    engine.parser = parsing.make_parser_at_runtime(engine.operations)
 def __init__(self):
     self.parser = None
     self.operations = make_default_operations()
     self.terms = []
Beispiel #3
0
 def __init__(self):
     self.parser = None
     self.operations = make_default_operations()
     self.terms = []