Commit e2445a00abc18aa64a2ff14ec93dde4670fe5f2b
1 parent
b204495a
Exists in
master
progress on AST
Showing
3 changed files
with
43 additions
and
17 deletions
Show diff stats
fzn-parser/examples/a.ast
| @@ -3,7 +3,7 @@ _T > [[]|_T]. | @@ -3,7 +3,7 @@ _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 > ['X_INTRODUCED_0'|_T]. |
| 7 | _T > [[]|_T]. | 7 | _T > [[]|_T]. |
| 8 | _T > [int:lit(1)|_T]. | 8 | _T > [int:lit(1)|_T]. |
| 9 | _T > [int:lit(-1)|_T]. | 9 | _T > [int:lit(-1)|_T]. |
| @@ -12,7 +12,7 @@ _T > [int:lit(-1)|_T]. | @@ -12,7 +12,7 @@ _T > [int:lit(-1)|_T]. | ||
| 12 | [VAL,AN,T|_T] > [var(array(T,1,2), VAL, AN)|_T]. | 12 | [VAL,AN,T|_T] > [var(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 > [id('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 | [H,T|_T] > [[H|T]|_T]. |
| @@ -20,7 +20,7 @@ _T > [[]|_T]. | @@ -20,7 +20,7 @@ _T > [[]|_T]. | ||
| 20 | [VAL,AN,T|_T] > [var(T, VAL, AN)|_T]. | 20 | [VAL,AN,T|_T] > [var(T, VAL, AN)|_T]. |
| 21 | [H,T|_T] > [[H|T]|_T]. | 21 | [H,T|_T] > [[H|T]|_T]. |
| 22 | _T > [int(1,3)|_T]. | 22 | _T > [int(1,3)|_T]. |
| 23 | -_T > [id('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 | [H,T|_T] > [[H|T]|_T]. |
| @@ -37,8 +37,9 @@ _T > [_:id('nt')|_T]. | @@ -37,8 +37,9 @@ _T > [_:id('nt')|_T]. | ||
| 37 | _T > [int:lit(0)|_T]. | 37 | _T > [int:lit(0)|_T]. |
| 38 | [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. | 38 | [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. |
| 39 | [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]. | ||
| 40 | _T > [[]|_T]. | 41 | _T > [[]|_T]. |
| 41 | -[A, C|_T] > [constraint(C, A)|_T]. | 42 | +[A,C,E|_T] > [constraint(C,E,A)|_T]. |
| 42 | [H,T|_T] > [[H|T]|_T]. | 43 | [H,T|_T] > [[H|T]|_T]. |
| 43 | [X|_T] > [constrs(X)|_T]. | 44 | [X|_T] > [constrs(X)|_T]. |
| 44 | _T > [[]|_T]. | 45 | _T > [[]|_T]. |
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/flatzinc.y
| @@ -119,32 +119,34 @@ pred_decl_item: | @@ -119,32 +119,34 @@ pred_decl_item: | ||
| 119 | 119 | ||
| 120 | var_decl_item: | 120 | var_decl_item: |
| 121 | VAR non_array_ti_expr_tail ':' ident_anns var_decl_item2 | 121 | VAR non_array_ti_expr_tail ':' ident_anns var_decl_item2 |
| 122 | - { AST ("ID,T") | 122 | + { AST ("VAL,AN,T", ("var(T, VAL, AN)")); } |
| 123 | | non_array_ti_expr_tail ':' ident_anns '=' expr | 123 | | non_array_ti_expr_tail ':' ident_anns '=' expr |
| 124 | + { AST ("VAL,AN,T", ("var(T, VAL, AN)")); } | ||
| 124 | | ARRAY '[' INT_LITERAL DOTDOT INT_LITERAL ']' OF array_decl_tail | 125 | | ARRAY '[' INT_LITERAL DOTDOT INT_LITERAL ']' OF array_decl_tail |
| 126 | + { AST ("VAL,AN,T", ("var(array(T,%d,%d), VAL, AN)", $3, $5)); } | ||
| 125 | 127 | ||
| 126 | var_decl_item2: | 128 | var_decl_item2: |
| 127 | - '=' expr | ||
| 128 | - | /*empty*/ | 129 | + '=' expr { } |
| 130 | + | /*empty*/ { NIL (); } | ||
| 129 | 131 | ||
| 130 | array_decl_tail: | 132 | array_decl_tail: |
| 131 | non_array_ti_expr_tail ':' ident_anns '=' array_literal | 133 | non_array_ti_expr_tail ':' ident_anns '=' array_literal |
| 132 | | VAR non_array_ti_expr_tail ':' ident_anns array_decl_tail2 | 134 | | VAR non_array_ti_expr_tail ':' ident_anns array_decl_tail2 |
| 133 | 135 | ||
| 134 | -array_decl_tail2: | ||
| 135 | - '=' array_literal | ||
| 136 | - | /*empty*/ | 136 | +array_decl_tail2: /* -> [ DECLS | _ ] */ |
| 137 | + '=' array_literal { } | ||
| 138 | + | /*empty*/ { NIL (); } | ||
| 137 | 139 | ||
| 138 | -ident_anns: | ||
| 139 | - IDENT { PUSH (("id('%s')", $1)); } annotations | ||
| 140 | - | UNDERSCORE_IDENT { PUSH (("id('%s')", $1)); } annotations | 140 | +ident_anns: /* -> [ ANNOTATIONS, ID | _ ] */ |
| 141 | + IDENT { PUSH (("'%s'", $1)); } annotations | ||
| 142 | + | UNDERSCORE_IDENT { PUSH (("'%s'", $1)); } annotations | ||
| 141 | 143 | ||
| 142 | -constraint_item: | 144 | +constraint_item: /* -> [ constraint(...) | ] */ |
| 143 | CONSTRAINT constraint_elem annotations | 145 | CONSTRAINT constraint_elem annotations |
| 144 | - { AST ("A, C", ("constraint(C, A)")); } | 146 | + { AST ("A,C,E", ("constraint(C,E,A)")); } |
| 145 | 147 | ||
| 146 | -constraint_elem: | ||
| 147 | - IDENT '(' exprs ')' | 148 | +constraint_elem: /* -> [ CONSTR_ID, EXPRLIST | _ ] */ |
| 149 | + IDENT '(' exprs ')' { PUSH (("'%s'", $1)); } | ||
| 148 | 150 | ||
| 149 | solve_item: | 151 | solve_item: |
| 150 | SOLVE annotations solve_kind | 152 | SOLVE annotations solve_kind |