Compare View

switch
from
...
to
 
Commits (6)
fzn-parser/examples/a.ast 0 → 100644
... ... @@ -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 @@
  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 3 [X|_T] > [preds(X)|_T].
4 4 _T > [[]|_T].
5 5 _T > [int|_T].
  6 +_T > [id('X_INTRODUCED_0')|_T].
6 7 _T > [[]|_T].
7 8 _T > [int:lit(1)|_T].
8 9 _T > [int:lit(-1)|_T].
9 10 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
10 11 [Es|_T] > [array(_):alit(Es)|_T].
  12 +[VAL,AN,T|_T] > [var(array(T,1,2), VAL, AN)|_T].
11 13 [H,T|_T] > [[H|T]|_T].
12 14 _T > [int(1,3)|_T].
  15 +_T > [id('wa')|_T].
13 16 _T > [_:id('output_var')|_T].
14 17 _T > [[]|_T].
15 18 [H,T|_T] > [[H|T]|_T].
  19 +_T > [[]|_T].
  20 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
16 21 [H,T|_T] > [[H|T]|_T].
17 22 _T > [int(1,3)|_T].
  23 +_T > [id('nt')|_T].
18 24 _T > [_:id('output_var')|_T].
19 25 _T > [[]|_T].
20 26 [H,T|_T] > [[H|T]|_T].
  27 +_T > [[]|_T].
  28 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
21 29 [H,T|_T] > [[H|T]|_T].
22 30 _T > [int(1,3)|_T].
  31 +_T > [id('sa')|_T].
23 32 _T > [_:id('output_var')|_T].
24 33 _T > [[]|_T].
25 34 [H,T|_T] > [[H|T]|_T].
  35 +_T > [[]|_T].
  36 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
26 37 [H,T|_T] > [[H|T]|_T].
27 38 _T > [int(1,3)|_T].
  39 +_T > [id('q')|_T].
28 40 _T > [_:id('output_var')|_T].
29 41 _T > [[]|_T].
30 42 [H,T|_T] > [[H|T]|_T].
  43 +_T > [[]|_T].
  44 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
31 45 [H,T|_T] > [[H|T]|_T].
32 46 _T > [int(1,3)|_T].
  47 +_T > [id('nsw')|_T].
33 48 _T > [_:id('output_var')|_T].
34 49 _T > [[]|_T].
35 50 [H,T|_T] > [[H|T]|_T].
  51 +_T > [[]|_T].
  52 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
36 53 [H,T|_T] > [[H|T]|_T].
37 54 _T > [int(1,3)|_T].
  55 +_T > [id('v')|_T].
38 56 _T > [_:id('output_var')|_T].
39 57 _T > [[]|_T].
40 58 [H,T|_T] > [[H|T]|_T].
  59 +_T > [[]|_T].
  60 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
41 61 [H,T|_T] > [[H|T]|_T].
42 62 _T > [int(1,3)|_T].
  63 +_T > [id('t')|_T].
43 64 _T > [_:id('output_var')|_T].
44 65 _T > [[]|_T].
45 66 [H,T|_T] > [[H|T]|_T].
  67 +_T > [[]|_T].
  68 +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T].
