diff --git a/fzn-parser/examples/a.ast b/fzn-parser/examples/a.ast index 4cd47fb..a5c24dc 100644 --- a/fzn-parser/examples/a.ast +++ b/fzn-parser/examples/a.ast @@ -3,7 +3,7 @@ _T > [[]|_T]. [X|_T] > [preds(X)|_T]. _T > [[]|_T]. _T > [int|_T]. -_T > [id('X_INTRODUCED_0')|_T]. +_T > ['X_INTRODUCED_0'|_T]. _T > [[]|_T]. _T > [int:lit(1)|_T]. _T > [int:lit(-1)|_T]. @@ -12,7 +12,7 @@ _T > [int:lit(-1)|_T]. [VAL,AN,T|_T] > [var(array(T,1,2), VAL, AN)|_T]. [H,T|_T] > [[H|T]|_T]. _T > [int(1,3)|_T]. -_T > [id('wa')|_T]. +_T > ['wa'|_T]. _T > [_:id('output_var')|_T]. _T > [[]|_T]. [H,T|_T] > [[H|T]|_T]. @@ -20,7 +20,7 @@ _T > [[]|_T]. [VAL,AN,T|_T] > [var(T, VAL, AN)|_T]. [H,T|_T] > [[H|T]|_T]. _T > [int(1,3)|_T]. -_T > [id('nt')|_T]. +_T > ['nt'|_T]. _T > [_:id('output_var')|_T]. _T > [[]|_T]. [H,T|_T] > [[H|T]|_T]. @@ -37,8 +37,9 @@ _T > [_:id('nt')|_T]. _T > [int:lit(0)|_T]. [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. +_T > ['int_lin_ne'|_T]. _T > [[]|_T]. -[A, C|_T] > [constraint(C, A)|_T]. +[A,C,E|_T] > [constraint(C,E,A)|_T]. [H,T|_T] > [[H|T]|_T]. [X|_T] > [constrs(X)|_T]. _T > [[]|_T]. diff --git a/fzn-parser/examples/aust.ast b/fzn-parser/examples/aust.ast index eb5aeb1..bcea9bc 100644 --- a/fzn-parser/examples/aust.ast +++ b/fzn-parser/examples/aust.ast @@ -3,46 +3,69 @@ _T > [[]|_T]. [X|_T] > [preds(X)|_T]. _T > [[]|_T]. _T > [int|_T]. +_T > [id('X_INTRODUCED_0')|_T]. _T > [[]|_T]. _T > [int:lit(1)|_T]. _T > [int:lit(-1)|_T]. [T2:E2,T1:E1|_T] > [(T1,T2):(E1,E2)|_T]. [Es|_T] > [array(_):alit(Es)|_T]. +[VAL,AN,T|_T] > [var(array(T,1,2), VAL, AN)|_T]. [H,T|_T] > [[H|T]|_T]. _T > [int(1,3)|_T]. +_T > [id('wa')|_T]. _T > [_:id('output_var')|_T]. _T > [[]|_T]. [H,T|_T] > [[H|T]|_T]. +_T > [[]|_T]. +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T]. [H,T|_T] > [[H|T]|_T]. _T > [int(1,3)|_T]. +_T > [id('nt')|_T]. _T > [_:id('output_var')|_T]. _T > [[]|_T]. [H,T|_T] > [[H|T]|_T]. +_T > [[]|_T]. +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T]. [H,T|_T] > [[H|T]|_T]. _T > [int(1,3)|_T]. +_T > [id('sa')|_T]. _T > [_:id('output_var')|_T]. _T > [[]|_T]. [H,T|_T] > [[H|T]|_T]. +_T > [[]|_T]. +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T]. [H,T|_T] > [[H|T]|_T]. _T > [int(1,3)|_T]. +_T > [id('q')|_T]. _T > [_:id('output_var')|_T]. _T > [[]|_T]. [H,T|_T] > [[H|T]|_T]. +_T > [[]|_T]. +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T]. [H,T|_T] > [[H|T]|_T]. _T > [int(1,3)|_T]. +_T > [id('nsw')|_T]. _T > [_:id('output_var')|_T]. _T > [[]|_T]. [H,T|_T] > [[H|T]|_T]. +_T > [[]|_T]. +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T]. [H,T|_T] > [[H|T]|_T]. _T > [int(1,3)|_T]. +_T > [id('v')|_T]. _T > [_:id('output_var')|_T]. _T > [[]|_T]. [H,T|_T] > [[H|T]|_T]. +_T > [[]|_T]. +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T]. [H,T|_T] > [[H|T]|_T]. _T > [int(1,3)|_T]. +_T > [id('t')|_T]. _T > [_:id('output_var')|_T]. _T > [[]|_T]. [H,T|_T] > [[H|T]|_T]. +_T > [[]|_T]. +[VAL,AN,T|_T] > [var(T, VAL, AN)|_T]. [H,T|_T] > [[H|T]|_T]. [X|_T] > [vars(X)|_T]. _T > [[]|_T]. diff --git a/fzn-parser/flatzinc.y b/fzn-parser/flatzinc.y index 479ce9d..41415f7 100644 --- a/fzn-parser/flatzinc.y +++ b/fzn-parser/flatzinc.y @@ -119,32 +119,34 @@ pred_decl_item: var_decl_item: VAR non_array_ti_expr_tail ':' ident_anns var_decl_item2 - { AST ("ID,T") + { AST ("VAL,AN,T", ("var(T, VAL, AN)")); } | non_array_ti_expr_tail ':' ident_anns '=' expr + { AST ("VAL,AN,T", ("var(T, VAL, AN)")); } | ARRAY '[' INT_LITERAL DOTDOT INT_LITERAL ']' OF array_decl_tail + { AST ("VAL,AN,T", ("var(array(T,%d,%d), VAL, AN)", $3, $5)); } var_decl_item2: - '=' expr - | /*empty*/ + '=' expr { } + | /*empty*/ { NIL (); } array_decl_tail: non_array_ti_expr_tail ':' ident_anns '=' array_literal | VAR non_array_ti_expr_tail ':' ident_anns array_decl_tail2 -array_decl_tail2: - '=' array_literal - | /*empty*/ +array_decl_tail2: /* -> [ DECLS | _ ] */ + '=' array_literal { } + | /*empty*/ { NIL (); } -ident_anns: - IDENT { PUSH (("id('%s')", $1)); } annotations - | UNDERSCORE_IDENT { PUSH (("id('%s')", $1)); } annotations +ident_anns: /* -> [ ANNOTATIONS, ID | _ ] */ + IDENT { PUSH (("'%s'", $1)); } annotations + | UNDERSCORE_IDENT { PUSH (("'%s'", $1)); } annotations -constraint_item: +constraint_item: /* -> [ constraint(...) | ] */ CONSTRAINT constraint_elem annotations - { AST ("A, C", ("constraint(C, A)")); } + { AST ("A,C,E", ("constraint(C,E,A)")); } -constraint_elem: - IDENT '(' exprs ')' +constraint_elem: /* -> [ CONSTR_ID, EXPRLIST | _ ] */ + IDENT '(' exprs ')' { PUSH (("'%s'", $1)); } solve_item: SOLVE annotations solve_kind -- libgit2 0.21.2