Example #1
0
def test_atom_formatting():
    f = formatting.TermFormatter(Engine(), quoted=False, ignore_ops=False)
    t = parse_query_term("'abc def'.")
    assert f.format(t) == "abc def"
    f = formatting.TermFormatter(Engine(), quoted=True, ignore_ops=False)
    t = parse_query_term("'abc def'.")
    assert f.format(t) == "'abc def'"
    t = parse_query_term("abc.")
    assert f.format(t) == "abc"
Example #2
0
def test_op_formatting():
    f = formatting.TermFormatter(Engine(), quoted=False, ignore_ops=False)
    t = parse_query_term("'+'(1, 2).")
    assert f.format(t) == "1+2"
    t = parse_query_term("'+'(1, *(3, 2)).")
    assert f.format(t) == "1+3*2"
    t = parse_query_term("'*'(1, *(3, 2)).")
    assert f.format(t) == "1*(3*2)"
Example #3
0
    def get_errstr(self, engine):
        from prolog.builtin import formatting
        from prolog.interpreter import term, signature
        errorsig = signature.Signature.getsignature("error", 1)

        f = formatting.TermFormatter(engine, quoted=True, max_depth=20)
        f._make_reverse_op_mapping()

        t = self.term
        if not isinstance(t, term.Callable) or not t.signature().eq(errorsig):
            return "Unhandled exception: %s" % (f.format(t), )

        errorterm = t.argument_at(0)

        if isinstance(errorterm, term.Callable):
            if errorterm.name() == "instantiation_error":
                return "arguments not sufficiently instantiated"
            elif errorterm.name() == "existence_error":
                if isinstance(errorterm, term.Callable):
                    return "Undefined %s: %s" % (
                        f.format(errorterm.argument_at(0)),
                        f.format(errorterm.argument_at(1)))
            elif errorterm.name() == "domain_error":
                if isinstance(errorterm, term.Callable):
                    return "Domain error: '%s' expected, found '%s'" % (
                        f.format(errorterm.argument_at(0)),
                        f.format(errorterm.argument_at(1)))
            elif errorterm.name() == "type_error":
                if isinstance(errorterm, term.Callable):
                    return "Type error: '%s' expected, found '%s'" % (
                        f.format(errorterm.argument_at(0)),
                        f.format(errorterm.argument_at(1)))
            elif errorterm.name() == "syntax_error":
                if isinstance(errorterm, term.Callable):
                    return "Syntax error: '%s'" % \
                    f.format(errorterm.argument_at(0))
            elif errorterm.name() == "permission_error":
                if isinstance(errorterm, term.Callable):
                    return "Permission error: '%s', '%s', '%s'" % (
                        f.format(errorterm.argument_at(0)),
                        f.format(errorterm.argument_at(1)),
                        f.format(errorterm.argument_at(2)))
            elif errorterm.name() == "representation_error":
                if isinstance(errorterm, term.Callable):
                    return "%s: Cannot represent: %s" % (
                        f.format(errorterm.argument_at(0)),
                        f.format(errorterm.argument_at(1)))
            elif errorterm.name() == "import_error":
                if isinstance(errorterm, term.Callable):
                    return "Exported procedure %s:%s is not defined" % (
                        f.format(errorterm.argument_at(0)),
                        f.format(errorterm.argument_at(1)))
            else:
                return "Internal error"  # AKA, I have no clue what went wrong.
Example #4
0
def var_representation(var_to_pos, engine, write, heap):
    from prolog.builtin import formatting
    f = formatting.TermFormatter(engine, quoted=True, max_depth=20)
    for var, real_var in var_to_pos.iteritems():
        if var.startswith("_"):
            continue
        value = real_var.dereference(heap)
        val = f.format(value)
        if isinstance(value, term.AttVar):
            write("%s\n" % val)
        else:
            write("%s = %s\n" % (var, val))
Example #5
0
def test_list():
    f = formatting.TermFormatter(Engine(), quoted=False, ignore_ops=False)
    t = parse_query_term("[1, 2, 3, 4, 5 | X].")
    assert f.format(t) == "[1, 2, 3, 4, 5|_G0]"
    t = parse_query_term("[a, b, 'A$%%$$'|[]].")
    assert f.format(t) == "[a, b, A$%%$$]"
    t = parse_query_term("'.'(a, b, c).")
    assert f.format(t) == ".(a, b, c)"

    X = BindingVar()
    a = Callable.build('a')
    t = Callable.build(".", [a, X])
    X.binding = Callable.build(".", [a, Callable.build("[]")])
    assert f.format(t) == "[a, a]"