this repo has no description

Squashed 'software/gecode/' changes from 313e87646d..70a1cfa856

70a1cfa856 Add reasoning about why a restart happens
5db96c6afc Add initial version of the 'complete' propagator
3410436fc5 Fix include problems on Linux and Windows
0218f3e7be Remove deprecated restart_count from the variables set on restart
7f4a528ced Fix makefile mistake for LastVal constraint
8a39aee00d Initialise LastVal stored as the minimal in the domain
86707c674e Update STATUS to match the new enum
44d672100f Add support for LastVal from FlatZinc
bd8af2e8f6 Subsume after propagation
2f07e027ab Add LastVal propagator
f05cf9daba Output number of copies
707e30c0f0 Update generated parser files
179ee693cc Add restart_number() builtin (to work around the problem that otherwise we can't implement round robin style search)
04a492da17 Fix restart numbers (didn't count incomplete neighbourhoods)
fbaa3529ec Initial implementation of on_restart
6dd39a73dd Update LICENSE
8f5ea30eba Update LICENSE
4236a2e5ec Use std::vector instead of std::array
c53655d685 Dynamically adjust test batch sizes
37248557b6 Require C++11
cc60ea7cde Minor, remove exraneous newline in changelog
74c5f54b9f Make Region pool thread local
6f04ac3514 Use atomic for propagator identifier
2e0c275b07 Add support for parallel testing
3ada422b76 Refactor, extracted run_test function
787c41b8c4 Refactor, move data and logic into Options
120fc512a7 Refactor, extract run_tests function
85dd87a4af Refactoring: Thread rand through calls in test
cece9da4ef Refactor Assignments operator() to has_more
564410e4ee Refactor Assignment operator++ to next()
e1c84af894 Separate test filtering from running
8558856298 Remove empty statement warnings
a9d8cb64fa Fix compilation errors for CPProfiler support
9ec81a69b2 Add RestartStop
REVERT: 313e87646d Fix include problems on Linux and Windows
REVERT: 358b8ca63b Remove deprecated restart_count from the variables set on restart
REVERT: 83508d5de2 Fix makefile mistake for LastVal constraint
REVERT: 530bbaf107 Initialise LastVal stored as the minimal in the domain
REVERT: 96ba0d3d7e Update STATUS to match the new enum
REVERT: 7d772297f9 Add support for LastVal from FlatZinc
REVERT: 98b0162d75 Subsume after propagation
REVERT: 5cd4552144 Add LastVal propagator
REVERT: 9b80e644b7 Output number of copies
REVERT: aaa5301366 Update generated parser files
REVERT: 6ff4efe6a4 Add restart_number() builtin (to work around the problem that otherwise we can't implement round robin style search)
REVERT: 8bcbec5d6e Fix restart numbers (didn't count incomplete neighbourhoods)
REVERT: 3f63e743b2 Initial implementation of on_restart
REVERT: b6ffa462d1 Update LICENSE
REVERT: ad0621c26c Update LICENSE
REVERT: 93caa97684 Use std::vector instead of std::array
REVERT: 32d6399b35 Dynamically adjust test batch sizes
REVERT: e7f00e9977 Require C++11
REVERT: a5ba8e4282 Minor, remove exraneous newline in changelog
REVERT: b24831354d Make Region pool thread local
REVERT: b1a109ac2e Use atomic for propagator identifier
REVERT: 3d77aaad71 Add support for parallel testing
REVERT: b1b9526049 Refactor, extracted run_test function
REVERT: 85b8a57f65 Refactor, move data and logic into Options
REVERT: d2c1961437 Refactor, extract run_tests function
REVERT: 0236327c75 Refactoring: Thread rand through calls in test
REVERT: ba81289b02 Refactor Assignments operator() to has_more
REVERT: 038a554bd8 Refactor Assignment operator++ to next()
REVERT: f34f125131 Separate test filtering from running
REVERT: cec6336ede Remove empty statement warnings
REVERT: d63e1fc042 Fix compilation errors for CPProfiler support

git-subtree-dir: software/gecode
git-subtree-split: 70a1cfa856d138b0845d2681c46ca16f8507aebf

+2 -2
Makefile.in
···
# FLATZINC
#
-
FLATZINCSRC0 = flatzinc.cpp registry.cpp branch.cpp lastval.cpp
+
FLATZINCSRC0 = flatzinc.cpp registry.cpp branch.cpp lastval.cpp complete.cpp
FLATZINC_GENSRC0 = parser.tab.cpp lexer.yy.cpp
FLATZINCHDR0 = ast.hh conexpr.hh option.hh parser.hh \
plugin.hh registry.hh symboltable.hh varspec.hh \
-
branch.hh branch.hpp lastval.hh
+
branch.hh branch.hpp lastval.hh complete.hh
FLATZINCSRC = $(FLATZINCSRC0:%=gecode/flatzinc/%)
FLATZINC_GENSRC = $(FLATZINC_GENSRC0:%=gecode/flatzinc/%)
+10
changelog.in
···
[DESCRIPTION]
Let's see.
+
[ENTRY]
+
Module: search
+
What: new
+
Rank: minor
+
Thanks: Jip J. Dekker
+
[DESCRIPTION]
+
Add RestartStop class to enforce a limit on the amount of restarts conducted
+
in a search. RestartStop is included in CombinedStop and accessible from the
+
FlatZinc interface through the --restart-limit flag.
+
[RELEASE]
Version: 6.3.0
Date: 2020-??-??
+7
gecode/driver.hh
···
Driver::StringOption _restart; ///< Restart method option
Driver::DoubleOption _r_base; ///< Restart base
Driver::UnsignedIntOption _r_scale; ///< Restart scale factor
+
Driver::UnsignedLongLongIntOption
+
_r_limit; ///< Cutoff for number of restarts
Driver::BoolOption _nogoods; ///< Whether to use no-goods
Driver::UnsignedIntOption _nogoods_limit; ///< Limit for no-good extraction
Driver::DoubleOption _relax; ///< Probability to relax variable
···
void restart_scale(unsigned int scale);
/// Return restart scale factor
unsigned int restart_scale(void) const;
+
+
/// Set default restart cutoff
+
void restart_limit(unsigned long long int n);
+
/// Return restart cutoff
+
unsigned long long int restart_limit(void) const;
/// Set default nogoods posting behavior
void nogoods(bool b);
+2 -1
gecode/driver/options.cpp
···
Search::Config::base),
_r_scale("restart-scale","scale factor for restart sequence",
Search::Config::slice),
+
_r_limit("restart-limit","restart cutoff (0 = none, solution mode)"),
_nogoods("nogoods","whether to use no-goods from restarts",false),
_nogoods_limit("nogoods-limit","depth limit for no-good extraction",
Search::Config::nogoods_limit),
···
add(_d_l);
add(_node); add(_fail); add(_time); add(_interrupt);
add(_assets); add(_slice);
-
add(_restart); add(_r_base); add(_r_scale);
+
add(_restart); add(_r_base); add(_r_scale); add(_r_limit);
add(_nogoods); add(_nogoods_limit);
add(_relax);
add(_mode); add(_iterations); add(_samples); add(_print_last);
+9
gecode/driver/options.hpp
···
}
inline void
+
Options::restart_limit(unsigned long long int n) {
+
_r_limit.value(n);
+
}
+
inline unsigned long long int
+
Options::restart_limit(void) const {
+
return _r_limit.value();
+
}
+
+
inline void
Options::nogoods(bool b) {
_nogoods.value(b);
}
+19 -10
gecode/driver/script.hpp
···
Search::NodeStop* ns; ///< Used node stop object
Search::FailStop* fs; ///< Used fail stop object
Search::TimeStop* ts; ///< Used time stop object
+
Search::RestartStop* rs; ///< Used restart stop object
GECODE_DRIVER_EXPORT
static bool sigint; ///< Whether search was interrupted using Ctrl-C
/// Initialize stop object
CombinedStop(unsigned long long int node,
unsigned long long int fail,
-
double time)
+
double time,
+
unsigned long long int restart)
: ns((node > 0ULL) ? new Search::NodeStop(node) : nullptr),
fs((fail > 0ULL) ? new Search::FailStop(fail) : nullptr),
-
ts((time > 0.0) ? new Search::TimeStop(time) : nullptr) {
+
ts((time > 0.0) ? new Search::TimeStop(time) : nullptr),
+
rs((restart > 0.0) ? new Search::RestartStop(restart) : nullptr) {
sigint = false;
}
public:
···
SR_NODE = 1 << 0, ///< Node limit reached
SR_FAIL = 1 << 1, ///< Fail limit reached
SR_TIME = 1 << 2, ///< Time limit reached
-
SR_INT = 1 << 3 ///< Interrupted by user
+
SR_RESTART = 1 << 3, ///< Time limit reached
+
SR_INT = 1 << 4 ///< Interrupted by user
};
/// Test whether search must be stopped
virtual bool stop(const Search::Statistics& s, const Search::Options& o) {
···
sigint ||
((ns != nullptr) && ns->stop(s,o)) ||
((fs != nullptr) && fs->stop(s,o)) ||
-
((ts != nullptr) && ts->stop(s,o));
+
((ts != nullptr) && ts->stop(s,o)) ||
+
((rs != nullptr) && rs->stop(s,o));
}
/// Report reason why search has been stopped
int reason(const Search::Statistics& s, const Search::Options& o) {
···
(((ns != nullptr) && ns->stop(s,o)) ? SR_NODE : 0) |
(((fs != nullptr) && fs->stop(s,o)) ? SR_FAIL : 0) |
(((ts != nullptr) && ts->stop(s,o)) ? SR_TIME : 0) |
+
(((rs != nullptr) && rs->stop(s,o)) ? SR_RESTART : 0) |
(sigint ? SR_INT : 0);
}
/// Create appropriate stop-object
···
create(unsigned long long int node,
unsigned long long int fail,
double time,
+
unsigned long long int restart,
bool intr) {
-
if (!intr && (node == 0ULL) && (fail == 0ULL) && (time == 0.0))
+
if (!intr && (node == 0ULL) && (fail == 0ULL) && (time == 0.0) && (restart == 0ULL))
return nullptr;
else
-
return new CombinedStop(node,fail,time);
+
return new CombinedStop(node,fail,time,restart);
}
#ifdef GECODE_THREADS_WINDOWS
/// Handler for catching Ctrl-C
···
}
/// Destructor
~CombinedStop(void) {
-
delete ns; delete fs; delete ts;
+
delete ns; delete fs; delete ts; delete rs;
}
};
···
so.d_l = o.d_l();
so.assets = o.assets();
so.slice = o.slice();
-
so.stop = CombinedStop::create(o.node(),o.fail(), o.time(),
+
so.stop = CombinedStop::create(o.node(),o.fail(), o.time(), o.restart_limit(),
o.interrupt());
so.cutoff = createCutoff(o);
so.clone = false;
···
l_out << "fail ";
if (r & CombinedStop::SR_TIME)
l_out << "time ";
+
if (r & CombinedStop::SR_RESTART)
+
l_out << "restart ";
l_out << "limit reached" << endl << endl;
}
}
···
so.c_d = o.c_d();
so.a_d = o.a_d();
so.d_l = o.d_l();
-
so.stop = CombinedStop::create(o.node(),o.fail(), o.time(),
+
so.stop = CombinedStop::create(o.node(),o.fail(), o.time(), o.restart_limit(),
o.interrupt());
so.cutoff = createCutoff(o);
so.nogoods_limit = o.nogoods() ? o.nogoods_limit() : 0U;
···
sok.c_d = o.c_d();
sok.a_d = o.a_d();
sok.d_l = o.d_l();
-
sok.stop = CombinedStop::create(o.node(),o.fail(), o.time(),
+
sok.stop = CombinedStop::create(o.node(),o.fail(), o.time(), o.restart_limit(),
false);
sok.cutoff = createCutoff(o);
sok.nogoods_limit = o.nogoods() ? o.nogoods_limit() : 0U;
+7 -1
gecode/flatzinc.hh
···
Gecode::Driver::StringOption _restart; ///< Restart method option
Gecode::Driver::DoubleOption _r_base; ///< Restart base
Gecode::Driver::UnsignedIntOption _r_scale; ///< Restart scale factor
+
Gecode::Driver::UnsignedLongLongIntOption _r_limit; ///< Cutoff for number of restarts
Gecode::Driver::BoolOption _nogoods; ///< Whether to use no-goods
Gecode::Driver::UnsignedIntOption _nogoods_limit; ///< Depth limit for extracting no-goods
Gecode::Driver::BoolOption _interrupt; ///< Whether to catch SIGINT
···
_restart("restart","restart sequence type",RM_NONE),
_r_base("restart-base","base for geometric restart sequence",1.5),
_r_scale("restart-scale","scale factor for restart sequence",250),
+
_r_limit("restart-limit","restart cutoff (0 = none, solution mode)"),
_nogoods("nogoods","whether to use no-goods from restarts",false),
_nogoods_limit("nogoods-limit","depth limit for no-good extraction",
Search::Config::nogoods_limit),
···
add(_node); add(_fail); add(_time); add(_time_limit); add(_interrupt);
add(_seed);
add(_step);
-
add(_restart); add(_r_base); add(_r_scale);
+
add(_restart); add(_r_base); add(_r_scale); add(_r_limit);
add(_nogoods); add(_nogoods_limit);
add(_mode); add(_stat);
add(_output);
···
void restart_base(double d) { _r_base.value(d); }
unsigned int restart_scale(void) const { return _r_scale.value(); }
void restart_scale(int i) { _r_scale.value(i); }
+
unsigned long long int restart_limit(void) const { return _r_limit.value(); }
bool nogoods(void) const { return _nogoods.value(); }
unsigned int nogoods_limit(void) const { return _nogoods_limit.value(); }
bool interrupt(void) const { return _interrupt.value(); }
···
/// The integer variables used in LNS
Gecode::IntVarArray iv_lns;
+
/// Complete() variable
+
Gecode::BoolVarArray restart_complete;
+
std::shared_ptr<bool> complete_marker;
/// Status() variable
Gecode::IntVarArray restart_status;
/// int_uniform arguments
+70
gecode/flatzinc/complete.cpp
···
+
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
+
/*
+
* Main authors:
+
* Jip J. Dekker <jip.dekker@monash.edu>
+
*
+
* Copyright:
+
* Jip J. Dekker, 2018
+
*
+
* This file is part of Gecode, the generic constraint
+
* development environment:
+
* http://www.gecode.org
+
*
+
* Permission is hereby granted, free of charge, to any person obtaining
+
* a copy of this software and associated documentation files (the
+
* "Software"), to deal in the Software without restriction, including
+
* without limitation the rights to use, copy, modify, merge, publish,
+
* distribute, sublicense, and/or sell copies of the Software, and to
+
* permit persons to whom the Software is furnished to do so, subject to
+
* the following conditions:
+
*
+
* The above copyright notice and this permission notice shall be
+
* included in all copies or substantial portions of the Software.
+
*
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
*
+
*/
+
+
#include "complete.hh"
+
+
namespace Gecode { namespace FlatZinc {
+
+
+
Complete::Complete(Space &home, Complete &p)
+
: UnaryPropagator<BoolView, PC_BOOL_VAL>(home,p), c(p.c) {}
+
+
Complete::Complete(Home home, BoolView x0, std::shared_ptr<bool> c)
+
: c(c), UnaryPropagator<BoolView, PC_BOOL_VAL>(home, x0) {}
+
+
Actor* Complete::copy(Space &home) {
+
return new (home) Complete(home,*this);
+
}
+
+
PropCost Complete::cost(const Space &home, const ModEventDelta &med) const {
+
return PropCost::record();
+
}
+
+
ExecStatus Complete::propagate(Space &home, const ModEventDelta &med) {
+
assert(x0.assigned());
+
(*c) = x0.val();
+
return ES_FAILED;
+
}
+
+
ExecStatus Complete::post(Home home, BoolView x0, std::shared_ptr<bool> c) {
+
assert(c != nullptr);
+
if (x0.assigned()) {
+
(*c) = x0.val();
+
} else {
+
(void) new (home) Complete(home, x0, c);
+
}
+
return ES_OK;
+
}
+
+
+
}}
+65
gecode/flatzinc/complete.hh
···
+
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
+
/*
+
* Main authors:
+
* Jip J. Dekker <jip.dekker@monash.edu>
+
*
+
* Copyright:
+
* Jip J. Dekker, 2018
+
*
+
* This file is part of Gecode, the generic constraint
+
* development environment:
+
* http://www.gecode.org
+
*
+
* Permission is hereby granted, free of charge, to any person obtaining
+
* a copy of this software and associated documentation files (the
+
* "Software"), to deal in the Software without restriction, including
+
* without limitation the rights to use, copy, modify, merge, publish,
+
* distribute, sublicense, and/or sell copies of the Software, and to
+
* permit persons to whom the Software is furnished to do so, subject to
+
* the following conditions:
+
*
+
* The above copyright notice and this permission notice shall be
+
* included in all copies or substantial portions of the Software.
+
*
+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+
*
+
*/
+
+
#ifndef __FLATZINC_COMPLETE_HH__
+
#define __FLATZINC_COMPLETE_HH__
+
+
#include <gecode/int.hh>
+
#include <memory>
+
using namespace Gecode::Int;
+
+
namespace Gecode { namespace FlatZinc {
+
+
class Complete : public UnaryPropagator<BoolView, PC_BOOL_VAL> {
+
protected:
+
using UnaryPropagator<BoolView,PC_BOOL_VAL>::x0;
+
std::shared_ptr<bool> c;
+
+
/// Constructor for cloning \a p
+
Complete(Space& home, Complete& p);
+
/// Constructor for posting
+
Complete(Home home, BoolView x0, std::shared_ptr<bool> c);
+
public:
+
/// Copy propagator during cloning
+
virtual Actor* copy(Space& home);
+
/// Cost function (defined as TODO)
+
virtual PropCost cost(const Space& home, const ModEventDelta& med) const;
+
/// Perform propagation
+
virtual ExecStatus propagate(Space& home, const ModEventDelta& med);
+
+
static ExecStatus post(Home home, BoolView x0, std::shared_ptr<bool> c);
+
};
+
+
}}
+
+
#endif //__FLATZINC_COMPLETE_HH__
+30 -8
gecode/flatzinc/flatzinc.cpp
···
iv_lns.update(*this, f.iv_lns);
intVarCount = f.intVarCount;
+
restart_complete.update(*this, f.restart_complete);
restart_status.update(*this, f.restart_status);
int_uniform_var.update(*this, f.int_uniform_var);
int_uniform_lb = f.int_uniform_lb;
···
n_p = PropagatorGroup::all.size(*this);
Search::Options o;
-
o.stop = Driver::CombinedStop::create(opt.node(), opt.fail(), opt.time(),
+
o.stop = Driver::CombinedStop::create(opt.node(), opt.fail(), opt.time(), opt.restart_limit(),
true);
o.c_d = opt.c_d();
o.a_d = opt.a_d();
···
bool
FlatZincSpace::slave(const MetaInfo& mi) {
if (mi.type() == MetaInfo::RESTART) {
+
if (restart_complete.size() > 0) {
+
assert(restart_complete.size() == 1);
+
assert(complete_marker != nullptr);
+
if (*complete_marker) {
+
// Fail the space
+
this->fail();
+
// Return true to signal we are in the global search space
+
return true;
+
}
+
}
+
bool ret = false;
if (restart_status.size() > 0) {
assert(restart_status.size() == 1);
-
if (!mi.last()) {
-
rel(*this, restart_status[0], IRT_EQ, 1); // 1: START
-
} else if (mi.solution() > 0) {
-
rel(*this, restart_status[0], IRT_EQ, 4); // 4: SAT
-
} else {
-
rel(*this, restart_status[0], IRT_EQ, 2); // 2: UNKNOWN
-
}
+
switch(mi.reason()) {
+
case MetaInfo::RR_INIT:
+
assert(!mi.last());
+
rel(*this, restart_status[0], IRT_EQ, 1); // 1: START
+
break;
+
case MetaInfo::RR_SOL:
+
assert(mi.solution() > 0);
+
rel(*this, restart_status[0], IRT_EQ, 4); // 4: SAT
+
break;
+
case MetaInfo::RR_CMPL:
+
rel(*this, restart_status[0], IRT_EQ, 3); // 3: UNSAT
+
break;
+
default:
+
assert(mi.reason() == MetaInfo::RR_LIM);
+
rel(*this, restart_status[0], IRT_EQ, 2); // 2: UNKNOWN
+
break;
+
}
restart_status = IntVarArray(*this, 0);
ret = true;
+60 -60
gecode/flatzinc/lexer.yy.cpp
···
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
-
#line 1 "../gecode/flatzinc/lexer.lxx"
+
#line 1 "gecode/flatzinc/lexer.lxx"
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
/*
* Main authors:
···
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
*
*/
-
#line 40 "../gecode/flatzinc/lexer.lxx"
+
#line 40 "gecode/flatzinc/lexer.lxx"
#if defined __GNUC__
#pragma GCC diagnostic ignored "-Wunused-function"
#pragma GCC diagnostic ignored "-Wunused-parameter"
···
}
{
-
#line 75 "../gecode/flatzinc/lexer.lxx"
+
#line 75 "gecode/flatzinc/lexer.lxx"
#line 945 "gecode/flatzinc/lexer.yy.cpp"
···
case 1:
/* rule 1 can match eol */
YY_RULE_SETUP
-
#line 77 "../gecode/flatzinc/lexer.lxx"
+
#line 77 "gecode/flatzinc/lexer.lxx"
{ /*yylineno++;*/ /* ignore EOL */ }
YY_BREAK
case 2:
YY_RULE_SETUP
-
#line 78 "../gecode/flatzinc/lexer.lxx"
+
#line 78 "gecode/flatzinc/lexer.lxx"
{ /* ignore whitespace */ }
YY_BREAK
case 3:
YY_RULE_SETUP
-
#line 79 "../gecode/flatzinc/lexer.lxx"
+
#line 79 "gecode/flatzinc/lexer.lxx"
{ /* ignore comments */ }
YY_BREAK
case 4:
YY_RULE_SETUP
-
#line 81 "../gecode/flatzinc/lexer.lxx"
+
#line 81 "gecode/flatzinc/lexer.lxx"
{ yylval->iValue = 1; return FZ_BOOL_LIT; }
YY_BREAK
case 5:
YY_RULE_SETUP
-
#line 82 "../gecode/flatzinc/lexer.lxx"
+
#line 82 "gecode/flatzinc/lexer.lxx"
{ yylval->iValue = 0; return FZ_BOOL_LIT; }
YY_BREAK
case 6:
YY_RULE_SETUP
-
#line 83 "../gecode/flatzinc/lexer.lxx"
+
#line 83 "gecode/flatzinc/lexer.lxx"
{ if (parseInt(yytext,yylval->iValue))
return FZ_INT_LIT;
else
···
YY_BREAK
case 7:
YY_RULE_SETUP
-
#line 92 "../gecode/flatzinc/lexer.lxx"
+
#line 92 "gecode/flatzinc/lexer.lxx"
{ if (parseInt(yytext,yylval->iValue))
return FZ_INT_LIT;
else
···
YY_BREAK
case 8:
YY_RULE_SETUP
-
#line 101 "../gecode/flatzinc/lexer.lxx"
+
#line 101 "gecode/flatzinc/lexer.lxx"
{ if (parseInt(yytext,yylval->iValue))
return FZ_INT_LIT;
else
···
YY_BREAK
case 9:
YY_RULE_SETUP
-
#line 110 "../gecode/flatzinc/lexer.lxx"
+
#line 110 "gecode/flatzinc/lexer.lxx"
{ yylval->dValue = strtod(yytext,NULL);
return FZ_FLOAT_LIT; }
YY_BREAK
case 10:
YY_RULE_SETUP
-
#line 112 "../gecode/flatzinc/lexer.lxx"
+
#line 112 "gecode/flatzinc/lexer.lxx"
{ yylval->dValue = strtod(yytext,NULL);
return FZ_FLOAT_LIT; }
YY_BREAK
case 11:
YY_RULE_SETUP
-
#line 114 "../gecode/flatzinc/lexer.lxx"
+
#line 114 "gecode/flatzinc/lexer.lxx"
{ yylval->dValue = strtod(yytext,NULL);
return FZ_FLOAT_LIT; }
YY_BREAK
case 12:
YY_RULE_SETUP
-
#line 116 "../gecode/flatzinc/lexer.lxx"
+
#line 116 "gecode/flatzinc/lexer.lxx"
{ return *yytext; }
YY_BREAK
case 13:
YY_RULE_SETUP
-
#line 117 "../gecode/flatzinc/lexer.lxx"
+
#line 117 "gecode/flatzinc/lexer.lxx"
{ return FZ_DOTDOT; }
YY_BREAK
case 14:
YY_RULE_SETUP
-
#line 118 "../gecode/flatzinc/lexer.lxx"
+
#line 118 "gecode/flatzinc/lexer.lxx"
{ return FZ_COLONCOLON; }
YY_BREAK
case 15:
YY_RULE_SETUP
-
#line 119 "../gecode/flatzinc/lexer.lxx"
+
#line 119 "gecode/flatzinc/lexer.lxx"
{ return FZ_ANNOTATION; }
YY_BREAK
case 16:
YY_RULE_SETUP
-
#line 120 "../gecode/flatzinc/lexer.lxx"
+
#line 120 "gecode/flatzinc/lexer.lxx"
{ return FZ_ANY; }
YY_BREAK
case 17:
YY_RULE_SETUP
-
#line 121 "../gecode/flatzinc/lexer.lxx"
+
#line 121 "gecode/flatzinc/lexer.lxx"
{ return FZ_ARRAY; }
YY_BREAK
case 18:
YY_RULE_SETUP
-
#line 122 "../gecode/flatzinc/lexer.lxx"
+
#line 122 "gecode/flatzinc/lexer.lxx"
{ return FZ_BOOL; }
YY_BREAK
case 19:
YY_RULE_SETUP
-
#line 123 "../gecode/flatzinc/lexer.lxx"
+
#line 123 "gecode/flatzinc/lexer.lxx"
{ return FZ_CASE; }
YY_BREAK
case 20:
YY_RULE_SETUP
-
#line 124 "../gecode/flatzinc/lexer.lxx"
+
#line 124 "gecode/flatzinc/lexer.lxx"
{ return FZ_CONSTRAINT; }
YY_BREAK
case 21:
YY_RULE_SETUP
-
#line 125 "../gecode/flatzinc/lexer.lxx"
+
#line 125 "gecode/flatzinc/lexer.lxx"
{ return FZ_DEFAULT; }
YY_BREAK
case 22:
YY_RULE_SETUP
-
#line 126 "../gecode/flatzinc/lexer.lxx"
+
#line 126 "gecode/flatzinc/lexer.lxx"
{ return FZ_ELSE; }
YY_BREAK
case 23:
YY_RULE_SETUP
-
#line 127 "../gecode/flatzinc/lexer.lxx"
+
#line 127 "gecode/flatzinc/lexer.lxx"
{ return FZ_ELSEIF; }
YY_BREAK
case 24:
YY_RULE_SETUP
-
#line 128 "../gecode/flatzinc/lexer.lxx"
+
#line 128 "gecode/flatzinc/lexer.lxx"
{ return FZ_ENDIF; }
YY_BREAK
case 25:
YY_RULE_SETUP
-
#line 129 "../gecode/flatzinc/lexer.lxx"
+
#line 129 "gecode/flatzinc/lexer.lxx"
{ return FZ_ENUM; }
YY_BREAK
case 26:
YY_RULE_SETUP
-
#line 130 "../gecode/flatzinc/lexer.lxx"
+
#line 130 "gecode/flatzinc/lexer.lxx"
{ return FZ_FLOAT; }
YY_BREAK
case 27:
YY_RULE_SETUP
-
#line 131 "../gecode/flatzinc/lexer.lxx"
+
#line 131 "gecode/flatzinc/lexer.lxx"
{ return FZ_FUNCTION; }
YY_BREAK
case 28:
YY_RULE_SETUP
-
#line 132 "../gecode/flatzinc/lexer.lxx"
+
#line 132 "gecode/flatzinc/lexer.lxx"
{ return FZ_IF; }
YY_BREAK
case 29:
YY_RULE_SETUP
-
#line 133 "../gecode/flatzinc/lexer.lxx"
+
#line 133 "gecode/flatzinc/lexer.lxx"
{ return FZ_INCLUDE; }
YY_BREAK
case 30:
YY_RULE_SETUP
-
#line 134 "../gecode/flatzinc/lexer.lxx"
+
#line 134 "gecode/flatzinc/lexer.lxx"
{ return FZ_INT; }
YY_BREAK
case 31:
YY_RULE_SETUP
-
#line 135 "../gecode/flatzinc/lexer.lxx"
+
#line 135 "gecode/flatzinc/lexer.lxx"
{ return FZ_LET; }
YY_BREAK
case 32:
YY_RULE_SETUP
-
#line 136 "../gecode/flatzinc/lexer.lxx"
+
#line 136 "gecode/flatzinc/lexer.lxx"
{ yylval->bValue = false; return FZ_MAXIMIZE; }
YY_BREAK
case 33:
YY_RULE_SETUP
-
#line 137 "../gecode/flatzinc/lexer.lxx"
+
#line 137 "gecode/flatzinc/lexer.lxx"
{ yylval->bValue = true; return FZ_MINIMIZE; }
YY_BREAK
case 34:
YY_RULE_SETUP
-
#line 138 "../gecode/flatzinc/lexer.lxx"
+
#line 138 "gecode/flatzinc/lexer.lxx"
{ return FZ_OF; }
YY_BREAK
case 35:
YY_RULE_SETUP
-
#line 139 "../gecode/flatzinc/lexer.lxx"
+
#line 139 "gecode/flatzinc/lexer.lxx"
{ return FZ_SATISFY; }
YY_BREAK
case 36:
YY_RULE_SETUP
-
#line 140 "../gecode/flatzinc/lexer.lxx"
+
#line 140 "gecode/flatzinc/lexer.lxx"
{ return FZ_OUTPUT; }
YY_BREAK
case 37:
YY_RULE_SETUP
-
#line 141 "../gecode/flatzinc/lexer.lxx"
+
#line 141 "gecode/flatzinc/lexer.lxx"
{ yylval->bValue = false; return FZ_PAR; }
YY_BREAK
case 38:
YY_RULE_SETUP
-
#line 142 "../gecode/flatzinc/lexer.lxx"
+
#line 142 "gecode/flatzinc/lexer.lxx"
{ return FZ_PREDICATE; }
YY_BREAK
case 39:
YY_RULE_SETUP
-
#line 143 "../gecode/flatzinc/lexer.lxx"
+
#line 143 "gecode/flatzinc/lexer.lxx"
{ return FZ_RECORD; }
YY_BREAK
case 40:
YY_RULE_SETUP
-
#line 144 "../gecode/flatzinc/lexer.lxx"
+
#line 144 "gecode/flatzinc/lexer.lxx"
{ return FZ_SET; }
YY_BREAK
case 41:
YY_RULE_SETUP
-
#line 145 "../gecode/flatzinc/lexer.lxx"
+
#line 145 "gecode/flatzinc/lexer.lxx"
{ return FZ_SHOWCOND; }
YY_BREAK
case 42:
YY_RULE_SETUP
-
#line 146 "../gecode/flatzinc/lexer.lxx"
+
#line 146 "gecode/flatzinc/lexer.lxx"
{ return FZ_SHOW; }
YY_BREAK
case 43:
YY_RULE_SETUP
-
#line 147 "../gecode/flatzinc/lexer.lxx"
+
#line 147 "gecode/flatzinc/lexer.lxx"
{ return FZ_SOLVE; }
YY_BREAK
case 44:
YY_RULE_SETUP
-
#line 148 "../gecode/flatzinc/lexer.lxx"
+
#line 148 "gecode/flatzinc/lexer.lxx"
{ return FZ_STRING; }
YY_BREAK
case 45:
YY_RULE_SETUP
-
#line 149 "../gecode/flatzinc/lexer.lxx"
+
#line 149 "gecode/flatzinc/lexer.lxx"
{ return FZ_TEST; }
YY_BREAK
case 46:
YY_RULE_SETUP
-
#line 150 "../gecode/flatzinc/lexer.lxx"
+
#line 150 "gecode/flatzinc/lexer.lxx"
{ return FZ_THEN; }
YY_BREAK
case 47:
YY_RULE_SETUP
-
#line 151 "../gecode/flatzinc/lexer.lxx"
+
#line 151 "gecode/flatzinc/lexer.lxx"
{ return FZ_TUPLE; }
YY_BREAK
case 48:
YY_RULE_SETUP
-
#line 152 "../gecode/flatzinc/lexer.lxx"
+
#line 152 "gecode/flatzinc/lexer.lxx"
{ return FZ_TYPE; }
YY_BREAK
case 49:
YY_RULE_SETUP
-
#line 153 "../gecode/flatzinc/lexer.lxx"
+
#line 153 "gecode/flatzinc/lexer.lxx"
{ yylval->bValue = true; return FZ_VAR; }
YY_BREAK
case 50:
YY_RULE_SETUP
-
#line 154 "../gecode/flatzinc/lexer.lxx"
+
#line 154 "gecode/flatzinc/lexer.lxx"
{ return FZ_VARIANT_RECORD; }
YY_BREAK
case 51:
YY_RULE_SETUP
-
#line 155 "../gecode/flatzinc/lexer.lxx"
+
#line 155 "gecode/flatzinc/lexer.lxx"
{ return FZ_WHERE; }
YY_BREAK
case 52:
YY_RULE_SETUP
-
#line 156 "../gecode/flatzinc/lexer.lxx"
+
#line 156 "gecode/flatzinc/lexer.lxx"
{ yylval->sValue = strdup(yytext); return FZ_ID; }
YY_BREAK
case 53:
YY_RULE_SETUP
-
#line 157 "../gecode/flatzinc/lexer.lxx"
+
#line 157 "gecode/flatzinc/lexer.lxx"
{ yylval->sValue = strdup(yytext); return FZ_U_ID; }
YY_BREAK
case 54:
YY_RULE_SETUP
-
#line 158 "../gecode/flatzinc/lexer.lxx"
+
#line 158 "gecode/flatzinc/lexer.lxx"
yylval->sValue = strdup(yytext+1);
yylval->sValue[strlen(yytext)-2] = 0;
···
YY_BREAK
case 55:
YY_RULE_SETUP
-
#line 162 "../gecode/flatzinc/lexer.lxx"
+
#line 162 "gecode/flatzinc/lexer.lxx"
{ yyerror("Unknown character"); }
YY_BREAK
case 56:
YY_RULE_SETUP
-
#line 163 "../gecode/flatzinc/lexer.lxx"
+
#line 163 "gecode/flatzinc/lexer.lxx"
ECHO;
YY_BREAK
#line 1325 "gecode/flatzinc/lexer.yy.cpp"
···
#define YYTABLES_NAME "yytables"
-
#line 163 "../gecode/flatzinc/lexer.lxx"
+
#line 163 "gecode/flatzinc/lexer.lxx"
int yy_input_proc(char* buf, int size, yyscan_t yyscanner) {
Gecode::FlatZinc::ParserState* parm =
+1
gecode/flatzinc/parser.hh
···
std::vector<ConExpr*> domainConstraints;
int status_idx = -1;
+
int complete_idx = -1;
std::vector<std::array<int, 3>> int_uniform;
std::vector<std::array<int, 2>> int_sol;
std::vector<std::array<int, 2>> int_lastval;
+309 -288
gecode/flatzinc/parser.tab.cpp
···
-
/* A Bison parser, made by GNU Bison 3.7.2. */
+
/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison implementation for Yacc-like parsers in C
-
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
Inc.
This program is free software: you can redistribute it and/or modify
···
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-
along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
···
define necessary library symbols; they are noted "INFRINGES ON
USER NAME SPACE" below. */
-
/* Identify Bison output. */
-
#define YYBISON 1
+
/* Identify Bison output, and Bison version. */
+
#define YYBISON 30706
-
/* Bison version. */
-
#define YYBISON_VERSION "3.7.2"
+
/* Bison version string. */
+
#define YYBISON_VERSION "3.7.6"
/* Skeleton name. */
#define YYSKELETON_NAME "yacc.c"
···
/* First part of user prologue. */
-
#line 37 "../gecode/flatzinc/parser.yxx"
+
#line 37 "gecode/flatzinc/parser.yxx"
#define YYPARSE_PARAM parm
#define YYLEX_PARAM static_cast<ParserState*>(parm)->yyscanner
#include <gecode/flatzinc.hh>
#include <gecode/flatzinc/parser.hh>
#include <gecode/flatzinc/lastval.hh>
+
#include <gecode/flatzinc/complete.hh>
#include <iostream>
#include <fstream>
···
pp->fg->restart_status = IntVarArray(*(pp->fg), 1);
pp->fg->restart_status[0] = pp->fg->iv[pp->status_idx];
}
+
if (pp->complete_idx >= 0) {
+
pp->fg->restart_complete = BoolVarArray(*(pp->fg), 1);
+
pp->fg->restart_complete[0] = pp->fg->bv[pp->complete_idx];
+
pp->fg->complete_marker = std::make_shared<bool>(false);
+
Complete::post(*(pp->fg), pp->fg->restart_complete[0], pp->fg->complete_marker);
+
}
if (!(pp->int_uniform.empty())) {
pp->fg->int_uniform_var = IntVarArray(*(pp->fg), pp->int_uniform.size());
pp->fg->int_uniform_lb = new int[pp->int_uniform.size()];
···
}}
-
#line 536 "gecode/flatzinc/parser.tab.cpp"
+
#line 543 "gecode/flatzinc/parser.tab.cpp"
# ifndef YY_CAST
# ifdef __cplusplus
···
typedef short yytype_int16;
#endif
+
/* Work around bug in HP-UX 11.23, which defines these macros
+
incorrectly for preprocessor constants. This workaround can likely
+
be removed in 2023, as HPE has promised support for HP-UX 11.23
+
(aka HP-UX 11i v2) only through the end of 2022; see Table 2 of
+
<https://h20195.www2.hpe.com/V2/getpdf.aspx/4AA4-7673ENW.pdf>. */
+
#ifdef __hpux
+
# undef UINT_LEAST8_MAX
+
# undef UINT_LEAST16_MAX
+
# define UINT_LEAST8_MAX 255
+
# define UINT_LEAST16_MAX 65535
+
#endif
+
#if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__
typedef __UINT_LEAST8_TYPE__ yytype_uint8;
#elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \
···
/* Suppress unused-variable warnings by "using" E. */
#if ! defined lint || defined __GNUC__
-
# define YYUSE(E) ((void) (E))
+
# define YY_USE(E) ((void) (E))
#else
-
# define YYUSE(E) /* empty */
+
# define YY_USE(E) /* empty */
#endif
#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
···
/* YYRLINE[YYN] -- Source line where rule number YYN was defined. */
static const yytype_int16 yyrline[] =
-
0, 604, 604, 606, 608, 611, 612, 614, 616, 619,
-
620, 622, 624, 627, 628, 635, 638, 640, 643, 644,
-
647, 651, 652, 653, 654, 657, 659, 661, 662, 665,
-
666, 669, 670, 676, 676, 679, 711, 743, 782, 815,
-
824, 834, 843, 855, 925, 991, 1062, 1130, 1151, 1171,
-
1191, 1214, 1218, 1233, 1257, 1258, 1262, 1264, 1267, 1267,
-
1269, 1273, 1275, 1290, 1313, 1314, 1318, 1320, 1324, 1328,
-
1330, 1345, 1368, 1369, 1373, 1375, 1378, 1381, 1383, 1398,
-
1421, 1422, 1426, 1428, 1431, 1436, 1437, 1442, 1443, 1448,
-
1449, 1454, 1455, 1459, 1583, 1597, 1622, 1624, 1626, 1632,
-
1634, 1647, 1649, 1658, 1660, 1667, 1668, 1672, 1674, 1679,
-
1680, 1684, 1686, 1691, 1692, 1696, 1698, 1703, 1704, 1708,
-
1710, 1718, 1720, 1724, 1726, 1731, 1732, 1736, 1738, 1740,
-
1742, 1744, 1840, 1855, 1856, 1860, 1862, 1870, 1904, 1911,
-
1918, 1944, 1945, 1953, 1954, 1958, 1960, 1964, 1968, 1972,
-
1974, 1978, 1980, 1982, 1985, 1985, 1988, 1990, 1992, 1994,
-
1996, 2102, 2113
+
0, 611, 611, 613, 615, 618, 619, 621, 623, 626,
+
627, 629, 631, 634, 635, 642, 645, 647, 650, 651,
+
654, 658, 659, 660, 661, 664, 666, 668, 669, 672,
+
673, 676, 677, 683, 683, 686, 718, 750, 789, 822,
+
831, 841, 850, 862, 932, 998, 1069, 1137, 1158, 1178,
+
1198, 1221, 1225, 1240, 1264, 1265, 1269, 1271, 1274, 1274,
+
1276, 1280, 1282, 1297, 1320, 1321, 1325, 1327, 1331, 1335,
+
1337, 1352, 1375, 1376, 1380, 1382, 1385, 1388, 1390, 1405,
+
1428, 1429, 1433, 1435, 1438, 1443, 1444, 1449, 1450, 1455,
+
1456, 1461, 1462, 1466, 1592, 1606, 1631, 1633, 1635, 1641,
+
1643, 1656, 1658, 1667, 1669, 1676, 1677, 1681, 1683, 1688,
+
1689, 1693, 1695, 1700, 1701, 1705, 1707, 1712, 1713, 1717,
+
1719, 1727, 1729, 1733, 1735, 1740, 1741, 1745, 1747, 1749,
+
1751, 1753, 1849, 1864, 1865, 1869, 1871, 1879, 1913, 1920,
+
1927, 1953, 1954, 1962, 1963, 1967, 1969, 1973, 1977, 1981,
+
1983, 1987, 1989, 1991, 1994, 1994, 1997, 1999, 2001, 2003,
+
2005, 2111, 2122
};
#endif
···
/* YYDEFGOTO[NTERM-NUM]. */
static const yytype_int16 yydefgoto[] =
-
-1, 2, 3, 4, 14, 15, 36, 37, 5, 48,
+
0, 2, 3, 4, 14, 15, 36, 37, 5, 48,
49, 50, 51, 52, 109, 110, 143, 16, 283, 284,
285, 83, 267, 293, 294, 295, 271, 288, 289, 290,
269, 323, 324, 325, 304, 256, 258, 260, 280, 38,
···
yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, void *parm)
FILE *yyoutput = yyo;
-
YYUSE (yyoutput);
-
YYUSE (parm);
+
YY_USE (yyoutput);
+
YY_USE (parm);
if (!yyvaluep)
return;
# ifdef YYPRINT
···
YYPRINT (yyo, yytoknum[yykind], *yyvaluep);
# endif
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-
YYUSE (yykind);
+
YY_USE (yykind);
YY_IGNORE_MAYBE_UNINITIALIZED_END
···
yydestruct (const char *yymsg,
yysymbol_kind_t yykind, YYSTYPE *yyvaluep, void *parm)
-
YYUSE (yyvaluep);
-
YYUSE (parm);
+
YY_USE (yyvaluep);
+
YY_USE (parm);
if (!yymsg)
yymsg = "Deleting";
YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp);
YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
-
YYUSE (yykind);
+
YY_USE (yykind);
YY_IGNORE_MAYBE_UNINITIALIZED_END
···
switch (yyn)
case 15: /* preddecl_item: FZ_PREDICATE FZ_ID '(' pred_arg_list ')' */
-
#line 636 "../gecode/flatzinc/parser.yxx"
+
#line 643 "gecode/flatzinc/parser.yxx"
{ free((yyvsp[-3].sValue)); }
-
#line 2180 "gecode/flatzinc/parser.tab.cpp"
+
#line 2199 "gecode/flatzinc/parser.tab.cpp"
break;
case 20: /* pred_arg: pred_arg_type ':' FZ_ID */
-
#line 648 "../gecode/flatzinc/parser.yxx"
+
#line 655 "gecode/flatzinc/parser.yxx"
{ free((yyvsp[0].sValue)); }
-
#line 2186 "gecode/flatzinc/parser.tab.cpp"
+
#line 2205 "gecode/flatzinc/parser.tab.cpp"
break;
case 25: /* pred_arg_simple_type: int_ti_expr_tail */
-
#line 658 "../gecode/flatzinc/parser.yxx"
+
#line 665 "gecode/flatzinc/parser.yxx"
{ if ((yyvsp[0].oSet)()) delete (yyvsp[0].oSet).some(); }
-
#line 2192 "gecode/flatzinc/parser.tab.cpp"
+
#line 2211 "gecode/flatzinc/parser.tab.cpp"
break;
case 26: /* pred_arg_simple_type: FZ_SET FZ_OF int_ti_expr_tail */
-
#line 660 "../gecode/flatzinc/parser.yxx"
+
#line 667 "gecode/flatzinc/parser.yxx"
{ if ((yyvsp[0].oSet)()) delete (yyvsp[0].oSet).some(); }
-
#line 2198 "gecode/flatzinc/parser.tab.cpp"
+
#line 2217 "gecode/flatzinc/parser.tab.cpp"
break;
case 35: /* vardecl_item: FZ_VAR int_ti_expr_tail ':' var_par_id annotations non_array_expr_opt */
-
#line 680 "../gecode/flatzinc/parser.yxx"
+
#line 687 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
bool print = (yyvsp[-1].argVec) != NULL && (yyvsp[-1].argVec)->hasAtom("output_var");
···
delete (yyvsp[-1].argVec); free((yyvsp[-2].sValue));
-
#line 2234 "gecode/flatzinc/parser.tab.cpp"
+
#line 2253 "gecode/flatzinc/parser.tab.cpp"
break;
case 36: /* vardecl_item: FZ_VAR bool_ti_expr_tail ':' var_par_id annotations non_array_expr_opt */
-
#line 712 "../gecode/flatzinc/parser.yxx"
+
#line 719 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
bool print = (yyvsp[-1].argVec) != NULL && (yyvsp[-1].argVec)->hasAtom("output_var");
···
delete (yyvsp[-1].argVec); free((yyvsp[-2].sValue));
-
#line 2270 "gecode/flatzinc/parser.tab.cpp"
+
#line 2289 "gecode/flatzinc/parser.tab.cpp"
break;
case 37: /* vardecl_item: FZ_VAR float_ti_expr_tail ':' var_par_id annotations non_array_expr_opt */
-
#line 744 "../gecode/flatzinc/parser.yxx"
+
#line 751 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
bool print = (yyvsp[-1].argVec) != NULL && (yyvsp[-1].argVec)->hasAtom("output_var");
···
delete (yyvsp[-1].argVec); free((yyvsp[-2].sValue));
-
#line 2313 "gecode/flatzinc/parser.tab.cpp"
+
#line 2332 "gecode/flatzinc/parser.tab.cpp"
break;
case 38: /* vardecl_item: FZ_VAR FZ_SET FZ_OF int_ti_expr_tail ':' var_par_id annotations non_array_expr_opt */
-
#line 783 "../gecode/flatzinc/parser.yxx"
+
#line 790 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
bool print = (yyvsp[-1].argVec) != NULL && (yyvsp[-1].argVec)->hasAtom("output_var");
···
delete (yyvsp[-1].argVec); free((yyvsp[-2].sValue));
-
#line 2350 "gecode/flatzinc/parser.tab.cpp"
+
#line 2369 "gecode/flatzinc/parser.tab.cpp"
break;
case 39: /* vardecl_item: FZ_INT ':' var_par_id annotations '=' non_array_expr */
-
#line 816 "../gecode/flatzinc/parser.yxx"
+
#line 823 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
yyassert(pp, (yyvsp[0].arg)->isInt(), "Invalid int initializer");
···
"Duplicate symbol");
delete (yyvsp[-2].argVec); free((yyvsp[-3].sValue));
-
#line 2363 "gecode/flatzinc/parser.tab.cpp"
+
#line 2382 "gecode/flatzinc/parser.tab.cpp"
break;
case 40: /* vardecl_item: FZ_FLOAT ':' var_par_id annotations '=' non_array_expr */
-
#line 825 "../gecode/flatzinc/parser.yxx"
+
#line 832 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
yyassert(pp, (yyvsp[0].arg)->isFloat(), "Invalid float initializer");
···
"Duplicate symbol");
delete (yyvsp[-2].argVec); free((yyvsp[-3].sValue));
-
#line 2377 "gecode/flatzinc/parser.tab.cpp"
+
#line 2396 "gecode/flatzinc/parser.tab.cpp"
break;
case 41: /* vardecl_item: FZ_BOOL ':' var_par_id annotations '=' non_array_expr */
-
#line 835 "../gecode/flatzinc/parser.yxx"
+
#line 842 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
yyassert(pp, (yyvsp[0].arg)->isBool(), "Invalid bool initializer");
···
"Duplicate symbol");
delete (yyvsp[-2].argVec); free((yyvsp[-3].sValue));
-
#line 2390 "gecode/flatzinc/parser.tab.cpp"
+
#line 2409 "gecode/flatzinc/parser.tab.cpp"
break;
case 42: /* vardecl_item: FZ_SET FZ_OF FZ_INT ':' var_par_id annotations '=' non_array_expr */
-
#line 844 "../gecode/flatzinc/parser.yxx"
+
#line 851 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
yyassert(pp, (yyvsp[0].arg)->isSet(), "Invalid set initializer");
···
delete set;
delete (yyvsp[-2].argVec); free((yyvsp[-3].sValue));
-
#line 2406 "gecode/flatzinc/parser.tab.cpp"
+
#line 2425 "gecode/flatzinc/parser.tab.cpp"
break;
case 43: /* vardecl_item: FZ_ARRAY '[' FZ_INT_LIT FZ_DOTDOT FZ_INT_LIT ']' FZ_OF FZ_VAR int_ti_expr_tail ':' var_par_id annotations vardecl_int_var_array_init */
-
#line 857 "../gecode/flatzinc/parser.yxx"
+
#line 864 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
yyassert(pp, (yyvsp[-10].iValue)==1, "Arrays must start at 1");
···
delete (yyvsp[-1].argVec); free((yyvsp[-2].sValue));
-
#line 2479 "gecode/flatzinc/parser.tab.cpp"
+
#line 2498 "gecode/flatzinc/parser.tab.cpp"
break;
case 44: /* vardecl_item: FZ_ARRAY '[' FZ_INT_LIT FZ_DOTDOT FZ_INT_LIT ']' FZ_OF FZ_VAR bool_ti_expr_tail ':' var_par_id annotations vardecl_bool_var_array_init */
-
#line 927 "../gecode/flatzinc/parser.yxx"
+
#line 934 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
bool print = (yyvsp[-1].argVec) != NULL && (yyvsp[-1].argVec)->hasCall("output_array");
···
delete (yyvsp[-1].argVec); free((yyvsp[-2].sValue));
-
#line 2548 "gecode/flatzinc/parser.tab.cpp"
+
#line 2567 "gecode/flatzinc/parser.tab.cpp"
break;
case 45: /* vardecl_item: FZ_ARRAY '[' FZ_INT_LIT FZ_DOTDOT FZ_INT_LIT ']' FZ_OF FZ_VAR float_ti_expr_tail ':' var_par_id annotations vardecl_float_var_array_init */
-
#line 994 "../gecode/flatzinc/parser.yxx"
+
#line 1001 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
yyassert(pp, (yyvsp[-10].iValue)==1, "Arrays must start at 1");
···
if ((yyvsp[-4].oPFloat)()) delete (yyvsp[-4].oPFloat).some();
delete (yyvsp[-1].argVec); free((yyvsp[-2].sValue));
-
#line 2621 "gecode/flatzinc/parser.tab.cpp"
+
#line 2640 "gecode/flatzinc/parser.tab.cpp"
break;
case 46: /* vardecl_item: FZ_ARRAY '[' FZ_INT_LIT FZ_DOTDOT FZ_INT_LIT ']' FZ_OF FZ_VAR FZ_SET FZ_OF int_ti_expr_tail ':' var_par_id annotations vardecl_set_var_array_init */
-
#line 1064 "../gecode/flatzinc/parser.yxx"
+
#line 1071 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
bool print = (yyvsp[-1].argVec) != NULL && (yyvsp[-1].argVec)->hasCall("output_array");
···
delete (yyvsp[-1].argVec); free((yyvsp[-2].sValue));
-
#line 2692 "gecode/flatzinc/parser.tab.cpp"
+
#line 2711 "gecode/flatzinc/parser.tab.cpp"
break;
case 47: /* vardecl_item: FZ_ARRAY '[' FZ_INT_LIT FZ_DOTDOT FZ_INT_LIT ']' FZ_OF FZ_INT ':' var_par_id annotations '=' '[' int_list ']' */
-
#line 1132 "../gecode/flatzinc/parser.yxx"
+
#line 1139 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
yyassert(pp, (yyvsp[-12].iValue)==1, "Arrays must start at 1");
···
free((yyvsp[-5].sValue));
delete (yyvsp[-4].argVec);
-
#line 2716 "gecode/flatzinc/parser.tab.cpp"
+
#line 2735 "gecode/flatzinc/parser.tab.cpp"
break;
case 48: /* vardecl_item: FZ_ARRAY '[' FZ_INT_LIT FZ_DOTDOT FZ_INT_LIT ']' FZ_OF FZ_BOOL ':' var_par_id annotations '=' '[' bool_list ']' */
-
#line 1153 "../gecode/flatzinc/parser.yxx"
+
#line 1160 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
yyassert(pp, (yyvsp[-12].iValue)==1, "Arrays must start at 1");
···
free((yyvsp[-5].sValue));
delete (yyvsp[-4].argVec);
-
#line 2739 "gecode/flatzinc/parser.tab.cpp"
+
#line 2758 "gecode/flatzinc/parser.tab.cpp"
break;
case 49: /* vardecl_item: FZ_ARRAY '[' FZ_INT_LIT FZ_DOTDOT FZ_INT_LIT ']' FZ_OF FZ_FLOAT ':' var_par_id annotations '=' '[' float_list ']' */
-
#line 1173 "../gecode/flatzinc/parser.yxx"
+
#line 1180 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
yyassert(pp, (yyvsp[-12].iValue)==1, "Arrays must start at 1");
···
delete (yyvsp[-1].floatSetValue);
delete (yyvsp[-4].argVec); free((yyvsp[-5].sValue));
-
#line 2762 "gecode/flatzinc/parser.tab.cpp"
+
#line 2781 "gecode/flatzinc/parser.tab.cpp"
break;
case 50: /* vardecl_item: FZ_ARRAY '[' FZ_INT_LIT FZ_DOTDOT FZ_INT_LIT ']' FZ_OF FZ_SET FZ_OF FZ_INT ':' var_par_id annotations '=' '[' set_literal_list ']' */
-
#line 1193 "../gecode/flatzinc/parser.yxx"
+
#line 1200 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
yyassert(pp, (yyvsp[-14].iValue)==1, "Arrays must start at 1");
···
delete (yyvsp[-1].setValueList);
delete (yyvsp[-4].argVec); free((yyvsp[-5].sValue));
-
#line 2786 "gecode/flatzinc/parser.tab.cpp"
+
#line 2805 "gecode/flatzinc/parser.tab.cpp"
break;
case 51: /* int_init: FZ_INT_LIT */
-
#line 1215 "../gecode/flatzinc/parser.yxx"
+
#line 1222 "gecode/flatzinc/parser.yxx"
(yyval.varSpec) = new IntVarSpec((yyvsp[0].iValue),false,false);
-
#line 2794 "gecode/flatzinc/parser.tab.cpp"
+
#line 2813 "gecode/flatzinc/parser.tab.cpp"
break;
case 52: /* int_init: var_par_id */
-
#line 1219 "../gecode/flatzinc/parser.yxx"
+
#line 1226 "gecode/flatzinc/parser.yxx"
SymbolEntry e;
ParserState* pp = static_cast<ParserState*>(parm);
···
free((yyvsp[0].sValue));
-
#line 2813 "gecode/flatzinc/parser.tab.cpp"
+
#line 2832 "gecode/flatzinc/parser.tab.cpp"
break;
case 53: /* int_init: var_par_id '[' FZ_INT_LIT ']' */
-
#line 1234 "../gecode/flatzinc/parser.yxx"
+
#line 1241 "gecode/flatzinc/parser.yxx"
vector<int> v;
SymbolEntry e;
···
free((yyvsp[-3].sValue));
-
#line 2838 "gecode/flatzinc/parser.tab.cpp"
+
#line 2857 "gecode/flatzinc/parser.tab.cpp"
break;
case 54: /* int_init_list: %empty */
-
#line 1257 "../gecode/flatzinc/parser.yxx"
+
#line 1264 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = new vector<VarSpec*>(0); }
-
#line 2844 "gecode/flatzinc/parser.tab.cpp"
+
#line 2863 "gecode/flatzinc/parser.tab.cpp"
break;
case 55: /* int_init_list: int_init_list_head list_tail */
-
#line 1259 "../gecode/flatzinc/parser.yxx"
+
#line 1266 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-1].varSpecVec); }
-
#line 2850 "gecode/flatzinc/parser.tab.cpp"
+
#line 2869 "gecode/flatzinc/parser.tab.cpp"
break;
case 56: /* int_init_list_head: int_init */
-
#line 1263 "../gecode/flatzinc/parser.yxx"
+
#line 1270 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = new vector<VarSpec*>(1); (*(yyval.varSpecVec))[0] = (yyvsp[0].varSpec); }
-
#line 2856 "gecode/flatzinc/parser.tab.cpp"
+
#line 2875 "gecode/flatzinc/parser.tab.cpp"
break;
case 57: /* int_init_list_head: int_init_list_head ',' int_init */
-
#line 1265 "../gecode/flatzinc/parser.yxx"
+
#line 1272 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-2].varSpecVec); (yyval.varSpecVec)->push_back((yyvsp[0].varSpec)); }
-
#line 2862 "gecode/flatzinc/parser.tab.cpp"
+
#line 2881 "gecode/flatzinc/parser.tab.cpp"
break;
case 60: /* int_var_array_literal: '[' int_init_list ']' */
-
#line 1270 "../gecode/flatzinc/parser.yxx"
+
#line 1277 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-1].varSpecVec); }
-
#line 2868 "gecode/flatzinc/parser.tab.cpp"
+
#line 2887 "gecode/flatzinc/parser.tab.cpp"
break;
case 61: /* float_init: FZ_FLOAT_LIT */
-
#line 1274 "../gecode/flatzinc/parser.yxx"
+
#line 1281 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpec) = new FloatVarSpec((yyvsp[0].dValue),false,false); }
-
#line 2874 "gecode/flatzinc/parser.tab.cpp"
+
#line 2893 "gecode/flatzinc/parser.tab.cpp"
break;
case 62: /* float_init: var_par_id */
-
#line 1276 "../gecode/flatzinc/parser.yxx"
+
#line 1283 "gecode/flatzinc/parser.yxx"
SymbolEntry e;
ParserState* pp = static_cast<ParserState*>(parm);
···
free((yyvsp[0].sValue));
-
#line 2893 "gecode/flatzinc/parser.tab.cpp"
+
#line 2912 "gecode/flatzinc/parser.tab.cpp"
break;
case 63: /* float_init: var_par_id '[' FZ_INT_LIT ']' */
-
#line 1291 "../gecode/flatzinc/parser.yxx"
+
#line 1298 "gecode/flatzinc/parser.yxx"
SymbolEntry e;
ParserState* pp = static_cast<ParserState*>(parm);
···
free((yyvsp[-3].sValue));
-
#line 2917 "gecode/flatzinc/parser.tab.cpp"
+
#line 2936 "gecode/flatzinc/parser.tab.cpp"
break;
case 64: /* float_init_list: %empty */
-
#line 1313 "../gecode/flatzinc/parser.yxx"
+
#line 1320 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = new vector<VarSpec*>(0); }
-
#line 2923 "gecode/flatzinc/parser.tab.cpp"
+
#line 2942 "gecode/flatzinc/parser.tab.cpp"
break;
case 65: /* float_init_list: float_init_list_head list_tail */
-
#line 1315 "../gecode/flatzinc/parser.yxx"
+
#line 1322 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-1].varSpecVec); }
-
#line 2929 "gecode/flatzinc/parser.tab.cpp"
+
#line 2948 "gecode/flatzinc/parser.tab.cpp"
break;
case 66: /* float_init_list_head: float_init */
-
#line 1319 "../gecode/flatzinc/parser.yxx"
+
#line 1326 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = new vector<VarSpec*>(1); (*(yyval.varSpecVec))[0] = (yyvsp[0].varSpec); }
-
#line 2935 "gecode/flatzinc/parser.tab.cpp"
+
#line 2954 "gecode/flatzinc/parser.tab.cpp"
break;
case 67: /* float_init_list_head: float_init_list_head ',' float_init */
-
#line 1321 "../gecode/flatzinc/parser.yxx"
+
#line 1328 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-2].varSpecVec); (yyval.varSpecVec)->push_back((yyvsp[0].varSpec)); }
-
#line 2941 "gecode/flatzinc/parser.tab.cpp"
+
#line 2960 "gecode/flatzinc/parser.tab.cpp"
break;
case 68: /* float_var_array_literal: '[' float_init_list ']' */
-
#line 1325 "../gecode/flatzinc/parser.yxx"
+
#line 1332 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-1].varSpecVec); }
-
#line 2947 "gecode/flatzinc/parser.tab.cpp"
+
#line 2966 "gecode/flatzinc/parser.tab.cpp"
break;
case 69: /* bool_init: FZ_BOOL_LIT */
-
#line 1329 "../gecode/flatzinc/parser.yxx"
+
#line 1336 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpec) = new BoolVarSpec((yyvsp[0].iValue),false,false); }
-
#line 2953 "gecode/flatzinc/parser.tab.cpp"
+
#line 2972 "gecode/flatzinc/parser.tab.cpp"
break;
case 70: /* bool_init: var_par_id */
-
#line 1331 "../gecode/flatzinc/parser.yxx"
+
#line 1338 "gecode/flatzinc/parser.yxx"
SymbolEntry e;
ParserState* pp = static_cast<ParserState*>(parm);
···
free((yyvsp[0].sValue));
-
#line 2972 "gecode/flatzinc/parser.tab.cpp"
+
#line 2991 "gecode/flatzinc/parser.tab.cpp"
break;
case 71: /* bool_init: var_par_id '[' FZ_INT_LIT ']' */
-
#line 1346 "../gecode/flatzinc/parser.yxx"
+
#line 1353 "gecode/flatzinc/parser.yxx"
SymbolEntry e;
ParserState* pp = static_cast<ParserState*>(parm);
···
free((yyvsp[-3].sValue));
-
#line 2996 "gecode/flatzinc/parser.tab.cpp"
+
#line 3015 "gecode/flatzinc/parser.tab.cpp"
break;
case 72: /* bool_init_list: %empty */
-
#line 1368 "../gecode/flatzinc/parser.yxx"
+
#line 1375 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = new vector<VarSpec*>(0); }
-
#line 3002 "gecode/flatzinc/parser.tab.cpp"
+
#line 3021 "gecode/flatzinc/parser.tab.cpp"
break;
case 73: /* bool_init_list: bool_init_list_head list_tail */
-
#line 1370 "../gecode/flatzinc/parser.yxx"
+
#line 1377 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-1].varSpecVec); }
-
#line 3008 "gecode/flatzinc/parser.tab.cpp"
+
#line 3027 "gecode/flatzinc/parser.tab.cpp"
break;
case 74: /* bool_init_list_head: bool_init */
-
#line 1374 "../gecode/flatzinc/parser.yxx"
+
#line 1381 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = new vector<VarSpec*>(1); (*(yyval.varSpecVec))[0] = (yyvsp[0].varSpec); }
-
#line 3014 "gecode/flatzinc/parser.tab.cpp"
+
#line 3033 "gecode/flatzinc/parser.tab.cpp"
break;
case 75: /* bool_init_list_head: bool_init_list_head ',' bool_init */
-
#line 1376 "../gecode/flatzinc/parser.yxx"
+
#line 1383 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-2].varSpecVec); (yyval.varSpecVec)->push_back((yyvsp[0].varSpec)); }
-
#line 3020 "gecode/flatzinc/parser.tab.cpp"
+
#line 3039 "gecode/flatzinc/parser.tab.cpp"
break;
case 76: /* bool_var_array_literal: '[' bool_init_list ']' */
-
#line 1378 "../gecode/flatzinc/parser.yxx"
+
#line 1385 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-1].varSpecVec); }
-
#line 3026 "gecode/flatzinc/parser.tab.cpp"
+
#line 3045 "gecode/flatzinc/parser.tab.cpp"
break;
case 77: /* set_init: set_literal */
-
#line 1382 "../gecode/flatzinc/parser.yxx"
+
#line 1389 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpec) = new SetVarSpec((yyvsp[0].setLit),false,false); }
-
#line 3032 "gecode/flatzinc/parser.tab.cpp"
+
#line 3051 "gecode/flatzinc/parser.tab.cpp"
break;
case 78: /* set_init: var_par_id */
-
#line 1384 "../gecode/flatzinc/parser.yxx"
+
#line 1391 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
SymbolEntry e;
···
free((yyvsp[0].sValue));
-
#line 3051 "gecode/flatzinc/parser.tab.cpp"
+
#line 3070 "gecode/flatzinc/parser.tab.cpp"
break;
case 79: /* set_init: var_par_id '[' FZ_INT_LIT ']' */
-
#line 1399 "../gecode/flatzinc/parser.yxx"
+
#line 1406 "gecode/flatzinc/parser.yxx"
SymbolEntry e;
ParserState* pp = static_cast<ParserState*>(parm);
···
free((yyvsp[-3].sValue));
-
#line 3075 "gecode/flatzinc/parser.tab.cpp"
+
#line 3094 "gecode/flatzinc/parser.tab.cpp"
break;
case 80: /* set_init_list: %empty */
-
#line 1421 "../gecode/flatzinc/parser.yxx"
+
#line 1428 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = new vector<VarSpec*>(0); }
-
#line 3081 "gecode/flatzinc/parser.tab.cpp"
+
#line 3100 "gecode/flatzinc/parser.tab.cpp"
break;
case 81: /* set_init_list: set_init_list_head list_tail */
-
#line 1423 "../gecode/flatzinc/parser.yxx"
+
#line 1430 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-1].varSpecVec); }
-
#line 3087 "gecode/flatzinc/parser.tab.cpp"
+
#line 3106 "gecode/flatzinc/parser.tab.cpp"
break;
case 82: /* set_init_list_head: set_init */
-
#line 1427 "../gecode/flatzinc/parser.yxx"
+
#line 1434 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = new vector<VarSpec*>(1); (*(yyval.varSpecVec))[0] = (yyvsp[0].varSpec); }
-
#line 3093 "gecode/flatzinc/parser.tab.cpp"
+
#line 3112 "gecode/flatzinc/parser.tab.cpp"
break;
case 83: /* set_init_list_head: set_init_list_head ',' set_init */
-
#line 1429 "../gecode/flatzinc/parser.yxx"
+
#line 1436 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-2].varSpecVec); (yyval.varSpecVec)->push_back((yyvsp[0].varSpec)); }
-
#line 3099 "gecode/flatzinc/parser.tab.cpp"
+
#line 3118 "gecode/flatzinc/parser.tab.cpp"
break;
case 84: /* set_var_array_literal: '[' set_init_list ']' */
-
#line 1432 "../gecode/flatzinc/parser.yxx"
+
#line 1439 "gecode/flatzinc/parser.yxx"
{ (yyval.varSpecVec) = (yyvsp[-1].varSpecVec); }
-
#line 3105 "gecode/flatzinc/parser.tab.cpp"
+
#line 3124 "gecode/flatzinc/parser.tab.cpp"
break;
case 85: /* vardecl_int_var_array_init: %empty */
-
#line 1436 "../gecode/flatzinc/parser.yxx"
+
#line 1443 "gecode/flatzinc/parser.yxx"
{ (yyval.oVarSpecVec) = Option<vector<VarSpec*>* >::none(); }
-
#line 3111 "gecode/flatzinc/parser.tab.cpp"
+
#line 3130 "gecode/flatzinc/parser.tab.cpp"
break;
case 86: /* vardecl_int_var_array_init: '=' int_var_array_literal */
-
#line 1438 "../gecode/flatzinc/parser.yxx"
+
#line 1445 "gecode/flatzinc/parser.yxx"
{ (yyval.oVarSpecVec) = Option<vector<VarSpec*>* >::some((yyvsp[0].varSpecVec)); }
-
#line 3117 "gecode/flatzinc/parser.tab.cpp"
+
#line 3136 "gecode/flatzinc/parser.tab.cpp"
break;
case 87: /* vardecl_bool_var_array_init: %empty */
-
#line 1442 "../gecode/flatzinc/parser.yxx"
+
#line 1449 "gecode/flatzinc/parser.yxx"
{ (yyval.oVarSpecVec) = Option<vector<VarSpec*>* >::none(); }
-
#line 3123 "gecode/flatzinc/parser.tab.cpp"
+
#line 3142 "gecode/flatzinc/parser.tab.cpp"
break;
case 88: /* vardecl_bool_var_array_init: '=' bool_var_array_literal */
-
#line 1444 "../gecode/flatzinc/parser.yxx"
+
#line 1451 "gecode/flatzinc/parser.yxx"
{ (yyval.oVarSpecVec) = Option<vector<VarSpec*>* >::some((yyvsp[0].varSpecVec)); }
-
#line 3129 "gecode/flatzinc/parser.tab.cpp"
+
#line 3148 "gecode/flatzinc/parser.tab.cpp"
break;
case 89: /* vardecl_float_var_array_init: %empty */
-
#line 1448 "../gecode/flatzinc/parser.yxx"
+
#line 1455 "gecode/flatzinc/parser.yxx"
{ (yyval.oVarSpecVec) = Option<vector<VarSpec*>* >::none(); }
-
#line 3135 "gecode/flatzinc/parser.tab.cpp"
+
#line 3154 "gecode/flatzinc/parser.tab.cpp"
break;
case 90: /* vardecl_float_var_array_init: '=' float_var_array_literal */
-
#line 1450 "../gecode/flatzinc/parser.yxx"
+
#line 1457 "gecode/flatzinc/parser.yxx"
{ (yyval.oVarSpecVec) = Option<vector<VarSpec*>* >::some((yyvsp[0].varSpecVec)); }
-
#line 3141 "gecode/flatzinc/parser.tab.cpp"
+
#line 3160 "gecode/flatzinc/parser.tab.cpp"
break;
case 91: /* vardecl_set_var_array_init: %empty */
-
#line 1454 "../gecode/flatzinc/parser.yxx"
+
#line 1461 "gecode/flatzinc/parser.yxx"
{ (yyval.oVarSpecVec) = Option<vector<VarSpec*>* >::none(); }
-
#line 3147 "gecode/flatzinc/parser.tab.cpp"
+
#line 3166 "gecode/flatzinc/parser.tab.cpp"
break;
case 92: /* vardecl_set_var_array_init: '=' set_var_array_literal */
-
#line 1456 "../gecode/flatzinc/parser.yxx"
+
#line 1463 "gecode/flatzinc/parser.yxx"
{ (yyval.oVarSpecVec) = Option<vector<VarSpec*>* >::some((yyvsp[0].varSpecVec)); }
-
#line 3153 "gecode/flatzinc/parser.tab.cpp"
+
#line 3172 "gecode/flatzinc/parser.tab.cpp"
break;
case 93: /* constraint_item: FZ_CONSTRAINT FZ_ID '(' flat_expr_list ')' annotations */
-
#line 1460 "../gecode/flatzinc/parser.yxx"
+
#line 1467 "gecode/flatzinc/parser.yxx"
ParserState *pp = static_cast<ParserState*>(parm);
if (!pp->hadError) {
std::string cid((yyvsp[-4].sValue));
if (cid=="status" && (yyvsp[-2].argVec)->a[0]->isIntVar()) {
pp->status_idx = (yyvsp[-2].argVec)->a[0]->getIntVar();
+
} else if (cid=="complete_reif" && (yyvsp[-2].argVec)->a[0]->isBoolVar()) {
+
pp->complete_idx = (yyvsp[-2].argVec)->a[0]->getBoolVar();
} else if (cid=="int_lastval" && (yyvsp[-2].argVec)->a[0]->isIntVar() && (yyvsp[-2].argVec)->a[1]->isIntVar()) {
int base0 = getBaseIntVar(pp,(yyvsp[-2].argVec)->a[0]->getIntVar());
int base1 = getBaseIntVar(pp,(yyvsp[-2].argVec)->a[1]->getIntVar());
···
free((yyvsp[-4].sValue));
-
#line 3280 "gecode/flatzinc/parser.tab.cpp"
+
#line 3301 "gecode/flatzinc/parser.tab.cpp"
break;
case 94: /* solve_item: FZ_SOLVE annotations FZ_SATISFY */
-
#line 1584 "../gecode/flatzinc/parser.yxx"
+
#line 1593 "gecode/flatzinc/parser.yxx"
ParserState *pp = static_cast<ParserState*>(parm);
initfg(pp);
···
delete (yyvsp[-1].argVec);
-
#line 3298 "gecode/flatzinc/parser.tab.cpp"
+
#line 3319 "gecode/flatzinc/parser.tab.cpp"
break;
case 95: /* solve_item: FZ_SOLVE annotations minmax solve_expr */
-
#line 1598 "../gecode/flatzinc/parser.yxx"
+
#line 1607 "gecode/flatzinc/parser.yxx"
ParserState *pp = static_cast<ParserState*>(parm);
initfg(pp);
···
delete (yyvsp[-2].argVec);
-
#line 3321 "gecode/flatzinc/parser.tab.cpp"
+
#line 3342 "gecode/flatzinc/parser.tab.cpp"
break;
case 96: /* int_ti_expr_tail: FZ_INT */
-
#line 1623 "../gecode/flatzinc/parser.yxx"
+
#line 1632 "gecode/flatzinc/parser.yxx"
{ (yyval.oSet) = Option<AST::SetLit* >::none(); }
-
#line 3327 "gecode/flatzinc/parser.tab.cpp"
+
#line 3348 "gecode/flatzinc/parser.tab.cpp"
break;
case 97: /* int_ti_expr_tail: '{' int_list '}' */
-
#line 1625 "../gecode/flatzinc/parser.yxx"
+
#line 1634 "gecode/flatzinc/parser.yxx"
{ (yyval.oSet) = Option<AST::SetLit* >::some(new AST::SetLit(*(yyvsp[-1].setValue))); }
-
#line 3333 "gecode/flatzinc/parser.tab.cpp"
+
#line 3354 "gecode/flatzinc/parser.tab.cpp"
break;
case 98: /* int_ti_expr_tail: FZ_INT_LIT FZ_DOTDOT FZ_INT_LIT */
-
#line 1627 "../gecode/flatzinc/parser.yxx"
+
#line 1636 "gecode/flatzinc/parser.yxx"
(yyval.oSet) = Option<AST::SetLit* >::some(new AST::SetLit((yyvsp[-2].iValue), (yyvsp[0].iValue)));
-
#line 3341 "gecode/flatzinc/parser.tab.cpp"
+
#line 3362 "gecode/flatzinc/parser.tab.cpp"
break;
case 99: /* bool_ti_expr_tail: FZ_BOOL */
-
#line 1633 "../gecode/flatzinc/parser.yxx"
+
#line 1642 "gecode/flatzinc/parser.yxx"
{ (yyval.oSet) = Option<AST::SetLit* >::none(); }
-
#line 3347 "gecode/flatzinc/parser.tab.cpp"
+
#line 3368 "gecode/flatzinc/parser.tab.cpp"
break;
case 100: /* bool_ti_expr_tail: '{' bool_list_head list_tail '}' */
-
#line 1635 "../gecode/flatzinc/parser.yxx"
+
#line 1644 "gecode/flatzinc/parser.yxx"
{ bool haveTrue = false;
bool haveFalse = false;
for (int i=(yyvsp[-2].setValue)->size(); i--;) {
···
(yyval.oSet) = Option<AST::SetLit* >::some(
new AST::SetLit(!haveFalse,haveTrue));
-
#line 3362 "gecode/flatzinc/parser.tab.cpp"
+
#line 3383 "gecode/flatzinc/parser.tab.cpp"
break;
case 101: /* float_ti_expr_tail: FZ_FLOAT */
-
#line 1648 "../gecode/flatzinc/parser.yxx"
+
#line 1657 "gecode/flatzinc/parser.yxx"
{ (yyval.oPFloat) = Option<std::pair<double,double>* >::none(); }
-
#line 3368 "gecode/flatzinc/parser.tab.cpp"
+
#line 3389 "gecode/flatzinc/parser.tab.cpp"
break;
case 102: /* float_ti_expr_tail: FZ_FLOAT_LIT FZ_DOTDOT FZ_FLOAT_LIT */
-
#line 1650 "../gecode/flatzinc/parser.yxx"
+
#line 1659 "gecode/flatzinc/parser.yxx"
{ std::pair<double,double>* dom = new std::pair<double,double>((yyvsp[-2].dValue),(yyvsp[0].dValue));
(yyval.oPFloat) = Option<std::pair<double,double>* >::some(dom); }
-
#line 3375 "gecode/flatzinc/parser.tab.cpp"
+
#line 3396 "gecode/flatzinc/parser.tab.cpp"
break;
case 103: /* set_literal: '{' int_list '}' */
-
#line 1659 "../gecode/flatzinc/parser.yxx"
+
#line 1668 "gecode/flatzinc/parser.yxx"
{ (yyval.setLit) = new AST::SetLit(*(yyvsp[-1].setValue)); }
-
#line 3381 "gecode/flatzinc/parser.tab.cpp"
+
#line 3402 "gecode/flatzinc/parser.tab.cpp"
break;
case 104: /* set_literal: FZ_INT_LIT FZ_DOTDOT FZ_INT_LIT */
-
#line 1661 "../gecode/flatzinc/parser.yxx"
+
#line 1670 "gecode/flatzinc/parser.yxx"
{ (yyval.setLit) = new AST::SetLit((yyvsp[-2].iValue), (yyvsp[0].iValue)); }
-
#line 3387 "gecode/flatzinc/parser.tab.cpp"
+
#line 3408 "gecode/flatzinc/parser.tab.cpp"
break;
case 105: /* int_list: %empty */
-
#line 1667 "../gecode/flatzinc/parser.yxx"
+
#line 1676 "gecode/flatzinc/parser.yxx"
{ (yyval.setValue) = new vector<int>(0); }
-
#line 3393 "gecode/flatzinc/parser.tab.cpp"
+
#line 3414 "gecode/flatzinc/parser.tab.cpp"
break;
case 106: /* int_list: int_list_head list_tail */
-
#line 1669 "../gecode/flatzinc/parser.yxx"
+
#line 1678 "gecode/flatzinc/parser.yxx"
{ (yyval.setValue) = (yyvsp[-1].setValue); }
-
#line 3399 "gecode/flatzinc/parser.tab.cpp"
+
#line 3420 "gecode/flatzinc/parser.tab.cpp"
break;
case 107: /* int_list_head: FZ_INT_LIT */
-
#line 1673 "../gecode/flatzinc/parser.yxx"
+
#line 1682 "gecode/flatzinc/parser.yxx"
{ (yyval.setValue) = new vector<int>(1); (*(yyval.setValue))[0] = (yyvsp[0].iValue); }
-
#line 3405 "gecode/flatzinc/parser.tab.cpp"
+
#line 3426 "gecode/flatzinc/parser.tab.cpp"
break;
case 108: /* int_list_head: int_list_head ',' FZ_INT_LIT */
-
#line 1675 "../gecode/flatzinc/parser.yxx"
+
#line 1684 "gecode/flatzinc/parser.yxx"
{ (yyval.setValue) = (yyvsp[-2].setValue); (yyval.setValue)->push_back((yyvsp[0].iValue)); }
-
#line 3411 "gecode/flatzinc/parser.tab.cpp"
+
#line 3432 "gecode/flatzinc/parser.tab.cpp"
break;
case 109: /* bool_list: %empty */
-
#line 1679 "../gecode/flatzinc/parser.yxx"
+
#line 1688 "gecode/flatzinc/parser.yxx"
{ (yyval.setValue) = new vector<int>(0); }
-
#line 3417 "gecode/flatzinc/parser.tab.cpp"
+
#line 3438 "gecode/flatzinc/parser.tab.cpp"
break;
case 110: /* bool_list: bool_list_head list_tail */
-
#line 1681 "../gecode/flatzinc/parser.yxx"
+
#line 1690 "gecode/flatzinc/parser.yxx"
{ (yyval.setValue) = (yyvsp[-1].setValue); }
-
#line 3423 "gecode/flatzinc/parser.tab.cpp"
+
#line 3444 "gecode/flatzinc/parser.tab.cpp"
break;
case 111: /* bool_list_head: FZ_BOOL_LIT */
-
#line 1685 "../gecode/flatzinc/parser.yxx"
+
#line 1694 "gecode/flatzinc/parser.yxx"
{ (yyval.setValue) = new vector<int>(1); (*(yyval.setValue))[0] = (yyvsp[0].iValue); }
-
#line 3429 "gecode/flatzinc/parser.tab.cpp"
+
#line 3450 "gecode/flatzinc/parser.tab.cpp"
break;
case 112: /* bool_list_head: bool_list_head ',' FZ_BOOL_LIT */
-
#line 1687 "../gecode/flatzinc/parser.yxx"
+
#line 1696 "gecode/flatzinc/parser.yxx"
{ (yyval.setValue) = (yyvsp[-2].setValue); (yyval.setValue)->push_back((yyvsp[0].iValue)); }
-
#line 3435 "gecode/flatzinc/parser.tab.cpp"
+
#line 3456 "gecode/flatzinc/parser.tab.cpp"
break;
case 113: /* float_list: %empty */
-
#line 1691 "../gecode/flatzinc/parser.yxx"
+
#line 1700 "gecode/flatzinc/parser.yxx"
{ (yyval.floatSetValue) = new vector<double>(0); }
-
#line 3441 "gecode/flatzinc/parser.tab.cpp"
+
#line 3462 "gecode/flatzinc/parser.tab.cpp"
break;
case 114: /* float_list: float_list_head list_tail */
-
#line 1693 "../gecode/flatzinc/parser.yxx"
+
#line 1702 "gecode/flatzinc/parser.yxx"
{ (yyval.floatSetValue) = (yyvsp[-1].floatSetValue); }
-
#line 3447 "gecode/flatzinc/parser.tab.cpp"
+
#line 3468 "gecode/flatzinc/parser.tab.cpp"
break;
case 115: /* float_list_head: FZ_FLOAT_LIT */
-
#line 1697 "../gecode/flatzinc/parser.yxx"
+
#line 1706 "gecode/flatzinc/parser.yxx"
{ (yyval.floatSetValue) = new vector<double>(1); (*(yyval.floatSetValue))[0] = (yyvsp[0].dValue); }
-
#line 3453 "gecode/flatzinc/parser.tab.cpp"
+
#line 3474 "gecode/flatzinc/parser.tab.cpp"
break;
case 116: /* float_list_head: float_list_head ',' FZ_FLOAT_LIT */
-
#line 1699 "../gecode/flatzinc/parser.yxx"
+
#line 1708 "gecode/flatzinc/parser.yxx"
{ (yyval.floatSetValue) = (yyvsp[-2].floatSetValue); (yyval.floatSetValue)->push_back((yyvsp[0].dValue)); }
-
#line 3459 "gecode/flatzinc/parser.tab.cpp"
+
#line 3480 "gecode/flatzinc/parser.tab.cpp"
break;
case 117: /* set_literal_list: %empty */
-
#line 1703 "../gecode/flatzinc/parser.yxx"
+
#line 1712 "gecode/flatzinc/parser.yxx"
{ (yyval.setValueList) = new vector<AST::SetLit>(0); }
-
#line 3465 "gecode/flatzinc/parser.tab.cpp"
+
#line 3486 "gecode/flatzinc/parser.tab.cpp"
break;
case 118: /* set_literal_list: set_literal_list_head list_tail */
-
#line 1705 "../gecode/flatzinc/parser.yxx"
+
#line 1714 "gecode/flatzinc/parser.yxx"
{ (yyval.setValueList) = (yyvsp[-1].setValueList); }
-
#line 3471 "gecode/flatzinc/parser.tab.cpp"
+
#line 3492 "gecode/flatzinc/parser.tab.cpp"
break;
case 119: /* set_literal_list_head: set_literal */
-
#line 1709 "../gecode/flatzinc/parser.yxx"
+
#line 1718 "gecode/flatzinc/parser.yxx"
{ (yyval.setValueList) = new vector<AST::SetLit>(1); (*(yyval.setValueList))[0] = *(yyvsp[0].setLit); delete (yyvsp[0].setLit); }
-
#line 3477 "gecode/flatzinc/parser.tab.cpp"
+
#line 3498 "gecode/flatzinc/parser.tab.cpp"
break;
case 120: /* set_literal_list_head: set_literal_list_head ',' set_literal */
-
#line 1711 "../gecode/flatzinc/parser.yxx"
+
#line 1720 "gecode/flatzinc/parser.yxx"
{ (yyval.setValueList) = (yyvsp[-2].setValueList); (yyval.setValueList)->push_back(*(yyvsp[0].setLit)); delete (yyvsp[0].setLit); }
-
#line 3483 "gecode/flatzinc/parser.tab.cpp"
+
#line 3504 "gecode/flatzinc/parser.tab.cpp"
break;
case 121: /* flat_expr_list: flat_expr */
-
#line 1719 "../gecode/flatzinc/parser.yxx"
+
#line 1728 "gecode/flatzinc/parser.yxx"
{ (yyval.argVec) = new AST::Array((yyvsp[0].arg)); }
-
#line 3489 "gecode/flatzinc/parser.tab.cpp"
+
#line 3510 "gecode/flatzinc/parser.tab.cpp"
break;
case 122: /* flat_expr_list: flat_expr_list ',' flat_expr */
-
#line 1721 "../gecode/flatzinc/parser.yxx"
+
#line 1730 "gecode/flatzinc/parser.yxx"
{ (yyval.argVec) = (yyvsp[-2].argVec); (yyval.argVec)->append((yyvsp[0].arg)); }
-
#line 3495 "gecode/flatzinc/parser.tab.cpp"
+
#line 3516 "gecode/flatzinc/parser.tab.cpp"
break;
case 123: /* flat_expr: non_array_expr */
-
#line 1725 "../gecode/flatzinc/parser.yxx"
+
#line 1734 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = (yyvsp[0].arg); }
-
#line 3501 "gecode/flatzinc/parser.tab.cpp"
+
#line 3522 "gecode/flatzinc/parser.tab.cpp"
break;
case 124: /* flat_expr: '[' non_array_expr_list ']' */
-
#line 1727 "../gecode/flatzinc/parser.yxx"
+
#line 1736 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = (yyvsp[-1].argVec); }
-
#line 3507 "gecode/flatzinc/parser.tab.cpp"
+
#line 3528 "gecode/flatzinc/parser.tab.cpp"
break;
case 125: /* non_array_expr_opt: %empty */
-
#line 1731 "../gecode/flatzinc/parser.yxx"
+
#line 1740 "gecode/flatzinc/parser.yxx"
{ (yyval.oArg) = Option<AST::Node*>::none(); }
-
#line 3513 "gecode/flatzinc/parser.tab.cpp"
+
#line 3534 "gecode/flatzinc/parser.tab.cpp"
break;
case 126: /* non_array_expr_opt: '=' non_array_expr */
-
#line 1733 "../gecode/flatzinc/parser.yxx"
+
#line 1742 "gecode/flatzinc/parser.yxx"
{ (yyval.oArg) = Option<AST::Node*>::some((yyvsp[0].arg)); }
-
#line 3519 "gecode/flatzinc/parser.tab.cpp"
+
#line 3540 "gecode/flatzinc/parser.tab.cpp"
break;
case 127: /* non_array_expr: FZ_BOOL_LIT */
-
#line 1737 "../gecode/flatzinc/parser.yxx"
+
#line 1746 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = new AST::BoolLit((yyvsp[0].iValue)); }
-
#line 3525 "gecode/flatzinc/parser.tab.cpp"
+
#line 3546 "gecode/flatzinc/parser.tab.cpp"
break;
case 128: /* non_array_expr: FZ_INT_LIT */
-
#line 1739 "../gecode/flatzinc/parser.yxx"
+
#line 1748 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = new AST::IntLit((yyvsp[0].iValue)); }
-
#line 3531 "gecode/flatzinc/parser.tab.cpp"
+
#line 3552 "gecode/flatzinc/parser.tab.cpp"
break;
case 129: /* non_array_expr: FZ_FLOAT_LIT */
-
#line 1741 "../gecode/flatzinc/parser.yxx"
+
#line 1750 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = new AST::FloatLit((yyvsp[0].dValue)); }
-
#line 3537 "gecode/flatzinc/parser.tab.cpp"
+
#line 3558 "gecode/flatzinc/parser.tab.cpp"
break;
case 130: /* non_array_expr: set_literal */
-
#line 1743 "../gecode/flatzinc/parser.yxx"
+
#line 1752 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = (yyvsp[0].setLit); }
-
#line 3543 "gecode/flatzinc/parser.tab.cpp"
+
#line 3564 "gecode/flatzinc/parser.tab.cpp"
break;
case 131: /* non_array_expr: var_par_id */
-
#line 1745 "../gecode/flatzinc/parser.yxx"
+
#line 1754 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
SymbolEntry e;
···
free((yyvsp[0].sValue));
-
#line 3643 "gecode/flatzinc/parser.tab.cpp"
+
#line 3664 "gecode/flatzinc/parser.tab.cpp"
break;
case 132: /* non_array_expr: var_par_id '[' non_array_expr ']' */
-
#line 1841 "../gecode/flatzinc/parser.yxx"
+
#line 1850 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
int i = -1;
···
delete (yyvsp[-1].arg);
free((yyvsp[-3].sValue));
-
#line 3659 "gecode/flatzinc/parser.tab.cpp"
+
#line 3680 "gecode/flatzinc/parser.tab.cpp"
break;
case 133: /* non_array_expr_list: %empty */
-
#line 1855 "../gecode/flatzinc/parser.yxx"
+
#line 1864 "gecode/flatzinc/parser.yxx"
{ (yyval.argVec) = new AST::Array(0); }
-
#line 3665 "gecode/flatzinc/parser.tab.cpp"
+
#line 3686 "gecode/flatzinc/parser.tab.cpp"
break;
case 134: /* non_array_expr_list: non_array_expr_list_head list_tail */
-
#line 1857 "../gecode/flatzinc/parser.yxx"
+
#line 1866 "gecode/flatzinc/parser.yxx"
{ (yyval.argVec) = (yyvsp[-1].argVec); }
-
#line 3671 "gecode/flatzinc/parser.tab.cpp"
+
#line 3692 "gecode/flatzinc/parser.tab.cpp"
break;
case 135: /* non_array_expr_list_head: non_array_expr */
-
#line 1861 "../gecode/flatzinc/parser.yxx"
+
#line 1870 "gecode/flatzinc/parser.yxx"
{ (yyval.argVec) = new AST::Array((yyvsp[0].arg)); }
-
#line 3677 "gecode/flatzinc/parser.tab.cpp"
+
#line 3698 "gecode/flatzinc/parser.tab.cpp"
break;
case 136: /* non_array_expr_list_head: non_array_expr_list_head ',' non_array_expr */
-
#line 1863 "../gecode/flatzinc/parser.yxx"
+
#line 1872 "gecode/flatzinc/parser.yxx"
{ (yyval.argVec) = (yyvsp[-2].argVec); (yyval.argVec)->append((yyvsp[0].arg)); }
-
#line 3683 "gecode/flatzinc/parser.tab.cpp"
+
#line 3704 "gecode/flatzinc/parser.tab.cpp"
break;
case 137: /* solve_expr: var_par_id */
-
#line 1871 "../gecode/flatzinc/parser.yxx"
+
#line 1880 "gecode/flatzinc/parser.yxx"
ParserState *pp = static_cast<ParserState*>(parm);
SymbolEntry e;
···
free((yyvsp[0].sValue));
-
#line 3721 "gecode/flatzinc/parser.tab.cpp"
+
#line 3742 "gecode/flatzinc/parser.tab.cpp"
break;
case 138: /* solve_expr: FZ_INT_LIT */
-
#line 1905 "../gecode/flatzinc/parser.yxx"
+
#line 1914 "gecode/flatzinc/parser.yxx"
ParserState *pp = static_cast<ParserState*>(parm);
pp->intvars.push_back(varspec("OBJ_CONST_INTRODUCED",
new IntVarSpec(0,true,false)));
(yyval.iValue) = pp->intvars.size()-1;
-
#line 3732 "gecode/flatzinc/parser.tab.cpp"
+
#line 3753 "gecode/flatzinc/parser.tab.cpp"
break;
case 139: /* solve_expr: FZ_FLOAT_LIT */
-
#line 1912 "../gecode/flatzinc/parser.yxx"
+
#line 1921 "gecode/flatzinc/parser.yxx"
ParserState *pp = static_cast<ParserState*>(parm);
pp->intvars.push_back(varspec("OBJ_CONST_INTRODUCED",
new IntVarSpec(0,true,false)));
(yyval.iValue) = pp->intvars.size()-1;
-
#line 3743 "gecode/flatzinc/parser.tab.cpp"
+
#line 3764 "gecode/flatzinc/parser.tab.cpp"
break;
case 140: /* solve_expr: var_par_id '[' FZ_INT_LIT ']' */
-
#line 1919 "../gecode/flatzinc/parser.yxx"
+
#line 1928 "gecode/flatzinc/parser.yxx"
SymbolEntry e;
ParserState *pp = static_cast<ParserState*>(parm);
···
free((yyvsp[-3].sValue));
-
#line 3771 "gecode/flatzinc/parser.tab.cpp"
+
#line 3792 "gecode/flatzinc/parser.tab.cpp"
break;
case 143: /* annotations: %empty */
-
#line 1953 "../gecode/flatzinc/parser.yxx"
+
#line 1962 "gecode/flatzinc/parser.yxx"
{ (yyval.argVec) = NULL; }
-
#line 3777 "gecode/flatzinc/parser.tab.cpp"
+
#line 3798 "gecode/flatzinc/parser.tab.cpp"
break;
case 144: /* annotations: annotations_head */
-
#line 1955 "../gecode/flatzinc/parser.yxx"
+
#line 1964 "gecode/flatzinc/parser.yxx"
{ (yyval.argVec) = (yyvsp[0].argVec); }
-
#line 3783 "gecode/flatzinc/parser.tab.cpp"
+
#line 3804 "gecode/flatzinc/parser.tab.cpp"
break;
case 145: /* annotations_head: FZ_COLONCOLON annotation */
-
#line 1959 "../gecode/flatzinc/parser.yxx"
+
#line 1968 "gecode/flatzinc/parser.yxx"
{ (yyval.argVec) = new AST::Array((yyvsp[0].arg)); }
-
#line 3789 "gecode/flatzinc/parser.tab.cpp"
+
#line 3810 "gecode/flatzinc/parser.tab.cpp"
break;
case 146: /* annotations_head: annotations_head FZ_COLONCOLON annotation */
-
#line 1961 "../gecode/flatzinc/parser.yxx"
+
#line 1970 "gecode/flatzinc/parser.yxx"
{ (yyval.argVec) = (yyvsp[-2].argVec); (yyval.argVec)->append((yyvsp[0].arg)); }
-
#line 3795 "gecode/flatzinc/parser.tab.cpp"
+
#line 3816 "gecode/flatzinc/parser.tab.cpp"
break;
case 147: /* annotation: FZ_ID '(' annotation_list ')' */
-
#line 1965 "../gecode/flatzinc/parser.yxx"
+
#line 1974 "gecode/flatzinc/parser.yxx"
(yyval.arg) = new AST::Call((yyvsp[-3].sValue), AST::extractSingleton((yyvsp[-1].arg))); free((yyvsp[-3].sValue));
-
#line 3803 "gecode/flatzinc/parser.tab.cpp"
+
#line 3824 "gecode/flatzinc/parser.tab.cpp"
break;
case 148: /* annotation: annotation_expr */
-
#line 1969 "../gecode/flatzinc/parser.yxx"
+
#line 1978 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = (yyvsp[0].arg); }
-
#line 3809 "gecode/flatzinc/parser.tab.cpp"
+
#line 3830 "gecode/flatzinc/parser.tab.cpp"
break;
case 149: /* annotation_list: annotation */
-
#line 1973 "../gecode/flatzinc/parser.yxx"
+
#line 1982 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = new AST::Array((yyvsp[0].arg)); }
-
#line 3815 "gecode/flatzinc/parser.tab.cpp"
+
#line 3836 "gecode/flatzinc/parser.tab.cpp"
break;
case 150: /* annotation_list: annotation_list ',' annotation */
-
#line 1975 "../gecode/flatzinc/parser.yxx"
+
#line 1984 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = (yyvsp[-2].arg); (yyval.arg)->append((yyvsp[0].arg)); }
-
#line 3821 "gecode/flatzinc/parser.tab.cpp"
+
#line 3842 "gecode/flatzinc/parser.tab.cpp"
break;
case 151: /* annotation_expr: ann_non_array_expr */
-
#line 1979 "../gecode/flatzinc/parser.yxx"
+
#line 1988 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = (yyvsp[0].arg); }
-
#line 3827 "gecode/flatzinc/parser.tab.cpp"
+
#line 3848 "gecode/flatzinc/parser.tab.cpp"
break;
case 152: /* annotation_expr: '[' ']' */
-
#line 1981 "../gecode/flatzinc/parser.yxx"
+
#line 1990 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = new AST::Array(); }
-
#line 3833 "gecode/flatzinc/parser.tab.cpp"
+
#line 3854 "gecode/flatzinc/parser.tab.cpp"
break;
case 153: /* annotation_expr: '[' annotation_list annotation_list_tail ']' */
-
#line 1983 "../gecode/flatzinc/parser.yxx"
+
#line 1992 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = (yyvsp[-2].arg); }
-
#line 3839 "gecode/flatzinc/parser.tab.cpp"
+
#line 3860 "gecode/flatzinc/parser.tab.cpp"
break;
case 156: /* ann_non_array_expr: FZ_BOOL_LIT */
-
#line 1989 "../gecode/flatzinc/parser.yxx"
+
#line 1998 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = new AST::BoolLit((yyvsp[0].iValue)); }
-
#line 3845 "gecode/flatzinc/parser.tab.cpp"
+
#line 3866 "gecode/flatzinc/parser.tab.cpp"
break;
case 157: /* ann_non_array_expr: FZ_INT_LIT */
-
#line 1991 "../gecode/flatzinc/parser.yxx"
+
#line 2000 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = new AST::IntLit((yyvsp[0].iValue)); }
-
#line 3851 "gecode/flatzinc/parser.tab.cpp"
+
#line 3872 "gecode/flatzinc/parser.tab.cpp"
break;
case 158: /* ann_non_array_expr: FZ_FLOAT_LIT */
-
#line 1993 "../gecode/flatzinc/parser.yxx"
+
#line 2002 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = new AST::FloatLit((yyvsp[0].dValue)); }
-
#line 3857 "gecode/flatzinc/parser.tab.cpp"
+
#line 3878 "gecode/flatzinc/parser.tab.cpp"
break;
case 159: /* ann_non_array_expr: set_literal */
-
#line 1995 "../gecode/flatzinc/parser.yxx"
+
#line 2004 "gecode/flatzinc/parser.yxx"
{ (yyval.arg) = (yyvsp[0].setLit); }
-
#line 3863 "gecode/flatzinc/parser.tab.cpp"
+
#line 3884 "gecode/flatzinc/parser.tab.cpp"
break;
case 160: /* ann_non_array_expr: var_par_id */
-
#line 1997 "../gecode/flatzinc/parser.yxx"
+
#line 2006 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
SymbolEntry e;
···
(yyval.arg) = getVarRefArg(pp,(yyvsp[0].sValue),true);
free((yyvsp[0].sValue));
-
#line 3973 "gecode/flatzinc/parser.tab.cpp"
+
#line 3994 "gecode/flatzinc/parser.tab.cpp"
break;
case 161: /* ann_non_array_expr: var_par_id '[' ann_non_array_expr ']' */
-
#line 2103 "../gecode/flatzinc/parser.yxx"
+
#line 2112 "gecode/flatzinc/parser.yxx"
ParserState* pp = static_cast<ParserState*>(parm);
int i = -1;
···
(yyval.arg) = new AST::IntLit(0); // keep things consistent
free((yyvsp[-3].sValue));
-
#line 3988 "gecode/flatzinc/parser.tab.cpp"
+
#line 4009 "gecode/flatzinc/parser.tab.cpp"
break;
case 162: /* ann_non_array_expr: FZ_STRING_LIT */
-
#line 2114 "../gecode/flatzinc/parser.yxx"
+
#line 2123 "gecode/flatzinc/parser.yxx"
(yyval.arg) = new AST::String((yyvsp[0].sValue));
free((yyvsp[0].sValue));
-
#line 3997 "gecode/flatzinc/parser.tab.cpp"
+
#line 4018 "gecode/flatzinc/parser.tab.cpp"
break;
-
#line 4001 "gecode/flatzinc/parser.tab.cpp"
+
#line 4022 "gecode/flatzinc/parser.tab.cpp"
default: break;
+4 -4
gecode/flatzinc/parser.tab.hpp
···
-
/* A Bison parser, made by GNU Bison 3.7.2. */
+
/* A Bison parser, made by GNU Bison 3.7.6. */
/* Bison interface for Yacc-like parsers in C
-
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation,
+
Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2021 Free Software Foundation,
Inc.
This program is free software: you can redistribute it and/or modify
···
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
-
along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
along with this program. If not, see <https://www.gnu.org/licenses/>. */
/* As a special exception, you may create a larger work that contains
part or all of the Bison parser skeleton and distribute that work
···
#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
union YYSTYPE
{
-
#line 502 "../gecode/flatzinc/parser.yxx"
+
#line 509 "gecode/flatzinc/parser.yxx"
int iValue; char* sValue; bool bValue; double dValue;
std::vector<int>* setValue;
Gecode::FlatZinc::AST::SetLit* setLit;
+9
gecode/flatzinc/parser.yxx
···
#include <gecode/flatzinc.hh>
#include <gecode/flatzinc/parser.hh>
#include <gecode/flatzinc/lastval.hh>
+
#include <gecode/flatzinc/complete.hh>
#include <iostream>
#include <fstream>
···
if (pp->status_idx >= 0) {
pp->fg->restart_status = IntVarArray(*(pp->fg), 1);
pp->fg->restart_status[0] = pp->fg->iv[pp->status_idx];
+
}
+
if (pp->complete_idx >= 0) {
+
pp->fg->restart_complete = BoolVarArray(*(pp->fg), 1);
+
pp->fg->restart_complete[0] = pp->fg->bv[pp->complete_idx];
+
pp->fg->complete_marker = std::make_shared<bool>(false);
+
Complete::post(*(pp->fg), pp->fg->restart_complete[0], pp->fg->complete_marker);
}
if (!(pp->int_uniform.empty())) {
pp->fg->int_uniform_var = IntVarArray(*(pp->fg), pp->int_uniform.size());
···
std::string cid($2);
if (cid=="status" && $4->a[0]->isIntVar()) {
pp->status_idx = $4->a[0]->getIntVar();
+
} else if (cid=="complete_reif" && $4->a[0]->isBoolVar()) {
+
pp->complete_idx = $4->a[0]->getBoolVar();
} else if (cid=="int_lastval" && $4->a[0]->isIntVar() && $4->a[1]->isIntVar()) {
int base0 = getBaseIntVar(pp,$4->a[0]->getIntVar());
int base1 = getBaseIntVar(pp,$4->a[1]->getIntVar());
+25 -2
gecode/kernel/core.hpp
···
/// Information is provided by a portfolio-based engine
PORTFOLIO
};
+
/// Reason for restarting
+
enum RReason {
+
/// No reason - used for PORTFOLIO
+
RR_NO,
+
/// Restarting after initialisation
+
RR_INIT,
+
/// Restarting after a solution is found
+
RR_SOL,
+
/// Restarting after exhausting search space
+
RR_CMPL,
+
/// Restarting after reaching restart limit
+
RR_LIM
+
};
protected:
/// Type of information
const Type t;
···
//@{
/// Number of restarts
const unsigned long int r;
+
/// Reason for restarting
+
const RReason rr;
/// Number of solutions since last restart
const unsigned long long int s;
/// Number of failures since last restart
···
//@{
/// Constructor for restart-based engine
MetaInfo(unsigned long int r,
+
RReason rr,
unsigned long long int s,
unsigned long long int f,
const Space* l,
···
//@{
/// Return number of restarts
unsigned long int restart(void) const;
+
/// Return reason for restarting
+
RReason reason(void) const;
/// Return number of solutions since last restart
unsigned long long int solution(void) const;
/// Return number of failures since last restart
···
*/
forceinline
MetaInfo::MetaInfo(unsigned long int r0,
+
RReason rr0,
unsigned long long int s0,
unsigned long long int f0,
const Space* l0,
NoGoods& ng0)
-
: t(RESTART), r(r0), s(s0), f(f0), l(l0), ng(ng0), a(0) {}
+
: t(RESTART), r(r0), rr(rr0), s(s0), f(f0), l(l0), ng(ng0), a(0) {}
forceinline
MetaInfo::MetaInfo(unsigned int a0)
-
: t(PORTFOLIO), r(0), s(0), f(0), l(nullptr), ng(NoGoods::eng), a(a0) {}
+
: t(PORTFOLIO), r(0), rr(RR_NO), s(0), f(0), l(nullptr), ng(NoGoods::eng), a(a0) {}
forceinline MetaInfo::Type
MetaInfo::type(void) const {
···
MetaInfo::restart(void) const {
assert(type() == RESTART);
return r;
+
}
+
forceinline MetaInfo::RReason
+
MetaInfo::reason(void) const {
+
return rr;
forceinline unsigned long long int
MetaInfo::solution(void) const {
+21
gecode/search.hh
···
static Stop* fail(unsigned long long int l);
/// Stop if time limit \a l (in milliseconds) has been exceeded
static Stop* time(double l);
+
/// Stop if restart limit \a l has been exceeded
+
static Stop* restart(unsigned long long int l);
//@}
};
···
/// Reset time to zero
void reset(void);
/// Return true if time limit is exceeded
+
virtual bool stop(const Statistics& s, const Options& o);
+
};
+
+
/**
+
* \brief %Stop-object based on number of restarts
+
* \ingroup TaskModelSearchStop
+
*/
+
class GECODE_SEARCH_EXPORT RestartStop : public Stop {
+
protected:
+
/// Restart limit
+
unsigned long long int l;
+
public:
+
/// Stop if restart limit \a l is exceeded
+
RestartStop(unsigned long long int l);
+
/// Return current limit
+
unsigned long long int limit(void) const;
+
/// Set current limit to \a l restarts
+
void limit(unsigned long long int l);
+
/// Return true if failure limit is exceeded
virtual bool stop(const Statistics& s, const Options& o);
};
+1 -1
gecode/search/rbs.hpp
···
} else {
Space* master = m_opt.clone ? s->clone() : s;
Space* slave = master->clone();
-
MetaInfo mi(0,0,0,nullptr,NoGoods::eng);
+
MetaInfo mi(0,MetaInfo::RR_INIT,0,0,nullptr,NoGoods::eng);
slave->slave(mi);
e = Search::Seq::rbsengine(master,e_opt.stop,
Search::build<T,E>(slave,e_opt),
+2 -2
gecode/search/seq/rbs.cpp
···
NoGoods& ng = e->nogoods();
// Reset number of no-goods found
ng.ng(0);
-
MetaInfo mi(stop->m_stat.restart,sslr,e->statistics().fail,last,ng);
+
MetaInfo mi(stop->m_stat.restart,MetaInfo::RR_SOL,sslr,e->statistics().fail,last,ng);
bool r = master->master(mi);
stop->m_stat.nogood += ng.ng();
if (master->status(stop->m_stat) == SS_FAILED) {
···
sslr = 0;
NoGoods& ng = e->nogoods();
ng.ng(0);
-
MetaInfo mi(stop->m_stat.restart,sslr,e->statistics().fail,last,ng);
+
MetaInfo mi(stop->m_stat.restart,e->stopped() ? MetaInfo::RR_LIM : MetaInfo::RR_CMPL,sslr,e->statistics().fail,last,ng);
(void) master->master(mi);
stop->m_stat.nogood += ng.ng();
unsigned long long int nl = ++(*co);
+12
gecode/search/stop.cpp
···
Stop::time(double l) {
return new TimeStop(l);
}
+
Stop*
+
Stop::restart(unsigned long long int l) {
+
return new RestartStop(l);
+
}
/*
···
return t.stop() > l;
}
+
/*
+
* Stopping for restart limit
+
*
+
*/
+
bool
+
RestartStop::stop(const Statistics& s, const Options&) {
+
return s.restart > l;
+
}
}}
+18
gecode/search/stop.hpp
···
t.start();
}
+
/*
+
* Stopping for restart limit
+
*
+
*/
+
+
forceinline
+
RestartStop::RestartStop(unsigned long long int l0) : l(l0) {}
+
+
forceinline unsigned long long int
+
RestartStop::limit(void) const {
+
return l;
+
}
+
+
forceinline void
+
RestartStop::limit(unsigned long long int l0) {
+
l=l0;
+
}
+
}}
// STATISTICS: search-other
+1
tools/flatzinc/gecode.msc.in
···
],
["--restart-base", "Base for geometric restart sequence", "float", "1.5"],
["--restart-scale", "Scale factor for restart sequence", "int", "250"],
+
["--restart-limit", "Restart cutoff", "int", "0"],
["--nogoods", "Use no-goods from restarts", "bool", "false"],
["--nogoods-limit", "Depth limit for no-good extraction", "int", "128"]
],