Commit 5a2822a62f484985a7f0e873502dd3c05655c638

Authored by Salvador Abreu
1 parent 65f52800
Exists in master

variable declaration and constant initializers functioning

Showing 1 changed file with 33 additions and 7 deletions   Show diff stats
fz/out-paccs.pl
@@ -4,9 +4,9 @@ @@ -4,9 +4,9 @@
4 4
5 cg_emit(fzn(preds(PS), vars(VS), constrs(CS), G), ST) :- 5 cg_emit(fzn(preds(PS), vars(VS), constrs(CS), G), ST) :-
6 cg_prefix(TEXT, PTXT), 6 cg_prefix(TEXT, PTXT),
7 - cg_preds(PS, ST, PTXT, VTXT),  
8 - cg_vars(decl, VS, ST, VTXT, CTXT),  
9 - cg_vars(init, VS, ST, VTXT, CTXT), 7 + cg_preds(PS, ST, PTXT, VTXT1),
  8 + cg_vars(decl, VS, ST, VTXT1, VTXT2),
  9 + cg_vars(init, VS, ST, VTXT2, CTXT),
10 %% cg_constrs(CTXT, GTXT, CS, ST), 10 %% cg_constrs(CTXT, GTXT, CS, ST),
11 %% cg_goal(GTXT, STXT, G, VS, ST), 11 %% cg_goal(GTXT, STXT, G, VS, ST),
12 %% cg_suffix(STXT, []), 12 %% cg_suffix(STXT, []),
@@ -28,21 +28,47 @@ cg_var(OP, var(N,int,I,A), ST) --> @@ -28,21 +28,47 @@ cg_var(OP, var(N,int,I,A), ST) -->
28 cg_var(OP, var(N,int(1,999),I,A), ST). % FIXME 28 cg_var(OP, var(N,int(1,999),I,A), ST). % FIXME
29 29
30 cg_var(decl, var(N,int(LB,UB),_I,_A), _ST) --> 30 cg_var(decl, var(N,int(LB,UB),_I,_A), _ST) -->
31 - { format_to_codes(S, "fd_int ~w = fd_new(~d, ~d);\n", [N, LB, UB]) }, 31 + { format_to_codes(S, " fd_int ~w = fd_new(~d, ~d);\n", [N, LB, UB]) },
32 S. 32 S.
33 33
34 cg_var(init, var(_,int(_,_),_,_), _) --> []. 34 cg_var(init, var(_,int(_,_),_,_), _) --> [].
35 35
36 -cg_var(decl, var(N,array(T,LB,UB),[],_), _ST) --> 36 +% -- array of variables - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  37 +
  38 +cg_var(decl, var(N,array(_T,LB,UB),[],_), _ST) --> !,
37 { SZ is UB-LB+1, 39 { SZ is UB-LB+1,
38 - format_to_codes(S, "fd_int ~w[~d];\n", [N, SZ]) }, 40 + format_to_codes(S, " fd_int ~w[~d];\n", [N, SZ]) },
39 S. 41 S.
40 42
41 -cg_var(init, var(N,array(T,ALB,AUB),[],_), _ST) --> 43 +cg_var(init, var(N,array(T,ALB,AUB),[],_), _ST) --> !,
42 { SZ is AUB-ALB+1, bound(lb, T, LB), bound(ub, T, UB) }, 44 { SZ is AUB-ALB+1, bound(lb, T, LB), bound(ub, T, UB) },
43 { format_to_codes(S1, " for (i=0; i<~d; ++i)\n", [SZ]) }, S1, 45 { format_to_codes(S1, " for (i=0; i<~d; ++i)\n", [SZ]) }, S1,
44 { format_to_codes(S2, " ~w[i] = fd_new(~d, ~d);\n", [N, LB, UB]) }, S2. 46 { format_to_codes(S2, " ~w[i] = fd_new(~d, ~d);\n", [N, LB, UB]) }, S2.
45 47
  48 +% -- array of constants - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  49 +
  50 +cg_var(decl, var(N,array(_T,LB,UB),lit(INIT,array(_)),_), _ST) -->
  51 + { nonvar(INIT), INIT=[_|_] }, !,
  52 + { SZ is UB-LB+1,
  53 + format_to_codes(S, " int ~w[~d] = {\n", [N, SZ]) },
  54 + S,
  55 + cg_constant_list(INIT, " "),
  56 + " };\n".
  57 +
  58 +cg_var(init, var(_N,array(_T,_LB,_UB),lit(INIT,array(_)),_), _ST) -->
  59 + { nonvar(INIT), INIT=[_|_] }, !,
  60 + [].
  61 +
  62 +
  63 +% - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
  64 +
  65 +cg_constant_list([], _) --> [].
  66 +cg_constant_list([C|Cs], PFX) -->
  67 + PFX, cg_constant(C),
  68 + cg_constant_list(Cs, ", ").
  69 +
  70 +cg_constant(lit(N,int)) --> { format_to_codes(S, "~w", [N]) }, S.
  71 +
46 % -- constraints -------------------------------------------------------------- 72 % -- constraints --------------------------------------------------------------
47 73
48 cg_constrs([C|Cs], ST) --> cg_constr(C, ST), cg_constrs(Cs, ST). 74 cg_constrs([C|Cs], ST) --> cg_constr(C, ST), cg_constrs(Cs, ST).