Commit f461b0bbc3d28f490f79139af2702b5428b4781b

Authored by Salvador Abreu
1 parent 4029344a
Exists in master

first stab at AST traversal for name analysis

Showing 1 changed file with 17 additions and 7 deletions   Show diff stats
fzn-parser/semantic.pl
@@ -8,9 +8,11 @@ sa_names(fzn(preds(IP), vars(IV), constrs(IC), SOLVE), @@ -8,9 +8,11 @@ sa_names(fzn(preds(IP), vars(IV), constrs(IC), SOLVE),
8 8
9 % ----------------------------------------------------------------------------- 9 % -----------------------------------------------------------------------------
10 10
11 -sa_n_traverse([], [], ST). 11 +sa_n_traverse([], [], _ST).
12 sa_n_traverse([N|Ns], [NN|NNs], ST) :- 12 sa_n_traverse([N|Ns], [NN|NNs], ST) :-
13 - sa_n(N, NN, ST), 13 + sa_n(N, NN, ST), !,
  14 + sa_n_traverse(Ns, NNs, ST).
  15 +sa_n_traverse([_|Ns], NNs, ST) :- % ignore failing nodes (beware!)
14 sa_n_traverse(Ns, NNs, ST). 16 sa_n_traverse(Ns, NNs, ST).
15 17
16 18
@@ -18,15 +20,23 @@ sa_n_traverse([N|Ns], [NN|NNs], ST) :- @@ -18,15 +20,23 @@ sa_n_traverse([N|Ns], [NN|NNs], ST) :-
18 % 20 %
19 % sa_n(AST_N_IN, AST_N_OUT, ST) 21 % sa_n(AST_N_IN, AST_N_OUT, ST)
20 22
21 -sa_n(var(N,T,I,A), var(N,T), ST) :- 23 +sa_n(var(N,T,I,A), V, ST) :-
22 sa_attribs(A, AX, ST), 24 sa_attribs(A, AX, ST),
23 - st_insert(ST, N, var(N,T,I,AX)). 25 + sa_n(I, NI, ST), % parse initializer
  26 + V=var(N,T,NI,AX), % new AST node becomes ST entry value
  27 + st_insert(ST, N, V).
24 28
25 -sa_n(constraint(_C)).  
26 29
27 % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 30 % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
28 31
29 -sa_attribs(A, NA, IST) :-  
30 - true. 32 +sa_attribs([A|As], [NA|NAs], ST) :-
  33 + sa_attrib(A, NA, ST), !,
  34 + sa_attribs(As, NAs, ST).
  35 +sa_attribs([_|As], NAs, ST) :- % ignore unknown attributes
  36 + sa_attribs(As, NAs, ST).
  37 +sa_attribs([], [], _).
  38 +
  39 +
  40 +sa_attrib(id(output_var), output, _).
31 41
32 % ----------------------------------------------------------------------------- 42 % -----------------------------------------------------------------------------