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 |