:- use_module(library(pio)). log_to_tree(File) :- writeln('input trees;'), writeln('input boxes;'), writeln('beginfig(1);'), phrase_from_file(log(Ls), File), writeln("tree.s (btex $root$ etex) ("), phrase(tree, Ls), writeln(");\n"), writeln('drawtrees(s);'), writeln('endfig;'), writeln('end'),!. log([]) --> []. log([T|Ts]) --> token(T), !, ws, log(Ts). token(left) --> "left". token(right) --> "right". token(false) --> "false". token(depth) --> "depth". token(solution) --> "solution". ws --> [W], { code_type(W, space) }, ws. ws --> []. tree --> []. tree --> [left,depth,false], !, { write("tree (btex ! etex) ()") }, tree. tree --> [left,solution,false], !, { write("tree (btex $\\top$ etex) ()") }, tree. tree --> [left,false], !, { write("tree (btex $\\bot$ etex) ()") }, tree. tree --> [left], { write("tree (btex l etex) (") }, tree. tree --> [right,depth,false], !, { write(", tree (btex ! etex) ()") }, tree. tree --> [right,solution,false], !, { write(", tree (btex $\\top$ etex) ()") }, tree. tree --> [right,false], !, { write(", tree(btex $\\bot$ etex) ()") }, tree. tree --> [right], { write(", tree(btex r etex) (") }, tree. tree --> [false], { write(")") }, tree. % maybe_next, [val(X)] --> [val(X)], !, { format(", ") }. % maybe_next, [X] --> [X], !. % maybe_next --> [], !, { format(";\n") }. %?- log_to_tree("log0.txt"). %@ tree (btex v etex) (tree (btex 1 etex) (tree (btex v etex) ((leaf(btex 1 etex)), (leaf(btex 2 etex)))), tree (btex 2 etex) (tree (btex v etex) ((leaf(btex 1 etex)), (leaf(btex 2 etex))))); %@ true . %?- log_to_tree("log1.txt"). %?- log_to_tree("qlog4.txt"). %?- log_to_tree("qlog4enum.txt"). %@ tree.s (btex $root$ etex) (tree (btex l etex) (tree (btex l etex) (), tree(btex r etex) (tree (btex l etex) (), tree(btex r etex) ())), tree(btex r etex) (tree (btex l etex) (); %@ true . %?- log_to_tree("qlog8-4.txt"). %@ true ; %@ false. %?- log_to_tree("qlog8-6.txt"). %?- log_to_tree("qlog8-7.txt"). %?- log_to_tree("log3.txt"). %@ true ; %@ false. %@ tree.s (btex r etex) (tree (btex l etex) (tree (btex l etex) (), tree(btex r etex) ()), tree(btex r etex) (tree (btex l etex) ())); %@ true . %?- log_to_tree("qlog5.txt").