Commit ebbf9d0596c5185358cecd6a2b4c97e7a023746d

Authored by Salvador Abreu
1 parent 39c71c9f
Exists in master

dump_ast looks prettier

Showing 1 changed file with 34 additions and 3 deletions   Show diff stats
fzn-parser/fznslurp.pl
1 1 % == No, Emacs this is -*-Prolog-*- code, not what you thought... =============
2 2  
  3 +:- initialization(main).
  4 +
  5 +main :-
  6 + argument_list(A),
  7 + main(A).
  8 +
  9 +main([load]) :- !, load_ast(AST), dump_ast(AST), halt.
  10 +main([]) :- !.
  11 +
  12 +
  13 +% -----------------------------------------------------------------------------
  14 +
3 15 load_ast(AST) :- load_ast(_>[], [], AST).
4 16  
5 17 load_ast(end_of_file, AST, AST).
  18 +load_ast(IN > INT, IN, OUT) :- g_read(ast_debug, true), read(OP), !,
  19 + write(OP), nl,
  20 + load_ast(OP, INT, OUT).
6 21 load_ast(IN > INT, IN, OUT) :- read(OP), !,
7   - ( g_read(ast_debug, true) ->
8   - write(OP), nl
9   - ; true ),
10 22 load_ast(OP, INT, OUT).
11 23  
  24 +% -----------------------------------------------------------------------------
  25 +
  26 +dump_ast([fzn(PREDS, VARS, CONSTRS, SOLVE)]) :-
  27 + !,
  28 + format("AST:\n", []),
  29 + format(" preds:\n", []), PREDS=preds(PS), dump_list(PS),
  30 + format(" vars:\n", []), VARS=vars(VS), dump_list(VS),
  31 + format(" constrs:\n", []), CONSTRS=constrs(CS), dump_list(CS),
  32 + format(" goal:\n ~w\n", [SOLVE]).
  33 +
  34 +dump_ast(AST) :- write(AST), nl.
  35 +
  36 +% -----------------------------------------------------------------------------
  37 +
  38 +dump_list([]).
  39 +dump_list([I|Is]) :- format(" ~w\n", [I]), dump_list(Is).
  40 +
  41 +% -----------------------------------------------------------------------------
  42 +
12 43 slurp(FILE, AST) :- see(FILE), load_ast(AST), !, seen.
13 44 slurp(_, end_of_file) :- seen.
... ...