Compare View

switch
from
...
to
 
Commits (6)
fzn-parser/examples/a.ast 0 → 100644
@@ -0,0 +1,46 @@ @@ -0,0 +1,46 @@
  1 +_ > [].
  2 +_T > [[]|_T].
  3 +[X|_T] > [preds(X)|_T].
  4 +_T > [[]|_T].
  5 +_T > [int|_T].
  6 +_T > ['X_INTRODUCED_0'|_T].
  7 +_T > [[]|_T].
  8 +_T > [int:lit(1)|_T].
  9 +_T > [int:lit(-1)|_T].
  10 +[T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
  11 +[Es|_T] > [array(_):alit(Es)|_T].
  12 +[VAL,AN,ID,T|_T] > [var(ID, array(T,1,2), VAL, AN)|_T].
  13 +[H,T|_T] > [[H|T]|_T].
  14 +_T > [int(1,3)|_T].
  15 +_T > ['wa'|_T].
  16 +_T > [_:id('output_var')|_T].
  17 +_T > [[]|_T].
  18 +[As, E|_T] > [[E|As]|_T].
  19 +_T > [[]|_T].
  20 +[VAL,AN,ID,T|_T] > [var(ID, T, VAL, AN)|_T].
  21 +[H,T|_T] > [[H|T]|_T].
  22 +_T > [int(1,3)|_T].
  23 +_T > ['nt'|_T].
  24 +_T > [_:id('output_var')|_T].
  25 +_T > [[]|_T].
  26 +[As, E|_T] > [[E|As]|_T].
  27 +_T > [[]|_T].
  28 +[VAL,AN,ID,T|_T] > [var(ID, T, VAL, AN)|_T].
  29 +[H,T|_T] > [[H|T]|_T].
  30 +[X|_T] > [vars(X)|_T].
  31 +_T > [[]|_T].
  32 +_T > [_:id('X_INTRODUCED_0')|_T].
  33 +_T > [_:id('wa')|_T].
  34 +_T > [_:id('nt')|_T].
  35 +[T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
  36 +[Es|_T] > [array(_):alit(Es)|_T].
  37 +_T > [int:lit(0)|_T].
  38 +[T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
  39 +[T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
  40 +_T > ['int_lin_ne'|_T].
  41 +_T > [[]|_T].
  42 +[A,C,E|_T] > [constraint(C,E,A)|_T].
  43 +[H,T|_T] > [[H|T]|_T].
  44 +[X|_T] > [constrs(X)|_T].
  45 +_T > [[]|_T].
  46 +_T > [satisfy|_T].
fzn-parser/examples/a.fzn 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +array [1..2] of int: X_INTRODUCED_0 = [1,-1];
  2 +var 1..3: wa:: output_var;
  3 +var 1..3: nt:: output_var;
  4 +constraint int_lin_ne(X_INTRODUCED_0,[wa,nt],0);
  5 +solve satisfy;
fzn-parser/examples/aust.ast
@@ -3,46 +3,69 @@ _T > [[]|_T]. @@ -3,46 +3,69 @@ _T > [[]|_T].
3 [X|_T] > [preds(X)|_T]. 3 [X|_T] > [preds(X)|_T].
4 _T > [[]|_T]. 4 _T > [[]|_T].
5 _T > [int|_T]. 5 _T > [int|_T].
  6 +_T > [id('X_INTRODUCED_0')|_T].
6 _T > [[]|_T]. 7 _T > [[]|_T].
7 _T > [int:lit(1)|_T]. 8 _T > [int:lit(1)|_T].
8 _T > [int:lit(-1)|_T]. 9 _T > [int:lit(-1)|_T].
9 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 10 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
10 [Es|_T] > [array(_):alit(Es)|_T]. 11 [Es|_T] > [array(_):alit(Es)|_T].
  12 +[VAL,AN,T|_T] > [var(array(T,1,2), VAL, AN)|_T].
11 [H,T|_T] > [[H|T]|_T]. 13 [H,T|_T] > [[H|T]|_T].
12 _T > [int(1,3)|_T]. 14 _T > [int(1,3)|_T].
  15 +_T > [id('wa')|_T].
13 _T > [_:id('output_var')|_T]. 16 _T > [_:id('output_var')|_T].
14 _T > [[]|_T]. 17 _T > [[]|_T].
15 [H,T|_T] > [[H|T]|_T]. 18 [H,T|_T] > [[H|T]|_T].
  19 +_T > [[]|_T].
  20 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
16 [H,T|_T] > [[H|T]|_T]. 21 [H,T|_T] > [[H|T]|_T].
17 _T > [int(1,3)|_T]. 22 _T > [int(1,3)|_T].
  23 +_T > [id('nt')|_T].
18 _T > [_:id('output_var')|_T]. 24 _T > [_:id('output_var')|_T].
19 _T > [[]|_T]. 25 _T > [[]|_T].
20 [H,T|_T] > [[H|T]|_T]. 26 [H,T|_T] > [[H|T]|_T].
  27 +_T > [[]|_T].
  28 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
21 [H,T|_T] > [[H|T]|_T]. 29 [H,T|_T] > [[H|T]|_T].
22 _T > [int(1,3)|_T]. 30 _T > [int(1,3)|_T].
  31 +_T > [id('sa')|_T].
23 _T > [_:id('output_var')|_T]. 32 _T > [_:id('output_var')|_T].
24 _T > [[]|_T]. 33 _T > [[]|_T].
25 [H,T|_T] > [[H|T]|_T]. 34 [H,T|_T] > [[H|T]|_T].
  35 +_T > [[]|_T].
  36 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
26 [H,T|_T] > [[H|T]|_T]. 37 [H,T|_T] > [[H|T]|_T].
27 _T > [int(1,3)|_T]. 38 _T > [int(1,3)|_T].
  39 +_T > [id('q')|_T].
28 _T > [_:id('output_var')|_T]. 40 _T > [_:id('output_var')|_T].
29 _T > [[]|_T]. 41 _T > [[]|_T].
30 [H,T|_T] > [[H|T]|_T]. 42 [H,T|_T] > [[H|T]|_T].
  43 +_T > [[]|_T].
  44 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
31 [H,T|_T] > [[H|T]|_T]. 45 [H,T|_T] > [[H|T]|_T].
32 _T > [int(1,3)|_T]. 46 _T > [int(1,3)|_T].
  47 +_T > [id('nsw')|_T].
33 _T > [_:id('output_var')|_T]. 48 _T > [_:id('output_var')|_T].
34 _T > [[]|_T]. 49 _T > [[]|_T].
35 [H,T|_T] > [[H|T]|_T]. 50 [H,T|_T] > [[H|T]|_T].
  51 +_T > [[]|_T].
  52 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
36 [H,T|_T] > [[H|T]|_T]. 53 [H,T|_T] > [[H|T]|_T].
37 _T > [int(1,3)|_T]. 54 _T > [int(1,3)|_T].
  55 +_T > [id('v')|_T].
38 _T > [_:id('output_var')|_T]. 56 _T > [_:id('output_var')|_T].
39 _T > [[]|_T]. 57 _T > [[]|_T].
40 [H,T|_T] > [[H|T]|_T]. 58 [H,T|_T] > [[H|T]|_T].
  59 +_T > [[]|_T].
  60 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
41 [H,T|_T] > [[H|T]|_T]. 61 [H,T|_T] > [[H|T]|_T].
42 _T > [int(1,3)|_T]. 62 _T > [int(1,3)|_T].
  63 +_T > [id('t')|_T].
43 _T > [_:id('output_var')|_T]. 64 _T > [_:id('output_var')|_T].
44 _T > [[]|_T]. 65 _T > [[]|_T].
45 [H,T|_T] > [[H|T]|_T]. 66 [H,T|_T] > [[H|T]|_T].
  67 +_T > [[]|_T].
  68 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
46 [H,T|_T] > [[H|T]|_T]. 69 [H,T|_T] > [[H|T]|_T].
47 [X|_T] > [vars(X)|_T]. 70 [X|_T] > [vars(X)|_T].
48 _T > [[]|_T]. 71 _T > [[]|_T].
fzn-parser/examples/aust.ast.old
@@ -7,7 +7,7 @@ _T > [[]|_T]. @@ -7,7 +7,7 @@ _T > [[]|_T].
7 _T > [int:lit(1)|_T]. 7 _T > [int:lit(1)|_T].
8 _T > [int:lit(-1)|_T]. 8 _T > [int:lit(-1)|_T].
9 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 9 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
10 -[Es|_T] > [array(_,[_]):alit(Es)|_T]. 10 +[Es|_T] > [array(_):alit(Es)|_T].
11 [H,T|_T] > [[H|T]|_T]. 11 [H,T|_T] > [[H|T]|_T].
12 _T > [int(1,3)|_T]. 12 _T > [int(1,3)|_T].
13 _T > [_:id('output_var')|_T]. 13 _T > [_:id('output_var')|_T].
@@ -50,7 +50,7 @@ _T > [_:id('X_INTRODUCED_0')|_T]. @@ -50,7 +50,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
50 _T > [_:id('wa')|_T]. 50 _T > [_:id('wa')|_T].
51 _T > [_:id('nt')|_T]. 51 _T > [_:id('nt')|_T].
52 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 52 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
53 -[Es|_T] > [array(_,[_]):alit(Es)|_T]. 53 +[Es|_T] > [array(_):alit(Es)|_T].
54 _T > [int:lit(0)|_T]. 54 _T > [int:lit(0)|_T].
55 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 55 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
56 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 56 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
@@ -61,7 +61,7 @@ _T > [_:id('X_INTRODUCED_0')|_T]. @@ -61,7 +61,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
61 _T > [_:id('wa')|_T]. 61 _T > [_:id('wa')|_T].
62 _T > [_:id('sa')|_T]. 62 _T > [_:id('sa')|_T].
63 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 63 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
64 -[Es|_T] > [array(_,[_]):alit(Es)|_T]. 64 +[Es|_T] > [array(_):alit(Es)|_T].
65 _T > [int:lit(0)|_T]. 65 _T > [int:lit(0)|_T].
66 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 66 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
67 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 67 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
@@ -72,7 +72,7 @@ _T > [_:id('X_INTRODUCED_0')|_T]. @@ -72,7 +72,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
72 _T > [_:id('nt')|_T]. 72 _T > [_:id('nt')|_T].
73 _T > [_:id('sa')|_T]. 73 _T > [_:id('sa')|_T].
74 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 74 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
75 -[Es|_T] > [array(_,[_]):alit(Es)|_T]. 75 +[Es|_T] > [array(_):alit(Es)|_T].
76 _T > [int:lit(0)|_T]. 76 _T > [int:lit(0)|_T].
77 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 77 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
78 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 78 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
@@ -83,7 +83,7 @@ _T > [_:id('X_INTRODUCED_0')|_T]. @@ -83,7 +83,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
83 _T > [_:id('nt')|_T]. 83 _T > [_:id('nt')|_T].
84 _T > [_:id('q')|_T]. 84 _T > [_:id('q')|_T].
85 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 85 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
86 -[Es|_T] > [array(_,[_]):alit(Es)|_T]. 86 +[Es|_T] > [array(_):alit(Es)|_T].
87 _T > [int:lit(0)|_T]. 87 _T > [int:lit(0)|_T].
88 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 88 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
89 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 89 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
@@ -94,7 +94,7 @@ _T > [_:id('X_INTRODUCED_0')|_T]. @@ -94,7 +94,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
94 _T > [_:id('sa')|_T]. 94 _T > [_:id('sa')|_T].
95 _T > [_:id('q')|_T]. 95 _T > [_:id('q')|_T].
96 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 96 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
97 -[Es|_T] > [array(_,[_]):alit(Es)|_T]. 97 +[Es|_T] > [array(_):alit(Es)|_T].
98 _T > [int:lit(0)|_T]. 98 _T > [int:lit(0)|_T].
99 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 99 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
100 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 100 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
@@ -105,7 +105,7 @@ _T > [_:id('X_INTRODUCED_0')|_T]. @@ -105,7 +105,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
105 _T > [_:id('sa')|_T]. 105 _T > [_:id('sa')|_T].
106 _T > [_:id('nsw')|_T]. 106 _T > [_:id('nsw')|_T].
107 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 107 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
108 -[Es|_T] > [array(_,[_]):alit(Es)|_T]. 108 +[Es|_T] > [array(_):alit(Es)|_T].
109 _T > [int:lit(0)|_T]. 109 _T > [int:lit(0)|_T].
110 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 110 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
111 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 111 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
@@ -116,7 +116,7 @@ _T > [_:id('X_INTRODUCED_0')|_T]. @@ -116,7 +116,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
116 _T > [_:id('sa')|_T]. 116 _T > [_:id('sa')|_T].
117 _T > [_:id('v')|_T]. 117 _T > [_:id('v')|_T].
118 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 118 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
119 -[Es|_T] > [array(_,[_]):alit(Es)|_T]. 119 +[Es|_T] > [array(_):alit(Es)|_T].
120 _T > [int:lit(0)|_T]. 120 _T > [int:lit(0)|_T].
121 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 121 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
122 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 122 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
@@ -127,7 +127,7 @@ _T > [_:id('X_INTRODUCED_0')|_T]. @@ -127,7 +127,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
127 _T > [_:id('q')|_T]. 127 _T > [_:id('q')|_T].
128 _T > [_:id('nsw')|_T]. 128 _T > [_:id('nsw')|_T].
129 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 129 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
130 -[Es|_T] > [array(_,[_]):alit(Es)|_T]. 130 +[Es|_T] > [array(_):alit(Es)|_T].
131 _T > [int:lit(0)|_T]. 131 _T > [int:lit(0)|_T].
132 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 132 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
133 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 133 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
@@ -138,7 +138,7 @@ _T > [_:id('X_INTRODUCED_0')|_T]. @@ -138,7 +138,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
138 _T > [_:id('nsw')|_T]. 138 _T > [_:id('nsw')|_T].
139 _T > [_:id('v')|_T]. 139 _T > [_:id('v')|_T].
140 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 140 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
141 -[Es|_T] > [array(_,[_]):alit(Es)|_T]. 141 +[Es|_T] > [array(_):alit(Es)|_T].
142 _T > [int:lit(0)|_T]. 142 _T > [int:lit(0)|_T].
143 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 143 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
144 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 144 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
fzn-parser/flatzinc.y
@@ -51,18 +51,9 @@ @@ -51,18 +51,9 @@
51 // pop an item and a list, push new list (CONS) 51 // pop an item and a list, push new list (CONS)
52 #define CONS() AST ("H,T", ("[H|T]")) 52 #define CONS() AST ("H,T", ("[H|T]"))
53 53
54 - // pop one thing, push it as a 1-element list  
55 -#define TAIL() AST ("T", ("[T]"))  
56 -  
57 // push the empty list 54 // push the empty list
58 #define NIL() PUSH (("[]")) 55 #define NIL() PUSH (("[]"))
59 56
60 - // pop one thing, push an open-ended list headed with that thing  
61 -#define TAIL_OPEN() AST ("T", ("[T|_]"))  
62 -  
63 - // push an unbound variable  
64 -#define NIL_OPEN() PUSH (("_"))  
65 -  
66 #define BINARY(op) AST ("B,A", ("op(A,B)")) 57 #define BINARY(op) AST ("B,A", ("op(A,B)"))
67 #define UNARY(op) AST ("X", ("op(X)")) 58 #define UNARY(op) AST ("X", ("op(X)"))
68 59
@@ -117,41 +108,44 @@ model_end : solve_item ';' @@ -117,41 +108,44 @@ model_end : solve_item ';'
117 pred_decl_item: 108 pred_decl_item:
118 PREDICATE IDENT '(' pred_decl_args ')' 109 PREDICATE IDENT '(' pred_decl_args ')'
119 110
120 -var_decl_item: 111 +var_decl_item: /* -> [ var(ID,TYPE,INIT,ANNOT) | _ ] */
121 VAR non_array_ti_expr_tail ':' ident_anns var_decl_item2 112 VAR non_array_ti_expr_tail ':' ident_anns var_decl_item2
  113 + { AST ("VAL,AN,ID,T", ("var(ID, T, VAL, AN)")); }
122 | non_array_ti_expr_tail ':' ident_anns '=' expr 114 | non_array_ti_expr_tail ':' ident_anns '=' expr
  115 + { AST ("VAL,AN,ID,T", ("var(ID, T, VAL, AN)")); }
123 | ARRAY '[' INT_LITERAL DOTDOT INT_LITERAL ']' OF array_decl_tail 116 | ARRAY '[' INT_LITERAL DOTDOT INT_LITERAL ']' OF array_decl_tail
  117 + { AST ("VAL,AN,ID,T", ("var(ID, array(T,%d,%d), VAL, AN)", $3, $5)); }
124 118
125 -var_decl_item2:  
126 - '=' expr  
127 - | /*empty*/ 119 +var_decl_item2: /* -> [ VAL | _ ] */
  120 + '=' expr { }
  121 + | /*empty*/ { NIL (); }
128 122
129 -array_decl_tail: 123 +array_decl_tail: /* -> [ TYPE,VAL,ANNOT,ID | _ ] */
130 non_array_ti_expr_tail ':' ident_anns '=' array_literal 124 non_array_ti_expr_tail ':' ident_anns '=' array_literal
131 | VAR non_array_ti_expr_tail ':' ident_anns array_decl_tail2 125 | VAR non_array_ti_expr_tail ':' ident_anns array_decl_tail2
132 126
133 -array_decl_tail2:  
134 - '=' array_literal  
135 - | /*empty*/ 127 +array_decl_tail2: /* -> [ VAL | _ ] */
  128 + '=' array_literal { }
  129 + | /*empty*/ { NIL (); }
136 130
137 -ident_anns:  
138 - IDENT annotations  
139 - | UNDERSCORE_IDENT annotations 131 +ident_anns: /* -> [ ANNOT,ID | _ ] */
  132 + IDENT { PUSH (("'%s'", $1)); } annotations
  133 + | UNDERSCORE_IDENT { PUSH (("'%s'", $1)); } annotations
140 134
141 -constraint_item: 135 +constraint_item: /* -> [ constraint(...) | ] */
142 CONSTRAINT constraint_elem annotations 136 CONSTRAINT constraint_elem annotations
143 - { AST ("A, C", ("constraint(C, A)")); } 137 + { AST ("A,C,E", ("constraint(C,E,A)")); }
144 138
145 -constraint_elem:  
146 - IDENT '(' exprs ')' 139 +constraint_elem: /* -> [ CONSTR_ID, EXPRLIST | _ ] */
  140 + IDENT '(' exprs ')' { PUSH (("'%s'", $1)); }
147 141
148 solve_item: 142 solve_item:
149 SOLVE annotations solve_kind 143 SOLVE annotations solve_kind
150 144
151 solve_kind: 145 solve_kind:
152 - SATISFY  
153 - | MINIMIZE expr  
154 - | MAXIMIZE expr 146 + SATISFY { PUSH (("satisfy")); }
  147 + | MINIMIZE expr { AST ("E", ("minimize(E)")); }
  148 + | MAXIMIZE expr { AST ("E", ("maximize(E)")); }
155 149
156 //--------------------------------------------------------------------------- 150 //---------------------------------------------------------------------------
157 // Predicate parameters 151 // Predicate parameters
@@ -163,16 +157,19 @@ pred_decl_args: @@ -163,16 +157,19 @@ pred_decl_args:
163 157
164 pred_decl_arg: 158 pred_decl_arg:
165 non_array_ti_expr_tail ':' IDENT 159 non_array_ti_expr_tail ':' IDENT
  160 + { AST ("T", ("T:'%s'", $3)); }
166 | VAR non_array_ti_expr_tail ':' IDENT 161 | VAR non_array_ti_expr_tail ':' IDENT
  162 + { AST ("T", ("var(T):'%s'", $4)); }
167 | ARRAY '[' pred_arg_array_index ']' OF pred_arg_array_tail ':' IDENT 163 | ARRAY '[' pred_arg_array_index ']' OF pred_arg_array_tail ':' IDENT
  164 + { AST ("T,U,L", ("var(array(T,L,U)):'%s'", $8)); }
168 165
169 pred_arg_array_index: 166 pred_arg_array_index:
170 - INT  
171 - | INT_LITERAL DOTDOT INT_LITERAL 167 + INT { PUSH (("_,1")); }
  168 + | INT_LITERAL DOTDOT INT_LITERAL { PUSH (("%d,%d", $3, $1)); }
172 169
173 -pred_arg_array_tail:  
174 - non_array_ti_expr_tail  
175 - | VAR non_array_ti_expr_tail 170 +pred_arg_array_tail: /* -> [ TYPE | _ ] */
  171 + non_array_ti_expr_tail { }
  172 + | VAR non_array_ti_expr_tail { AST ("T", ("var(T)")); }
176 173
177 //--------------------------------------------------------------------------- 174 //---------------------------------------------------------------------------
178 // Type-Inst Expression Tails 175 // Type-Inst Expression Tails
@@ -257,7 +254,7 @@ array_access_expr: IDENT '[' INT_LITERAL ']' @@ -257,7 +254,7 @@ array_access_expr: IDENT '[' INT_LITERAL ']'
257 //--------------------------------------------------------------------------- 254 //---------------------------------------------------------------------------
258 255
259 annotations: 256 annotations:
260 - COLONCOLON expr annotations { CONS (); } 257 + COLONCOLON expr annotations { AST ("As, E", ("[E|As]")); }
261 | /* empty */ { NIL (); } 258 | /* empty */ { NIL (); }
262 259
263 %% 260 %%
fzn-parser/fznslurp.pl
@@ -4,6 +4,10 @@ load_ast(AST) :- load_ast(_>[], [], AST). @@ -4,6 +4,10 @@ load_ast(AST) :- load_ast(_>[], [], AST).
4 4
5 load_ast(end_of_file, AST, AST). 5 load_ast(end_of_file, AST, AST).
6 load_ast(IN > INT, IN, OUT) :- read(OP), !, 6 load_ast(IN > INT, IN, OUT) :- read(OP), !,
7 - write(OP), nl, 7 + ( g_read(ast_debug, true) ->
  8 + write(OP), nl
  9 + ; true ),
8 load_ast(OP, INT, OUT). 10 load_ast(OP, INT, OUT).
9 11
  12 +slurp(FILE, AST) :- see(FILE), load_ast(AST), !, seen.
  13 +slurp(_, end_of_file) :- seen.
fzn-parser/typescript 0 → 100644
@@ -0,0 +1,49 @@ @@ -0,0 +1,49 @@
  1 +Script started on Tue 23 Jun 2015 10:50:19 AM JST
  2 +spa@khawasaki:~/work/src/paccs/fzn-parser$ ./  , ./fznslurp examples/a.fzn > examples/ /a.ast
  3 +| ?-
  4 +spa@khawasaki:~/work/src/paccs/fzn-parser$ ./fznslurp examples/a.fzn > examples/ /a.ast wasaki:~/work/src/paccs/fzn-parser$ ./fznslurp examples/a.fzn > examples/a.ast
  5 + spa@khawasaki:~/work/src/paccs/fzn-parser$ ./
  6 +examples/ fznslurp fzp
  7 +spa@khawasaki:~/work/src/paccs/fzn-parser$ ./ examples/a.fzn > examples/a.ast f examples/a.fzn > examples/a.ast pa@khawasaki:~/work/src/paccs/fzn-parser$ ./fz examples/a.fzn > examples/a.ast pa@khawasaki:~/work/src/paccs/fzn-parser$ ./fzp examples/a.fzn > examples/a.ast a@khawasaki:~/work/src/paccs/fzn-parser$ ./fzp
  8 +
  9 +spa@khawasaki:~/work/src/paccs/fzn-parser$ ./fznslurp
  10 +GNU Prolog 1.3.0
  11 +By Daniel Diaz
  12 +Copyright (C) 1999-2007 Daniel Diaz
  13 +| ?- slurp(e 'examples/a.f ast'< , X)('examples/a.ast', X).
  14 +
  15 +X = [satisfy,[],constrs([constraint(int_lin_ne,(_,array(_),int):(id('X_INTRODUCED_0'),alit((_,_):(id(wa),id(nt))),lit(0)),[])]),vars([var(nt,int(1,3),[],[_:id(output_var)]),var(wa,int(1,3),[],[_:id(output_var)]),var('X_INTRODUCED_0',array(int,1,2),array(_):alit((int,int):(lit(1),lit(-1))),[])]),preds([])]
  16 +
  17 +yes
  18 +| ?- slurp('examples/a.ast', X)._X).X). , member(Y X, _X)(X, _X).
  19 +
  20 +X = satisfy ? ;
  21 +
  22 +X = [] ? ;
  23 +
  24 +X = constrs([constraint(int_lin_ne,(_,array(_),int):(id('X_INTRODUCED_0'),alit((_,_):(id(wa),id(nt))),lit(0)),[])]) ? ;
  25 +
  26 +X = vars([var(nt,int(1,3),[],[_:id(output_var)]),var(wa,int(1,3),[],[_:id(output_var)]),var('X_INTRODUCED_0',array(int,1,2),array(_):alit((int,int):(lit(1),lit(-1))),[])]) ? ;
  27 +
  28 +X = preds([]) ? ;
  29 +
  30 +no
  31 +| ?- slurp('examples/a.ast', _X), member(X, _X).X, _X). _, _X)., _X). v, _X).a, _X).r, _X).s, _X).(, _X)._, _X).Y, _X).), _X).(_Y), _X). , member(_ Y, _Y)(Y, _Y).
  32 +
  33 +Y = var(nt,int(1,3),[],[_:id(output_var)]) ? ;
  34 +
  35 +Y = var(wa,int(1,3),[],[_:id(output_var)]) ? ;
  36 +
  37 +Y = var('X_INTRODUCED_0',array(int,1,2),array(_):alit((int,int):(lit(1),lit(-1))),[]) ? ;
  38 +
  39 +no
  40 +| ?- slurp('examples/a.ast', _X), member(vars(_Y), _X), member(Y, _Y).(_Y), _X), member(Y, _Y). (_Y), _X), member(Y, _Y). (_Y), _X), member(Y, _Y). (_Y), _X), member(Y, _Y). c(_Y), _X), member(Y, _Y).o(_Y), _X), member(Y, _Y).n(_Y), _X), member(Y, _Y).s(_Y), _X), member(Y, _Y).t(_Y), _X), member(Y, _Y).r(_Y), _X), member(Y, _Y).e(_Y), _X), member(Y, _Y).(_Y), _X), member(Y, _Y). s(_Y), _X), member(Y, _Y).(_Y), _X), member(Y, _Y).
  41 +
  42 +Y = constraint(int_lin_ne,(_,array(_),int):(id('X_INTRODUCED_0'),alit((_,_):(id(wa),id(nt))),lit(0)),[]) ? ;
  43 +
  44 +no
  45 +| ?-
  46 +
  47 +spa@khawasaki:~/work/src/paccs/fzn-parser$ exit
  48 +
  49 +Script done on Tue 23 Jun 2015 10:52:37 AM JST