Commit 6e2f2ea4f448327870aedccee4100a1ff699dce1
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 | %% |