Commit f1a115f5a78a4b5fe8000baeb0880c386338141d

Authored by Salvador Abreu
1 parent cf618079
Exists in master

a litte progress on name analysis

Showing 1 changed file with 17 additions and 2 deletions   Show diff stats
fzn-parser/semantic.pl
@@ -8,17 +8,23 @@ sa_names(fzn(preds(IP), vars(IV), constrs(IC), SOLVE), @@ -8,17 +8,23 @@ 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). 14 sa_n_traverse(Ns, NNs, ST).
15 -sa_n_traverse([_|Ns], NNs, ST) :- % ignore failing nodes (beware!) 15 +sa_n_traverse([_|Ns], NNs, ST) :- !, % ignore failing nodes (beware!)
16 sa_n_traverse(Ns, NNs, ST). 16 sa_n_traverse(Ns, NNs, ST).
17 17
  18 +sa_n_traverse(N, NN, ST) :- sa_n(N, NN, ST). % non-list case
18 19
19 % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 20 % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
20 % 21 %
21 % sa_n(AST_N_IN, AST_N_OUT, ST) 22 % sa_n(AST_N_IN, AST_N_OUT, ST)
  23 +%
  24 +% handle all AST cases:
  25 +% var(N,T,I,A) - variable declaration
  26 +% lit(V,T) - literal with type
  27 +%
22 28
23 sa_n(var(N,T,I,A), V, ST) :- 29 sa_n(var(N,T,I,A), V, ST) :-
24 sa_attribs(A, AX, ST), 30 sa_attribs(A, AX, ST),
@@ -26,6 +32,15 @@ sa_n(var(N,T,I,A), V, ST) :- @@ -26,6 +32,15 @@ sa_n(var(N,T,I,A), V, ST) :-
26 V=var(N,T,NI,AX), % new AST node becomes ST entry value 32 V=var(N,T,NI,AX), % new AST node becomes ST entry value
27 st_insert(ST, N, V). 33 st_insert(ST, N, V).
28 34
  35 +sa_n(lit(E,array(T)), lit(NE, array(T)), ST) :-
  36 + sa_n_traverse(E, NE, ST).
  37 +sa_n(lit(E,int), lit(E,int), _ST).
  38 +sa_n(lit(E,float), lit(E,float), _ST).
  39 +sa_n(lit(E,string), lit(E,string), _ST).
  40 +
  41 +sa_n(id(N), V, ST) :- st_lookup(ST, N, V), !.
  42 +sa_n(id(N), V, ST) :- V=id(N,_), % type as yet unknown
  43 + st_insert(ST, N, V).
29 44
30 % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 45 % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
31 46