diff --git a/.gitignore b/.gitignore index 153a441..a48cc6a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ *.o *-mpi +*~ diff --git a/fzn-parser/examples/queens.fzn b/fzn-parser/examples/queens.fzn new file mode 100644 index 0000000..b5d56ff --- /dev/null +++ b/fzn-parser/examples/queens.fzn @@ -0,0 +1,593 @@ +array [1..2] of int: X_INTRODUCED_20 = [1,-1]; +var 1..20: X_INTRODUCED_0; +var 1..20: X_INTRODUCED_1; +var 1..20: X_INTRODUCED_2; +var 1..20: X_INTRODUCED_3; +var 1..20: X_INTRODUCED_4; +var 1..20: X_INTRODUCED_5; +var 1..20: X_INTRODUCED_6; +var 1..20: X_INTRODUCED_7; +var 1..20: X_INTRODUCED_8; +var 1..20: X_INTRODUCED_9; +var 1..20: X_INTRODUCED_10; +var 1..20: X_INTRODUCED_11; +var 1..20: X_INTRODUCED_12; +var 1..20: X_INTRODUCED_13; +var 1..20: X_INTRODUCED_14; +var 1..20: X_INTRODUCED_15; +var 1..20: X_INTRODUCED_16; +var 1..20: X_INTRODUCED_17; +var 1..20: X_INTRODUCED_18; +var 1..20: X_INTRODUCED_19; +array [1..20] of var 1..20: q:: output_array([1..20]) = [X_INTRODUCED_0,X_INTRODUCED_1,X_INTRODUCED_2,X_INTRODUCED_3,X_INTRODUCED_4,X_INTRODUCED_5,X_INTRODUCED_6,X_INTRODUCED_7,X_INTRODUCED_8,X_INTRODUCED_9,X_INTRODUCED_10,X_INTRODUCED_11,X_INTRODUCED_12,X_INTRODUCED_13,X_INTRODUCED_14,X_INTRODUCED_15,X_INTRODUCED_16,X_INTRODUCED_17,X_INTRODUCED_18,X_INTRODUCED_19]; +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_1],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_1],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_1],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_2],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_2],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_2],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_3],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_3],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_3],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_4],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_4],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_4],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_5],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_5],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_5],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_6],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_6],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_6],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_7],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_7],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_7],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_8],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_8],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_8],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_9],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_9],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_9],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_10],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_10],10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_10],-10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_11],11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_11],-11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_12],12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_12],-12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_13],13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_13],-13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_14],14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_14],-14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_15],15); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_15],-15); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_16],16); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_16],-16); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_17],17); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_17],-17); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_18],18); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_18],-18); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_19],19); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_0,X_INTRODUCED_19],-19); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_2],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_2],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_2],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_3],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_3],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_3],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_4],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_4],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_4],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_5],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_5],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_5],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_6],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_6],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_6],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_7],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_7],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_7],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_8],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_8],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_8],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_9],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_9],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_9],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_10],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_10],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_10],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_11],10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_11],-10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_12],11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_12],-11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_13],12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_13],-12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_14],13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_14],-13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_15],14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_15],-14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_16],15); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_16],-15); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_17],16); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_17],-16); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_18],17); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_18],-17); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_19],18); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_1,X_INTRODUCED_19],-18); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_3],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_3],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_3],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_4],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_4],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_4],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_5],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_5],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_5],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_6],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_6],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_6],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_7],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_7],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_7],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_8],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_8],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_8],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_9],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_9],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_9],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_10],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_10],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_10],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_11],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_11],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_12],10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_12],-10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_13],11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_13],-11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_14],12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_14],-12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_15],13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_15],-13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_16],14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_16],-14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_17],15); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_17],-15); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_18],16); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_18],-16); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_19],17); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_2,X_INTRODUCED_19],-17); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_4],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_4],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_4],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_5],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_5],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_5],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_6],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_6],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_6],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_7],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_7],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_7],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_8],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_8],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_8],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_9],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_9],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_9],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_10],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_10],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_10],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_11],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_11],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_12],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_12],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_13],10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_13],-10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_14],11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_14],-11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_15],12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_15],-12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_16],13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_16],-13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_17],14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_17],-14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_18],15); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_18],-15); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_19],16); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_3,X_INTRODUCED_19],-16); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_5],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_5],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_5],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_6],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_6],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_6],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_7],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_7],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_7],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_8],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_8],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_8],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_9],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_9],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_9],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_10],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_10],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_10],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_11],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_11],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_12],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_12],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_13],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_13],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_14],10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_14],-10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_15],11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_15],-11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_16],12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_16],-12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_17],13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_17],-13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_18],14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_18],-14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_19],15); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_4,X_INTRODUCED_19],-15); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_6],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_6],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_6],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_7],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_7],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_7],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_8],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_8],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_8],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_9],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_9],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_9],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_10],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_10],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_10],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_11],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_11],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_12],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_12],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_13],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_13],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_14],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_14],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_15],10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_15],-10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_16],11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_16],-11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_17],12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_17],-12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_18],13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_18],-13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_19],14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_5,X_INTRODUCED_19],-14); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_7],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_7],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_7],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_8],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_8],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_8],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_9],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_9],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_9],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_10],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_10],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_10],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_11],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_11],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_12],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_12],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_13],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_13],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_14],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_14],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_15],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_15],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_16],10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_16],-10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_17],11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_17],-11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_18],12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_18],-12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_19],13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_6,X_INTRODUCED_19],-13); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_8],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_8],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_8],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_9],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_9],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_9],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_10],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_10],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_10],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_11],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_11],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_12],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_12],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_13],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_13],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_14],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_14],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_15],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_15],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_16],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_16],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_17],10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_17],-10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_18],11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_18],-11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_19],12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_7,X_INTRODUCED_19],-12); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_9],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_9],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_9],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_10],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_10],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_10],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_11],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_11],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_12],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_12],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_13],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_13],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_14],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_14],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_15],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_15],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_16],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_16],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_17],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_17],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_18],10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_18],-10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_19],11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_8,X_INTRODUCED_19],-11); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_10],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_10],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_10],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_11],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_11],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_12],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_12],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_13],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_13],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_14],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_14],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_15],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_15],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_16],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_16],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_17],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_17],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_18],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_18],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_19],10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_9,X_INTRODUCED_19],-10); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_11],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_11],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_11],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_12],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_12],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_13],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_13],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_14],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_14],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_15],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_15],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_16],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_16],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_17],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_17],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_18],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_18],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_19],9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_10,X_INTRODUCED_19],-9); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_12],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_12],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_12],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_13],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_13],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_14],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_14],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_15],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_15],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_16],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_16],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_17],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_17],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_18],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_18],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_19],8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_11,X_INTRODUCED_19],-8); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_13],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_13],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_13],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_14],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_14],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_15],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_15],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_16],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_16],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_17],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_17],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_18],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_18],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_19],7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_12,X_INTRODUCED_19],-7); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_14],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_14],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_14],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_15],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_15],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_16],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_16],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_17],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_17],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_18],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_18],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_19],6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_13,X_INTRODUCED_19],-6); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_15],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_15],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_15],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_16],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_16],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_17],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_17],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_18],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_18],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_19],5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_14,X_INTRODUCED_19],-5); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_16],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_16],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_16],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_17],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_17],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_18],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_18],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_19],4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_15,X_INTRODUCED_19],-4); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_16,X_INTRODUCED_17],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_16,X_INTRODUCED_17],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_16,X_INTRODUCED_17],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_16,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_16,X_INTRODUCED_18],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_16,X_INTRODUCED_18],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_16,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_16,X_INTRODUCED_19],3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_16,X_INTRODUCED_19],-3); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_17,X_INTRODUCED_18],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_17,X_INTRODUCED_18],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_17,X_INTRODUCED_18],-1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_17,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_17,X_INTRODUCED_19],2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_17,X_INTRODUCED_19],-2); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_18,X_INTRODUCED_19],0); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_18,X_INTRODUCED_19],1); +constraint int_lin_ne(X_INTRODUCED_20,[X_INTRODUCED_18,X_INTRODUCED_19],-1); +solve satisfy; diff --git a/fzn-parser/flatzinc.y b/fzn-parser/flatzinc.y index 7c691dc..566b6f2 100644 --- a/fzn-parser/flatzinc.y +++ b/fzn-parser/flatzinc.y @@ -1,6 +1,10 @@ -// Parser for FlatZinc 1.1. -// Authors: Nick Nethercote -// Julien Fischer +// == Prolog AST-stream term Parser for FlatZinc ============================== +// +// (C) 2015 Salvador Abreu +// +// ---------------------------------------------------------------------------- +// Based on the Parser for FlatZinc 1.1 +// by Nick Nethercote and Julien Fischer // // NOTE: the parser produced by the following grammar does not ensure // that expressions are type correct. Further type-checking after parsing @@ -12,20 +16,49 @@ %{ #include #include + +#include "types.h" + +#define AST(pop, push) \ +{ \ + if (pop) \ + printf ("[%s|_Tail] ==> [", pop); \ + else \ + printf ("_Tail ==> ["); \ + printf push; \ + printf ("|_Tail].\n"); \ +} + +#define PUSH(x) \ +{ \ + printf ("_Tail ==> ["); \ + printf x; \ + printf ("|_Tail].\n"); \ +} + +#define CONS() AST ("T,H", ("[H|T]")) +#define CONS_SWAPPED() AST ("H,T", ("[H|T]")) + +#define TAIL() AST ("T", ("[T]")) +#define NIL() PUSH (("[]")) + +#define TAIL_OPEN() AST ("T", ("[T|_]")) +#define NIL_OPEN() PUSH (("_")) + +#define BINARY(op) AST ("B,A", ("op(A,B)")) +#define UNARY(op) AST ("X", ("op(X)")) + %} // Possible values for attributed tokens. %union { - char* string_val; - int int_val; - double float_val; + UNION_DEFS (); }; // Token kinds -%token INT_LITERAL - STRING_LITERAL IDENT UNDERSCORE_IDENT - FLOAT_LITERAL +%token INT_LITERAL STRING_LITERAL FLOAT_LITERAL + IDENT UNDERSCORE_IDENT ARRAY BOOL CONSTRAINT FALSE FLOAT INT MAXIMIZE MINIMIZE OF PREDICATE SATISFY SET SOLVE TRUE VAR DOTDOT COLONCOLON diff --git a/fzn-parser/types.h b/fzn-parser/types.h new file mode 100644 index 0000000..86f8deb --- /dev/null +++ b/fzn-parser/types.h @@ -0,0 +1,23 @@ +// == Prolog AST-stream term parser for FlatZinc ============================== +// +// (C) 2015 Salvador Abreu +// +// ---------------------------------------------------------------------------- + +typedef enum { false, true } bool; + +typedef union { + long ival; + double rval; + bool bval; + char *sval; +} lit_token; + +typedef char *id_token; + +typedef long ast_node; + +#define UNION_DEFS() \ + lit_token lit; \ + id_token id; \ + ast_node node -- libgit2 0.21.2