Commit ebbf9d0596c5185358cecd6a2b4c97e7a023746d
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 | % == No, Emacs this is -*-Prolog-*- code, not what you thought... ============= | 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 | load_ast(AST) :- load_ast(_>[], [], AST). | 15 | load_ast(AST) :- load_ast(_>[], [], AST). |
| 4 | 16 | ||
| 5 | load_ast(end_of_file, AST, AST). | 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 | load_ast(IN > INT, IN, OUT) :- read(OP), !, | 21 | load_ast(IN > INT, IN, OUT) :- read(OP), !, |
| 7 | - ( g_read(ast_debug, true) -> | ||
| 8 | - write(OP), nl | ||
| 9 | - ; true ), | ||
| 10 | load_ast(OP, INT, OUT). | 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 | slurp(FILE, AST) :- see(FILE), load_ast(AST), !, seen. | 43 | slurp(FILE, AST) :- see(FILE), load_ast(AST), !, seen. |
| 13 | slurp(_, end_of_file) :- seen. | 44 | slurp(_, end_of_file) :- seen. |