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,13 +9,13 @@ _T > [int:lit(1)|_T].
9 _T > [int:lit(-1)|_T]. 9 _T > [int:lit(-1)|_T].
10 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. 10 [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T].
11 [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]. 12 +[VAL,AN,ID,T|_T] > [var(ID, array(T,1,2), VAL, AN)|_T].
13 [H,T|_T] > [[H|T]|_T]. 13 [H,T|_T] > [[H|T]|_T].
14 _T > [int(1,3)|_T]. 14 _T > [int(1,3)|_T].
15 _T > ['wa'|_T]. 15 _T > ['wa'|_T].
16 _T > [_:id('output_var')|_T]. 16 _T > [_:id('output_var')|_T].
17 _T > [[]|_T]. 17 _T > [[]|_T].
18 -[H,T|_T] > [[H|T]|_T]. 18 +[As, E|_T] > [[E|As]|_T].
19 _T > [[]|_T]. 19 _T > [[]|_T].
20 [VAL,AN,ID,T|_T] > [var(ID, T, VAL, AN)|_T]. 20 [VAL,AN,ID,T|_T] > [var(ID, T, VAL, AN)|_T].
21 [H,T|_T] > [[H|T]|_T]. 21 [H,T|_T] > [[H|T]|_T].
@@ -23,7 +23,7 @@ _T > [int(1,3)|_T]. @@ -23,7 +23,7 @@ _T > [int(1,3)|_T].
23 _T > ['nt'|_T]. 23 _T > ['nt'|_T].
24 _T > [_:id('output_var')|_T]. 24 _T > [_:id('output_var')|_T].
25 _T > [[]|_T]. 25 _T > [[]|_T].
26 -[H,T|_T] > [[H|T]|_T]. 26 +[As, E|_T] > [[E|As]|_T].
27 _T > [[]|_T]. 27 _T > [[]|_T].
28 [VAL,AN,ID,T|_T] > [var(ID, T, VAL, AN)|_T]. 28 [VAL,AN,ID,T|_T] > [var(ID, T, VAL, AN)|_T].
29 [H,T|_T] > [[H|T]|_T]. 29 [H,T|_T] > [[H|T]|_T].
@@ -43,3 +43,4 @@ _T > [[]|_T]. @@ -43,3 +43,4 @@ _T > [[]|_T].
43 [H,T|_T] > [[H|T]|_T]. 43 [H,T|_T] > [[H|T]|_T].
44 [X|_T] > [constrs(X)|_T]. 44 [X|_T] > [constrs(X)|_T].
45 _T > [[]|_T]. 45 _T > [[]|_T].
  46 +_T > [satisfy|_T].
fzn-parser/flatzinc.y
@@ -114,21 +114,21 @@ var_decl_item: /* -> [ var(ID,TYPE,INIT,ANNOT) | _ ] */ @@ -114,21 +114,21 @@ var_decl_item: /* -> [ var(ID,TYPE,INIT,ANNOT) | _ ] */
114 | 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)")); } 115 { AST ("VAL,AN,ID,T", ("var(ID, T, VAL, AN)")); }
116 | 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,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 '=' expr { } 120 '=' expr { }
121 | /*empty*/ { NIL (); } 121 | /*empty*/ { NIL (); }
122 122
123 -array_decl_tail: 123 +array_decl_tail: /* -> [ TYPE,VAL,ANNOT,ID | _ ] */
124 non_array_ti_expr_tail ':' ident_anns '=' array_literal 124 non_array_ti_expr_tail ':' ident_anns '=' array_literal
125 | VAR non_array_ti_expr_tail ':' ident_anns array_decl_tail2 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 '=' array_literal { } 128 '=' array_literal { }
129 | /*empty*/ { NIL (); } 129 | /*empty*/ { NIL (); }
130 130
131 -ident_anns: /* -> [ ANNOTATIONS, ID | _ ] */ 131 +ident_anns: /* -> [ ANNOT,ID | _ ] */
132 IDENT { PUSH (("'%s'", $1)); } annotations 132 IDENT { PUSH (("'%s'", $1)); } annotations
133 | UNDERSCORE_IDENT { PUSH (("'%s'", $1)); } annotations 133 | UNDERSCORE_IDENT { PUSH (("'%s'", $1)); } annotations
134 134
@@ -143,9 +143,9 @@ solve_item: @@ -143,9 +143,9 @@ solve_item:
143 SOLVE annotations solve_kind 143 SOLVE annotations solve_kind
144 144
145 solve_kind: 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 // Predicate parameters 151 // Predicate parameters
@@ -157,16 +157,19 @@ pred_decl_args: @@ -157,16 +157,19 @@ pred_decl_args:
157 157
158 pred_decl_arg: 158 pred_decl_arg:
159 non_array_ti_expr_tail ':' IDENT 159 non_array_ti_expr_tail ':' IDENT
  160 + { AST ("T", ("T:'%s'", $3)); }
160 | VAR non_array_ti_expr_tail ':' IDENT 161 | VAR non_array_ti_expr_tail ':' IDENT
  162 + { AST ("T", ("var(T):'%s'", $4)); }
161 | 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)); }
162 165
163 pred_arg_array_index: 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 // Type-Inst Expression Tails 175 // Type-Inst Expression Tails
@@ -251,7 +254,7 @@ array_access_expr: IDENT '[' INT_LITERAL ']' @@ -251,7 +254,7 @@ array_access_expr: IDENT '[' INT_LITERAL ']'
251 //--------------------------------------------------------------------------- 254 //---------------------------------------------------------------------------
252 255
253 annotations: 256 annotations:
254 - COLONCOLON expr annotations { CONS (); } 257 + COLONCOLON expr annotations { AST ("As, E", ("[E|As]")); }
255 | /* empty */ { NIL (); } 258 | /* empty */ { NIL (); }
256 259
257 %% 260 %%