Commit 6e2f2ea4f448327870aedccee4100a1ff699dce1

Authored by Salvador Abreu
1 parent f7de4bd3
Exists in master

continue AST completion

Showing 2 changed files with 21 additions and 17 deletions   Show diff stats
fzn-parser/examples/a.ast
... ... @@ -9,13 +9,13 @@ _T > [int:lit(1)|_T].
9 9 _T > [int:lit(-1)|_T].
10 10 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
11 11 [Es|_T] > [array(_):alit(Es)|_T].
12   -[VAL,AN,T|_T] > [var(array(T,1,2), VAL, AN)|_T].
  12 +[VAL,AN,ID,T|_T] > [var(ID, array(T,1,2), VAL, AN)|_T].
13 13 [H,T|_T] > [[H|T]|_T].
14 14 _T > [int(1,3)|_T].
15 15 _T > ['wa'|_T].
16 16 _T > [_:id('output_var')|_T].
17 17 _T > [[]|_T].
18   -[H,T|_T] > [[H|T]|_T].
  18 +[As, E|_T] > [[E|As]|_T].
19 19 _T > [[]|_T].
20 20 [VAL,AN,ID,T|_T] > [var(ID, T, VAL, AN)|_T].
21 21 [H,T|_T] > [[H|T]|_T].
... ... @@ -23,7 +23,7 @@ _T > [int(1,3)|_T].
23 23 _T > ['nt'|_T].
24 24 _T > [_:id('output_var')|_T].
25 25 _T > [[]|_T].
26   -[H,T|_T] > [[H|T]|_T].
  26 +[As, E|_T] > [[E|As]|_T].
27 27 _T > [[]|_T].
28 28 [VAL,AN,ID,T|_T] > [var(ID, T, VAL, AN)|_T].
29 29 [H,T|_T] > [[H|T]|_T].
... ... @@ -43,3 +43,4 @@ _T > [[]|_T].
43 43 [H,T|_T] > [[H|T]|_T].
44 44 [X|_T] > [constrs(X)|_T].
45 45 _T > [[]|_T].
  46 +_T > [satisfy|_T].
... ...
fzn-parser/flatzinc.y
... ... @@ -114,21 +114,21 @@ var_decl_item: /* -> [ var(ID,TYPE,INIT,ANNOT) | _ ] */
114 114 | non_array_ti_expr_tail ':' ident_anns '=' expr
115 115 { AST ("VAL,AN,ID,T", ("var(ID, T, VAL, AN)")); }
116 116 | ARRAY '[' INT_LITERAL DOTDOT INT_LITERAL ']' OF array_decl_tail
117   - { AST ("VAL,AN,T", ("var(array(T,%d,%d), VAL, AN)", $3, $5)); }
  117 + { AST ("VAL,AN,ID,T", ("var(ID, array(T,%d,%d), VAL, AN)", $3, $5)); }
118 118  
119   -var_decl_item2:
  119 +var_decl_item2: /* -> [ VAL | _ ] */
120 120 '=' expr { }
121 121 | /*empty*/ { NIL (); }
122 122  
123   -array_decl_tail:
  123 +array_decl_tail: /* -> [ TYPE,VAL,ANNOT,ID | _ ] */
124 124 non_array_ti_expr_tail ':' ident_anns '=' array_literal
125 125 | VAR non_array_ti_expr_tail ':' ident_anns array_decl_tail2
126 126  
127   -array_decl_tail2: /* -> [ DECLS | _ ] */
  127 +array_decl_tail2: /* -> [ VAL | _ ] */
128 128 '=' array_literal { }
129 129 | /*empty*/ { NIL (); }
130 130  
131   -ident_anns: /* -> [ ANNOTATIONS, ID | _ ] */
  131 +ident_anns: /* -> [ ANNOT,ID | _ ] */
132 132 IDENT { PUSH (("'%s'", $1)); } annotations
133 133 | UNDERSCORE_IDENT { PUSH (("'%s'", $1)); } annotations
134 134  
... ... @@ -143,9 +143,9 @@ solve_item:
143 143 SOLVE annotations solve_kind
144 144  
145 145 solve_kind:
146   - SATISFY
147   - | MINIMIZE expr
148   - | MAXIMIZE expr
  146 + SATISFY { PUSH (("satisfy")); }
  147 + | MINIMIZE expr { AST ("E", ("minimize(E)")); }
  148 + | MAXIMIZE expr { AST ("E", ("maximize(E)")); }
149 149  
150 150 //---------------------------------------------------------------------------
151 151 // Predicate parameters
... ... @@ -157,16 +157,19 @@ pred_decl_args:
157 157  
158 158 pred_decl_arg:
159 159 non_array_ti_expr_tail ':' IDENT
  160 + { AST ("T", ("T:'%s'", $3)); }
160 161 | VAR non_array_ti_expr_tail ':' IDENT
  162 + { AST ("T", ("var(T):'%s'", $4)); }
161 163 | ARRAY '[' pred_arg_array_index ']' OF pred_arg_array_tail ':' IDENT
  164 + { AST ("T,U,L", ("var(array(T,L,U)):'%s'", $8)); }
162 165  
163 166 pred_arg_array_index:
164   - INT
165   - | INT_LITERAL DOTDOT INT_LITERAL
  167 + INT { PUSH (("_,1")); }
  168 + | INT_LITERAL DOTDOT INT_LITERAL { PUSH (("%d,%d", $3, $1)); }
166 169  
167   -pred_arg_array_tail:
168   - non_array_ti_expr_tail
169   - | 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)")); }
170 173  
171 174 //---------------------------------------------------------------------------
172 175 // Type-Inst Expression Tails
... ... @@ -251,7 +254,7 @@ array_access_expr: IDENT '[' INT_LITERAL ']'
251 254 //---------------------------------------------------------------------------
252 255  
253 256 annotations:
254   - COLONCOLON expr annotations { CONS (); }
  257 + COLONCOLON expr annotations { AST ("As, E", ("[E|As]")); }
255 258 | /* empty */ { NIL (); }
256 259  
257 260 %%
... ...