Commit e2445a00abc18aa64a2ff14ec93dde4670fe5f2b

Authored by Salvador Abreu
1 parent b204495a
Exists in master

progress on AST

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