Ejemplo n.º 1
0
def parse():
    import io

    source = """% Equality test
ancestor(A, B) :-
    parent(A, B).
ancestor(A, B) :-
    parent(A, C),
    D = C,      % Unification required
    ancestor(D, B).
sibling(A, B) :-
    parent(P, A),
    parent(P, B),
    A != B. % negation required
parent(john, douglas).
parent(john, mary).
parent(bob, john).
parent(ebbon, bob).
ancestor(A, B)?
"""

    expected = """assert{ ancestor(A, B) :- parent(A, B) }
assert{ ancestor(A, B) :- parent(A, C), D = C, ancestor(D, B) }
assert{ sibling(A, B) :- parent(P, A), parent(P, B), A != B }
assert{ parent(john, douglas) }
assert{ parent(john, mary) }
assert{ parent(bob, john) }
assert{ parent(ebbon, bob) }
query{ ancestor(A, B) }"""

    tokens = tokenizer.tokenize(io.StringIO(source))

    buffer = []
    for e in parser._parse(tokens):
        buffer.append("{}{{ {} }}".format(e[1], e[0]))

    result = '\n'.join(buffer)

    assert result == expected
Ejemplo n.º 2
0
def parse(reader):
    """Helper function to act as single point of entry for simple parses."""
    yield from _parse(tokenizer.tokenize(reader))