46 69 [H,T|_T] > [[H|T]|_T].
47 70 [X|_T] > [vars(X)|_T].
48 71 _T > [[]|_T].
... ...
fzn-parser/examples/aust.ast.old
... ... @@ -7,7 +7,7 @@ _T > [[]|_T].
7 7 _T > [int:lit(1)|_T].
8 8 _T > [int:lit(-1)|_T].
9 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 11 [H,T|_T] > [[H|T]|_T].
12 12 _T > [int(1,3)|_T].
13 13 _T > [_:id('output_var')|_T].
... ... @@ -50,7 +50,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
50 50 _T > [_:id('wa')|_T].
51 51 _T > [_:id('nt')|_T].
52 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 54 _T > [int:lit(0)|_T].
55 55 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
56 56 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
... ... @@ -61,7 +61,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
61 61 _T > [_:id('wa')|_T].
62 62 _T > [_:id('sa')|_T].
63 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 65 _T > [int:lit(0)|_T].
66 66 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
67 67 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
... ... @@ -72,7 +72,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
72 72 _T > [_:id('nt')|_T].
73 73 _T > [_:id('sa')|_T].
74 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 76 _T > [int:lit(0)|_T].
77 77 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
78 78 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
... ... @@ -83,7 +83,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
83 83 _T > [_:id('nt')|_T].
84 84 _T > [_:id('q')|_T].
85 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 87 _T > [int:lit(0)|_T].
88 88 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
89 89 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
... ... @@ -94,7 +94,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
94 94 _T > [_:id('sa')|_T].
95 95 _T > [_:id('q')|_T].
96 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 98 _T > [int:lit(0)|_T].
99 99 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
100 100 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
... ... @@ -105,7 +105,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
105 105 _T > [_:id('sa')|_T].
106 106 _T > [_:id('nsw')|_T].
107 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 109 _T > [int:lit(0)|_T].
110 110 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
111 111 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
... ... @@ -116,7 +116,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
116 116 _T > [_:id('sa')|_T].
117 117 _T > [_:id('v')|_T].
118 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 120 _T > [int:lit(0)|_T].
121 121 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
122 122 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
... ... @@ -127,7 +127,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
127 127 _T > [_:id('q')|_T].
128 128 _T > [_:id('nsw')|_T].
129 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 131 _T > [int:lit(0)|_T].
132 132 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
133 133 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
... ... @@ -138,7 +138,7 @@ _T > [_:id('X_INTRODUCED_0')|_T].
138 138 _T > [_:id('nsw')|_T].
139 139 _T > [_:id('v')|_T].
140 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 142 _T > [int:lit(0)|_T].
143 143 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
144 144 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
... ...
fzn-parser/flatzinc.y
... ... @@ -51,18 +51,9 @@
51 51 // pop an item and a list, push new list (CONS)
52 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 54 // push the empty list
58 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 57 #define BINARY(op) AST ("B,A", ("op(A,B)"))
67 58 #define UNARY(op) AST ("X", ("op(X)"))
68 59  
... ... @@ -117,41 +108,44 @@ model_end : solve_item ';'
117 108 pred_decl_item:
118 109 PREDICATE IDENT '(' pred_decl_args ')'
119 110  
120   -var_decl_item:
  111 +var_decl_item: /* -> [ var(ID,TYPE,INIT,ANNOT) | _ ] */
121 112 VAR non_array_ti_expr_tail ':' ident_anns var_decl_item2
  113 + { AST ("VAL,AN,ID,T", ("var(ID, T, VAL, AN)")); }
122 114 | non_array_ti_expr_tail ':' ident_anns '=' expr
  115 + { AST ("VAL,AN,ID,T", ("var(ID, T, VAL, AN)")); }
123 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 124 non_array_ti_expr_tail ':' ident_anns '=' array_literal
131 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 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 142 solve_item:
149 143 SOLVE annotations solve_kind
150 144  
151 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 151 // Predicate parameters
... ... @@ -163,16 +157,19 @@ pred_decl_args:
163 157  
164 158 pred_decl_arg:
165 159 non_array_ti_expr_tail ':' IDENT
  160 + { AST ("T", ("T:'%s'", $3)); }
166 161 | VAR non_array_ti_expr_tail ':' IDENT
  162 + { AST ("T", ("var(T):'%s'", $4)); }
167 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 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 175 // Type-Inst Expression Tails
... ... @@ -257,7 +254,7 @@ array_access_expr: IDENT '[' INT_LITERAL ']'
257 254 //---------------------------------------------------------------------------
258 255  
259 256 annotations:
260   - COLONCOLON expr annotations { CONS (); }
  257 + COLONCOLON expr annotations { AST ("As, E", ("[E|As]")); }
261 258 | /* empty */ { NIL (); }
262 259  
263 260 %%
... ...
fzn-parser/fznslurp.pl
... ... @@ -4,6 +4,10 @@ load_ast(AST) :- load_ast(_>[], [], AST).
4 4  
5 5 load_ast(end_of_file, AST, AST).
6 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 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 @@
  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
... ...