Commit 4029344a2b9f6c441576fd723e9b712ed4a3ca05
1 parent
6512088f
Exists in
master
now using free-ended symbol table model. refactor accordingly.
Showing
2 changed files
with
19 additions
and
16 deletions
Show diff stats
fzn-parser/semantic.pl
| ... | ... | @@ -2,31 +2,31 @@ |
| 2 | 2 | |
| 3 | 3 | sa_names(fzn(preds(IP), vars(IV), constrs(IC), SOLVE), |
| 4 | 4 | fzn(preds(OP), vars(OV), constrs(OC), SOLVE, ST)) :- |
| 5 | - sa_n_traverse(IP, OP, [], ST1), % predicates | |
| 6 | - sa_n_traverse(IV, OV, ST1, ST2), % variables | |
| 7 | - sa_n_traverse(IC, OC, ST2, ST). % constraints | |
| 5 | + sa_n_traverse(IP, OP, ST), % predicates | |
| 6 | + sa_n_traverse(IV, OV, ST), % variables | |
| 7 | + sa_n_traverse(IC, OC, ST). % constraints | |
| 8 | 8 | |
| 9 | 9 | % ----------------------------------------------------------------------------- |
| 10 | 10 | |
| 11 | -sa_n_traverse([], [], ST, ST). | |
| 12 | -sa_n_traverse([N|Ns], [NN|NNs], IST, OST) :- | |
| 13 | - sa_n(N, NN, IST, MST), | |
| 14 | - sa_n_traverse(Ns, NNs, MST, OST). | |
| 11 | +sa_n_traverse([], [], ST). | |
| 12 | +sa_n_traverse([N|Ns], [NN|NNs], ST) :- | |
| 13 | + sa_n(N, NN, ST), | |
| 14 | + sa_n_traverse(Ns, NNs, ST). | |
| 15 | 15 | |
| 16 | 16 | |
| 17 | 17 | % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
| 18 | 18 | % |
| 19 | -% sa_n(AST_N_IN, AST_N_OUT, ST_IN, ST_OUT) | |
| 19 | +% sa_n(AST_N_IN, AST_N_OUT, ST) | |
| 20 | 20 | |
| 21 | -sa_n(var(N,T,I,A), var(N,T), IST, OST) :- | |
| 22 | - sa_attribs(A, AX, IST, ST1), | |
| 23 | - st_insert(ST1, N, var(N,T,I,AX), OST). | |
| 21 | +sa_n(var(N,T,I,A), var(N,T), ST) :- | |
| 22 | + sa_attribs(A, AX, ST), | |
| 23 | + st_insert(ST, N, var(N,T,I,AX)). | |
| 24 | 24 | |
| 25 | 25 | sa_n(constraint(_C)). |
| 26 | 26 | |
| 27 | 27 | % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - |
| 28 | 28 | |
| 29 | -sa_attribs(A, NA, IST, OST) :- | |
| 29 | +sa_attribs(A, NA, IST) :- | |
| 30 | 30 | true. |
| 31 | 31 | |
| 32 | 32 | % ----------------------------------------------------------------------------- | ... | ... |
fzn-parser/stable.pl
| 1 | 1 | % == No, Emacs this is -*-Prolog-*- code, not what you thought... ============= |
| 2 | 2 | |
| 3 | 3 | % -- Symbol table ------------------------------------------------------------- |
| 4 | +% | |
| 5 | +% Open-ended model. | |
| 4 | 6 | |
| 7 | +st_lookup(ST, _, _) :- var(ST), !, fail. | |
| 5 | 8 | st_lookup([K=V|_], K, V). |
| 6 | -st_lookup([_|ST], K, V) :- st_lookup(ST, K, V). | |
| 9 | +st_lookup([_|ST], K, V) :- st_lookup(ST, K, V). | |
| 7 | 10 | |
| 8 | -st_insert([], K, V, [K=V]) :- !. | |
| 9 | -st_insert([K=_|_], K, _, _) :- !, throw(duplicate(K)). | |
| 10 | -st_insert([KV0|ST], K, V, [KV0|STx]) :- st_insert(ST, K, V, STx). | |
| 11 | +st_insert(ST, K, V) :- var(ST), !, ST=[K=V|_]. | |
| 12 | +st_insert([K=_|_], K, _) :- !, throw(duplicate(K)). | |
| 13 | +st_insert([_|ST], K, V) :- st_insert(ST, K, V). | ... | ... |