Use 'const formula*' instead of 'formula*' everywhere.

The distinction makes no sense since Spot 0.5, where we switched from
mutable furmulae to immutable formulae.  The difference between
const_visitor and visitor made no sense either.  They have been merged
into one: visitor.

* iface/dve2/dve2check.cc, iface/gspn/ltlgspn.cc,
src/eltlparse/eltlparse.yy, src/eltlparse/public.hh,
src/evtgbatest/ltl2evtgba.cc, src/kripkeparse/kripkeparse.yy,
src/ltlast/atomic_prop.cc, src/ltlast/atomic_prop.hh,
src/ltlast/automatop.cc, src/ltlast/automatop.hh, src/ltlast/binop.cc,
src/ltlast/binop.hh, src/ltlast/bunop.cc, src/ltlast/bunop.hh,
src/ltlast/constant.cc, src/ltlast/constant.hh, src/ltlast/formula.cc,
src/ltlast/formula.hh, src/ltlast/formula_tree.cc,
src/ltlast/formula_tree.hh, src/ltlast/multop.cc,
src/ltlast/multop.hh, src/ltlast/predecl.hh, src/ltlast/refformula.cc,
src/ltlast/refformula.hh, src/ltlast/unop.cc, src/ltlast/unop.hh,
src/ltlast/visitor.hh, src/ltlenv/declenv.cc, src/ltlenv/declenv.hh,
src/ltlenv/defaultenv.cc, src/ltlenv/defaultenv.hh,
src/ltlenv/environment.hh, src/ltlparse/ltlfile.cc,
src/ltlparse/ltlfile.hh, src/ltlparse/ltlparse.yy,
src/ltlparse/public.hh, src/ltltest/consterm.cc,
src/ltltest/equals.cc, src/ltltest/genltl.cc, src/ltltest/kind.cc,
src/ltltest/length.cc, src/ltltest/randltl.cc, src/ltltest/readltl.cc,
src/ltltest/reduc.cc, src/ltltest/syntimpl.cc,
src/ltltest/tostring.cc, src/ltlvisit/apcollect.cc,
src/ltlvisit/apcollect.hh, src/ltlvisit/clone.cc,
src/ltlvisit/clone.hh, src/ltlvisit/contain.cc,
src/ltlvisit/contain.hh, src/ltlvisit/dotty.cc,
src/ltlvisit/length.cc, src/ltlvisit/lunabbrev.cc,
src/ltlvisit/lunabbrev.hh, src/ltlvisit/mark.cc, src/ltlvisit/mark.hh,
src/ltlvisit/nenoform.cc, src/ltlvisit/nenoform.hh,
src/ltlvisit/postfix.cc, src/ltlvisit/postfix.hh,
src/ltlvisit/randomltl.cc, src/ltlvisit/randomltl.hh,
src/ltlvisit/reduce.cc, src/ltlvisit/reduce.hh,
src/ltlvisit/simpfg.cc, src/ltlvisit/simpfg.hh,
src/ltlvisit/simplify.cc, src/ltlvisit/simplify.hh,
src/ltlvisit/snf.cc, src/ltlvisit/snf.hh, src/ltlvisit/tostring.cc,
src/ltlvisit/tunabbrev.cc, src/ltlvisit/tunabbrev.hh,
src/ltlvisit/wmunabbrev.cc, src/ltlvisit/wmunabbrev.hh,
src/neverparse/neverclaimparse.yy, src/sabatest/sabacomplementtgba.cc,
src/tgba/bdddict.cc, src/tgba/formula2bdd.cc, src/tgba/taatgba.cc,
src/tgba/taatgba.hh, src/tgbaalgos/eltl2tgba_lacim.cc,
src/tgbaalgos/ltl2taa.cc, src/tgbaalgos/ltl2tgba_fm.cc,
src/tgbaalgos/ltl2tgba_lacim.cc, src/tgbaalgos/minimize.cc,
src/tgbaalgos/randomgraph.cc, src/tgbaparse/tgbaparse.yy,
src/tgbatest/complementation.cc, src/tgbatest/ltl2tgba.cc,
src/tgbatest/ltlprod.cc, src/tgbatest/mixprod.cc,
src/tgbatest/randtgba.cc: Massive adjustment!
* src/tgbatest/reductgba.cc: Delete.
This commit is contained in:
Alexandre Duret-Lutz 2012-05-01 23:38:55 +02:00
parent 0f0ada825a
commit bf62d439c9
98 changed files with 1318 additions and 1535 deletions

View file

@ -1,5 +1,8 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2012 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2004, 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -40,7 +43,7 @@ namespace spot
{
}
virtual void doit(spot::ltl::atomic_prop* ap)
virtual void doit(const spot::ltl::atomic_prop* ap)
{
sap->insert(ap);
}
@ -56,7 +59,7 @@ namespace spot
if (!s)
s = new atomic_prop_set;
atomic_prop_collector v(s);
const_cast<formula*>(f)->accept(v);
f->accept(v);
return s;
}

View file

@ -1,5 +1,8 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2012 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2004, 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -33,7 +36,8 @@ namespace spot
/// @{
/// Set of atomic propositions.
typedef std::set<atomic_prop*, formula_ptr_less_than> atomic_prop_set;
typedef std::set<const atomic_prop*,
formula_ptr_less_than> atomic_prop_set;
/// \brief Return the set of atomic propositions occurring in a formula.
///

View file

@ -1,4 +1,4 @@
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
@ -36,46 +36,46 @@ namespace spot
{
}
formula*
const formula*
clone_visitor::result() const
{
return result_;
}
void
clone_visitor::visit(atomic_prop* ap)
clone_visitor::visit(const atomic_prop* ap)
{
result_ = ap->clone();
}
void
clone_visitor::visit(constant* c)
clone_visitor::visit(const constant* c)
{
result_ = c->clone();
}
void
clone_visitor::visit(bunop* bo)
clone_visitor::visit(const bunop* bo)
{
result_ = bunop::instance(bo->op(), recurse(bo->child()),
bo->min(), bo->max());
}
void
clone_visitor::visit(unop* uo)
clone_visitor::visit(const unop* uo)
{
result_ = unop::instance(uo->op(), recurse(uo->child()));
}
void
clone_visitor::visit(binop* bo)
clone_visitor::visit(const binop* bo)
{
result_ = binop::instance(bo->op(),
recurse(bo->first()), recurse(bo->second()));
}
void
clone_visitor::visit(automatop* ao)
clone_visitor::visit(const automatop* ao)
{
automatop::vec* res = new automatop::vec;
for (unsigned i = 0; i < ao->size(); ++i)
@ -84,7 +84,7 @@ namespace spot
}
void
clone_visitor::visit(multop* mo)
clone_visitor::visit(const multop* mo)
{
multop::vec* res = new multop::vec;
unsigned mos = mo->size();
@ -93,17 +93,16 @@ namespace spot
result_ = multop::instance(mo->op(), res);
}
formula*
clone_visitor::recurse(formula* f)
const formula*
clone_visitor::recurse(const formula* f)
{
return f->clone();
}
formula*
const formula*
clone(const formula* f)
{
formula* res = const_cast<formula*>(f)->clone();
return res;
return f->clone();
}
}
}

View file

@ -1,7 +1,8 @@
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// -*- coding: utf-8 -*-
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -44,32 +45,32 @@ namespace spot
clone_visitor();
virtual ~clone_visitor();
formula* result() const;
const formula* result() const;
void visit(atomic_prop* ap);
void visit(unop* uo);
void visit(binop* bo);
void visit(automatop* mo);
void visit(multop* mo);
void visit(constant* c);
void visit(bunop* c);
void visit(const atomic_prop* ap);
void visit(const unop* uo);
void visit(const binop* bo);
void visit(const automatop* mo);
void visit(const multop* mo);
void visit(const constant* c);
void visit(const bunop* c);
virtual formula* recurse(formula* f);
virtual const formula* recurse(const formula* f);
protected:
formula* result_;
const formula* result_;
};
#if __GNUC__
/// \brief Clone a formula.
/// \ingroup ltl_essential
/// \deprecated Use f->clone() instead.
formula* clone(const formula* f) __attribute__ ((deprecated));
const formula* clone(const formula* f) __attribute__ ((deprecated));
#else
/// \brief Clone a formula.
/// \ingroup ltl_essential
/// \deprecated Use f->clone() instead.
formula* clone(const formula* f);
const formula* clone(const formula* f);
#endif
}
}

View file

@ -1,7 +1,8 @@
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// -*- coding: utf-8 -*-
// Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2006, 2007 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -87,7 +88,8 @@ namespace spot
// Check whether L(l) is a subset of L(g).
bool
language_containment_checker::contained(const formula* l, const formula* g)
language_containment_checker::contained(const formula* l,
const formula* g)
{
if (l == g)
return true;
@ -153,7 +155,7 @@ namespace spot
}
formula*
const formula*
reduce_tau03(const formula* f, bool stronger)
{
if (!f->is_psl_formula())

View file

@ -1,4 +1,4 @@
// Copyright (C) 2011 Laboratoire de Recherche et Developpement de
// Copyright (C) 2011, 2012 Laboratoire de Recherche et Developpement de
// l'Epita (LRDE).
// Copyright (C) 2006 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
@ -88,10 +88,10 @@ namespace spot
/// title = {On Translating Linear Temporal Logic into Alternating and
/// Nondeterministic Automata},
/// institution = {Helsinki University of Technology, Laboratory for
/// Theoretical Computer Science},
/// Theoretical Computer Science},
/// address = {Espoo, Finland},
/// month = dec,
/// number = {A83},
/// number = {A83},
/// pages = {132},
/// type = {Research Report},
/// year = {2003},
@ -106,10 +106,11 @@ namespace spot
///
/// \deprecated Use spot::ltl::ltl_simplifier instead.
#if __GNUC__
formula* reduce_tau03(const formula* f,
bool stronger = true) __attribute__ ((deprecated));
const formula* reduce_tau03(const formula* f,
bool stronger = true)
__attribute__ ((deprecated));
#else
formula* reduce_tau03(const formula* f, bool stronger = true);
const formula* reduce_tau03(const formula* f, bool stronger = true);
#endif
}
}

View file

@ -35,7 +35,7 @@ namespace spot
{
namespace
{
class dotty_visitor: public const_visitor
class dotty_visitor: public visitor
{
public:
typedef Sgi::hash_map<const formula*, int, ptr_hash<formula> > map;

View file

@ -47,7 +47,7 @@ namespace spot
}
virtual void
visit(multop* mo)
visit(const multop* mo)
{
unsigned s = mo->size();
for (unsigned i = 0; i < s; ++i)
@ -58,7 +58,7 @@ namespace spot
}
virtual void
doit_default(formula*)
doit_default(const formula*)
{
++result_;
}
@ -71,7 +71,7 @@ namespace spot
{
virtual void
visit(unop* uo)
visit(const unop* uo)
{
++result_;
// Boolean formula have length one.
@ -80,7 +80,7 @@ namespace spot
}
virtual void
visit(multop* mo)
visit(const multop* mo)
{
// Boolean formula have length one.
if (mo->is_boolean())
@ -104,7 +104,7 @@ namespace spot
length(const formula* f)
{
length_visitor v;
const_cast<formula*>(f)->accept(v);
f->accept(v);
return v.result();
}
@ -112,7 +112,7 @@ namespace spot
length_boolone(const formula* f)
{
length_boolone_visitor v;
const_cast<formula*>(f)->accept(v);
f->accept(v);
return v.result();
}

View file

@ -1,7 +1,8 @@
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// -*- coding: utf-8 -*-
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// d�partement Syst�mes R�partis Coop�ratifs (SRC), Universit� Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -39,10 +40,10 @@ namespace spot
}
void
unabbreviate_logic_visitor::visit(binop* bo)
unabbreviate_logic_visitor::visit(const binop* bo)
{
formula* f1 = recurse(bo->first());
formula* f2 = recurse(bo->second());
const formula* f1 = recurse(bo->first());
const formula* f2 = recurse(bo->second());
binop::type op = bo->op();
switch (op)
@ -50,11 +51,12 @@ namespace spot
/* f1 ^ f2 == (f1 & !f2) | (f2 & !f1) */
case binop::Xor:
{
formula* a = multop::instance(multop::And, f1->clone(),
unop::instance(unop::Not,
f2->clone()));
formula* b = multop::instance(multop::And, f2,
unop::instance(unop::Not, f1));
const formula* a =
multop::instance(multop::And, f1->clone(),
unop::instance(unop::Not, f2->clone()));
const formula* b =
multop::instance(multop::And, f2,
unop::instance(unop::Not, f1));
result_ = multop::instance(multop::Or, a, b);
return;
}
@ -66,8 +68,8 @@ namespace spot
/* f1 <=> f2 == (f1 & f2) | (!f1 & !f2) */
case binop::Equiv:
{
formula* f1c = f1->clone();
formula* f2c = f2->clone();
const formula* f1c = f1->clone();
const formula* f2c = f2->clone();
result_ =
multop::instance(multop::Or,
@ -97,19 +99,19 @@ namespace spot
assert(0);
}
formula*
unabbreviate_logic_visitor::recurse(formula* f)
const formula*
unabbreviate_logic_visitor::recurse(const formula* f)
{
return unabbreviate_logic(f);
}
formula*
const formula*
unabbreviate_logic(const formula* f)
{
if (f->is_sugar_free_boolean())
return f->clone();
unabbreviate_logic_visitor v;
const_cast<formula*>(f)->accept(v);
f->accept(v);
return v.result();
}
}

View file

@ -1,5 +1,8 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2012 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -48,9 +51,9 @@ namespace spot
virtual ~unabbreviate_logic_visitor();
using super::visit;
void visit(binop* bo);
void visit(const binop* bo);
virtual formula* recurse(formula* f);
virtual const formula* recurse(const formula* f);
};
/// \brief Clone and rewrite a formula to remove most of the abbreviated
@ -60,7 +63,7 @@ namespace spot
/// This will rewrite binary operators such as binop::Implies,
/// binop::Equals, and binop::Xor, using only unop::Not, multop::Or,
/// and multop::And.
formula* unabbreviate_logic(const formula* f);
const formula* unabbreviate_logic(const formula* f);
}
}

View file

@ -33,7 +33,7 @@ namespace spot
{
class simplify_mark_visitor : public visitor
{
formula* result_;
const formula* result_;
mark_tools* tools_;
public:
@ -46,44 +46,44 @@ namespace spot
{
}
formula*
const formula*
result()
{
return result_;
}
void
visit(atomic_prop* ao)
visit(const atomic_prop* ao)
{
result_ = ao->clone();
}
void
visit(constant* c)
visit(const constant* c)
{
result_ = c->clone();
}
void
visit(bunop* bo)
visit(const bunop* bo)
{
result_ = bo->clone();
}
void
visit(unop* uo)
visit(const unop* uo)
{
result_ = uo->clone();
}
void
visit(automatop* ao)
visit(const automatop* ao)
{
result_ = ao->clone();
}
void
visit(multop* mo)
visit(const multop* mo)
{
unsigned mos = mo->size();
multop::vec* res = new multop::vec;
@ -101,12 +101,13 @@ namespace spot
break;
case multop::And:
{
typedef std::set<std::pair<formula*, formula*> > pset;
typedef std::set<std::pair<const formula*,
const formula*> > pset;
pset Epairs, EMpairs;
for (unsigned i = 0; i < mos; ++i)
{
formula* f = mo->nth(i);
const formula* f = mo->nth(i);
if (f->kind() != formula::BinOp)
{
@ -114,7 +115,7 @@ namespace spot
}
else
{
binop* bo = static_cast<binop*>(f);
const binop* bo = static_cast<const binop*>(f);
switch (bo->op())
{
case binop::Xor:
@ -157,13 +158,13 @@ namespace spot
}
void
visit(binop* bo)
visit(const binop* bo)
{
result_ = bo->clone();
}
formula*
recurse(formula* f)
const formula*
recurse(const formula* f)
{
return tools_->simplify_mark(f);
}
@ -172,7 +173,7 @@ namespace spot
class mark_visitor : public visitor
{
formula* result_;
const formula* result_;
mark_tools* tools_;
public:
@ -184,44 +185,44 @@ namespace spot
{
}
formula*
const formula*
result()
{
return result_;
}
void
visit(atomic_prop* ap)
visit(const atomic_prop* ap)
{
result_ = ap->clone();
}
void
visit(constant* c)
visit(const constant* c)
{
result_ = c->clone();
}
void
visit(bunop* bo)
visit(const bunop* bo)
{
result_ = bo->clone();
}
void
visit(unop* uo)
visit(const unop* uo)
{
result_ = uo->clone();
}
void
visit(automatop* ao)
visit(const automatop* ao)
{
result_ = ao->clone();
}
void
visit(multop* mo)
visit(const multop* mo)
{
multop::vec* res = new multop::vec;
unsigned mos = mo->size();
@ -231,7 +232,7 @@ namespace spot
}
void
visit(binop* bo)
visit(const binop* bo)
{
switch (bo->op())
{
@ -249,8 +250,8 @@ namespace spot
case binop::EConcatMarked:
case binop::EConcat:
{
formula* f1 = bo->first()->clone();
formula* f2 = recurse(bo->second());
const formula* f1 = bo->first()->clone();
const formula* f2 = recurse(bo->second());
result_ = binop::instance(binop::EConcatMarked, f1, f2);
return;
}
@ -259,8 +260,8 @@ namespace spot
assert(0);
}
formula*
recurse(formula* f)
const formula*
recurse(const formula* f)
{
return tools_->mark_concat_ops(f);
}
@ -301,21 +302,21 @@ namespace spot
}
}
formula*
const formula*
mark_tools::mark_concat_ops(const formula* f)
{
f2f_map::iterator i = markops_.find(f);
if (i != markops_.end())
return i->second->clone();
const_cast<formula*>(f)->accept(*markvisitor_);
f->accept(*markvisitor_);
formula* r = down_cast<mark_visitor*>(markvisitor_)->result();
const formula* r = down_cast<mark_visitor*>(markvisitor_)->result();
markops_[f->clone()] = r->clone();
return r;
}
formula*
const formula*
mark_tools::simplify_mark(const formula* f)
{
if (!f->is_marked())
@ -325,9 +326,10 @@ namespace spot
if (i != simpmark_.end())
return i->second->clone();
const_cast<formula*>(f)->accept(*simpvisitor_);
f->accept(*simpvisitor_);
formula* r = down_cast<simplify_mark_visitor*>(simpvisitor_)->result();
const formula* r =
down_cast<simplify_mark_visitor*>(simpvisitor_)->result();
simpmark_[f->clone()] = r->clone();
return r;
}

View file

@ -1,5 +1,5 @@
// Copyright (C) 2010, 2011 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2010, 2011, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
//
@ -36,9 +36,9 @@ namespace spot
/// \ingroup ltl_rewriting
///
/// \param f The formula to rewrite.
formula* mark_concat_ops(const formula* f);
const formula* mark_concat_ops(const formula* f);
formula* simplify_mark(const formula* f);
const formula* simplify_mark(const formula* f);
mark_tools();
~mark_tools();

View file

@ -1,7 +1,8 @@
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// -*- coding: utf-8 -*-
// Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -27,7 +28,7 @@ namespace spot
{
namespace ltl
{
formula*
const formula*
negative_normal_form(const formula* f, bool negated)
{
if (!negated && f->is_in_nenoform())

View file

@ -1,7 +1,8 @@
// Copyright (C) 2011 Laboratoire de Recherche et Développement de
// -*- coding: utf-8 -*-
// Copyright (C) 2011, 2012 Laboratoire de Recherche et Développement de
// l'Epita (LRDE).
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -45,8 +46,8 @@ namespace spot
/// or spot::ltl::unabbreviate_ltl first. (Calling these functions
/// after spot::ltl::negative_normal_form would likely produce a
/// formula which is not in negative normal form.)
formula* negative_normal_form(const formula* f, bool negated = false);
const formula*
negative_normal_form(const formula* f, bool negated = false);
}
}

View file

@ -1,4 +1,5 @@
// Copyright (C) 2009, 2010, 2011 Laboratoire de Recherche et
// -*- coding: utf-8 -*-
// Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
@ -37,20 +38,20 @@ namespace spot
}
void
postfix_visitor::visit(atomic_prop* ap)
postfix_visitor::visit(const atomic_prop* ap)
{
doit(ap);
}
void
postfix_visitor::visit(unop* uo)
postfix_visitor::visit(const unop* uo)
{
uo->child()->accept(*this);
doit(uo);
}
void
postfix_visitor::visit(binop* bo)
postfix_visitor::visit(const binop* bo)
{
bo->first()->accept(*this);
bo->second()->accept(*this);
@ -58,7 +59,7 @@ namespace spot
}
void
postfix_visitor::visit(automatop* ao)
postfix_visitor::visit(const automatop* ao)
{
unsigned s = ao->size();
for (unsigned i = 0; i < s; ++i)
@ -67,7 +68,7 @@ namespace spot
}
void
postfix_visitor::visit(multop* mo)
postfix_visitor::visit(const multop* mo)
{
unsigned s = mo->size();
for (unsigned i = 0; i < s; ++i)
@ -76,62 +77,62 @@ namespace spot
}
void
postfix_visitor::visit(bunop* so)
postfix_visitor::visit(const bunop* so)
{
so->child()->accept(*this);
doit(so);
}
void
postfix_visitor::visit(constant* c)
postfix_visitor::visit(const constant* c)
{
doit(c);
}
void
postfix_visitor::doit(atomic_prop* ap)
postfix_visitor::doit(const atomic_prop* ap)
{
doit_default(ap);
}
void
postfix_visitor::doit(unop* uo)
postfix_visitor::doit(const unop* uo)
{
doit_default(uo);
}
void
postfix_visitor::doit(binop* bo)
postfix_visitor::doit(const binop* bo)
{
doit_default(bo);
}
void
postfix_visitor::doit(multop* mo)
postfix_visitor::doit(const multop* mo)
{
doit_default(mo);
}
void
postfix_visitor::doit(automatop* ao)
postfix_visitor::doit(const automatop* ao)
{
doit_default(ao);
}
void
postfix_visitor::doit(bunop* so)
postfix_visitor::doit(const bunop* so)
{
doit_default(so);
}
void
postfix_visitor::doit(constant* c)
postfix_visitor::doit(const constant* c)
{
doit_default(c);
}
void
postfix_visitor::doit_default(formula* f)
postfix_visitor::doit_default(const formula* f)
{
(void)f;
// Dummy implementation that does nothing.

View file

@ -1,4 +1,4 @@
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
@ -43,22 +43,22 @@ namespace spot
postfix_visitor();
virtual ~postfix_visitor();
void visit(atomic_prop* ap);
void visit(unop* uo);
void visit(binop* bo);
void visit(multop* mo);
void visit(automatop* c);
void visit(constant* c);
void visit(bunop* c);
void visit(const atomic_prop* ap);
void visit(const unop* uo);
void visit(const binop* bo);
void visit(const multop* mo);
void visit(const automatop* c);
void visit(const constant* c);
void visit(const bunop* c);
virtual void doit(atomic_prop* ap);
virtual void doit(unop* uo);
virtual void doit(binop* bo);
virtual void doit(multop* mo);
virtual void doit(automatop* mo);
virtual void doit(constant* c);
virtual void doit(bunop* c);
virtual void doit_default(formula* f);
virtual void doit(const atomic_prop* ap);
virtual void doit(const unop* uo);
virtual void doit(const binop* bo);
virtual void doit(const multop* mo);
virtual void doit(const automatop* mo);
virtual void doit(const constant* c);
virtual void doit(const bunop* c);
virtual void doit_default(const formula* f);
};
}
}

View file

@ -1,7 +1,8 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2008, 2009, 2010, 2011, 2012 Laboratoire de Recherche
// et Développement de l'Epita (LRDE).
// et Développement de l'Epita (LRDE).
// Copyright (C) 2005 Laboratoire d'Informatique de Paris 6
// (LIP6), département Systèmes Répartis Coopératifs (SRC), Université
// (LIP6), département Systèmes Répartis Coopératifs (SRC), Université
// Pierre et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -35,7 +36,7 @@ namespace spot
{
namespace
{
static formula*
static const formula*
ap_builder(const random_formula* rl, int n)
{
assert(n == 1);
@ -45,7 +46,7 @@ namespace spot
return (*i)->clone();
}
static formula*
static const formula*
true_builder(const random_formula*, int n)
{
assert(n == 1);
@ -53,7 +54,7 @@ namespace spot
return constant::true_instance();
}
static formula*
static const formula*
boolform_builder(const random_formula* rl, int n)
{
assert(n >= 1);
@ -61,7 +62,7 @@ namespace spot
return rs->rb.generate(n);
}
static formula*
static const formula*
false_builder(const random_formula*, int n)
{
assert(n == 1);
@ -69,7 +70,7 @@ namespace spot
return constant::false_instance();
}
static formula*
static const formula*
eword_builder(const random_formula*, int n)
{
assert(n == 1);
@ -78,14 +79,14 @@ namespace spot
}
template <unop::type Op>
static formula*
static const formula*
unop_builder(const random_formula* rl, int n)
{
assert(n >= 2);
return unop::instance(Op, rl->generate(n - 1));
}
static formula*
static const formula*
closure_builder(const random_formula* rl, int n)
{
assert(n >= 2);
@ -94,7 +95,7 @@ namespace spot
}
template <binop::type Op>
static formula*
static const formula*
binop_builder(const random_formula* rl, int n)
{
assert(n >= 3);
@ -104,7 +105,7 @@ namespace spot
}
template <binop::type Op>
static formula*
static const formula*
binop_SERELTL_builder(const random_formula* rl, int n)
{
assert(n >= 3);
@ -115,7 +116,7 @@ namespace spot
}
template <bunop::type Op>
static formula*
static const formula*
bunop_unbounded_builder(const random_formula* rl, int n)
{
assert(n >= 2);
@ -123,7 +124,7 @@ namespace spot
}
template <bunop::type Op>
static formula*
static const formula*
bunop_bounded_builder(const random_formula* rl, int n)
{
assert(n >= 2);
@ -133,7 +134,7 @@ namespace spot
}
template <bunop::type Op>
static formula*
static const formula*
bunop_bool_bounded_builder(const random_formula* rl, int n)
{
assert(n >= 2);
@ -145,7 +146,7 @@ namespace spot
template <multop::type Op>
static formula*
static const formula*
multop_builder(const random_formula* rl, int n)
{
assert(n >= 3);
@ -197,7 +198,7 @@ namespace spot
assert(total_2_and_more_ != 0.0);
}
formula*
const formula*
random_formula::generate(int n) const
{
assert(n > 0);

View file

@ -1,7 +1,8 @@
// Copyright (C) 2010, 2011 Laboratoire de Recherche et Développement de
// l'Epita (LRDE).
// -*- coding: utf-8 -*-
// Copyright (C) 2010, 2011, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2005 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -61,7 +62,7 @@ namespace spot
/// n, because some simple simplifications are performed by the
/// AST. (For instance the formula <code>a | a</code> is
/// automatically reduced to <code>a</code> by spot::ltl::multop.)
formula* generate(int n) const;
const formula* generate(int n) const;
/// \brief Print the priorities of each operator, constants,
/// and atomic propositions.
@ -84,7 +85,7 @@ namespace spot
const char* name;
int min_n;
double proba;
typedef formula* (*builder)(const random_formula* rl, int n);
typedef const formula* (*builder)(const random_formula* rl, int n);
builder build;
void setup(const char* name, int min_n, builder build);
};

View file

@ -1,5 +1,5 @@
// Copyright (C) 2008, 2009, 2010, 2011 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2008, 2009, 2010, 2011, 2012 Laboratoire de Recherche
// et Développement de l'Epita (LRDE).
// Copyright (C) 2004, 2006, 2007 Laboratoire d'Informatique de
// Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
// Université Pierre et Marie Curie.
@ -30,7 +30,7 @@ namespace spot
{
namespace ltl
{
formula*
const formula*
reduce(const formula* f, int opt)
{
ltl_simplifier_options o;
@ -40,7 +40,7 @@ namespace spot
o.containment_checks = opt & Reduce_Containment_Checks;
o.containment_checks_stronger = opt & Reduce_Containment_Checks_Stronger;
ltl_simplifier simplifier(o);
return const_cast<formula*>(simplifier.simplify(f));
return simplifier.simplify(f);
}
bool

View file

@ -1,7 +1,8 @@
// Copyright (C) 2010, 2011 Laboratoire de Recherche et Developpement
// de l'Epita (LRDE).
// -*- coding: utf-8 -*-
// Copyright (C) 2010, 2011, 2012 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2004, 2006 Laboratoire d'Informatique de Paris 6
// (LIP6), département Systèmes Répartis Coopératifs (SRC), Université
// (LIP6), département Systèmes Répartis Coopératifs (SRC), Université
// Pierre et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -70,10 +71,10 @@ namespace spot
///
/// \deprecated Use spot::ltl::ltl_simplifier instead.
#if __GNUC__
formula*
const formula*
reduce(const formula* f, int opt = Reduce_All) __attribute__ ((deprecated));
#else
formula* reduce(const formula* f, int opt = Reduce_All);
const formula* reduce(const formula* f, int opt = Reduce_All);
#endif
/// @}

View file

@ -1,7 +1,8 @@
// Copyright (C) 2010 Laboratoire de Recherche et Développement de
// -*- coding: utf-8 -*-
// Copyright (C) 2010, 2012 Laboratoire de Recherche et Développement de
// l'Epita (LRDE).
// Copyright (C) 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -40,10 +41,10 @@ namespace spot
}
void
simplify_f_g_visitor::visit(binop* bo)
simplify_f_g_visitor::visit(const binop* bo)
{
formula* f1 = recurse(bo->first());
formula* f2 = recurse(bo->second());
const formula* f1 = recurse(bo->first());
const formula* f2 = recurse(bo->second());
binop::type op = bo->op();
switch (op)
@ -89,19 +90,19 @@ namespace spot
assert(0);
}
formula*
simplify_f_g_visitor::recurse(formula* f)
const formula*
simplify_f_g_visitor::recurse(const formula* f)
{
return simplify_f_g(f);
}
formula*
const formula*
simplify_f_g(const formula* f)
{
if (f->is_boolean())
return f->clone();
simplify_f_g_visitor v;
const_cast<formula*>(f)->accept(v);
f->accept(v);
return v.result();
}
}

View file

@ -1,7 +1,8 @@
// Copyright (C) 2010 Laboratoire de Recherche et Développement de
// l'Epita (LRDE).
// -*- coding: utf-8 -*-
// Copyright (C) 2010, 2012 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -49,9 +50,9 @@ namespace spot
virtual ~simplify_f_g_visitor();
using super::visit;
void visit(binop* bo);
void visit(const binop* bo);
virtual formula* recurse(formula* f);
virtual const formula* recurse(const formula* f);
};
/// \brief Replace <code>true U f</code> and <code>false R g</code> by
@ -65,7 +66,7 @@ namespace spot
/// - a W false = G a
///
/// \ingroup ltl_rewriting
formula* simplify_f_g(const formula* f);
const formula* simplify_f_g(const formula* f);
}
}

File diff suppressed because it is too large Load diff

View file

@ -77,7 +77,7 @@ namespace spot
/// Simplify the formula \a f (using options supplied to the
/// constructor).
formula* simplify(const formula* f);
const formula* simplify(const formula* f);
/// Build the negative normal form of formula \a f.
/// All negations of the formula are pushed in front of the
@ -87,7 +87,8 @@ namespace spot
/// \param f The formula to normalize.
/// \param negated If \c true, return the negative normal form of
/// \c !f
formula* negative_normal_form(const formula* f, bool negated = false);
const formula*
negative_normal_form(const formula* f, bool negated = false);
/// \brief Syntactic implication.
///

View file

@ -33,7 +33,7 @@ namespace spot
// E°
class snf_visitor: public visitor
{
formula* result_;
const formula* result_;
snf_cache* cache_;
public:
@ -41,27 +41,27 @@ namespace spot
{
}
formula*
const formula*
result() const
{
return result_;
}
void
visit(atomic_prop*)
visit(const atomic_prop*)
{
assert(!"unexpected operator");
}
void
visit(constant* c)
visit(const constant* c)
{
assert(c == constant::empty_word_instance());
result_ = constant::false_instance();
}
void
visit(bunop* bo)
visit(const bunop* bo)
{
bunop::type op = bo->op();
switch (op)
@ -75,25 +75,25 @@ namespace spot
}
void
visit(unop*)
visit(const unop*)
{
assert(!"unexpected operator");
}
void
visit(binop*)
visit(const binop*)
{
assert(!"unexpected operator");
}
void
visit(automatop*)
visit(const automatop*)
{
assert(!"unexpected operator");
}
void
visit(multop* mo)
visit(const multop* mo)
{
multop::type op = mo->op();
switch (op)
@ -134,14 +134,14 @@ namespace spot
break;
case multop::AndRat:
// FIXME: Can we deal with AndRat in a better way
// when it accepts [*0].
// when it accepts [*0]?
result_ = mo->clone();
break;
}
}
formula*
recurse(formula* f)
const formula*
recurse(const formula* f)
{
if (!f->accepts_eword())
return f->clone();
@ -164,11 +164,11 @@ namespace spot
}
formula*
const formula*
star_normal_form(const formula* sere, snf_cache* cache)
{
snf_visitor v(cache);
return v.recurse(const_cast<formula*>(sere));
return v.recurse(sere);
}
}

View file

@ -52,8 +52,8 @@ namespace spot
///
/// \param sere the SERE to rewrite
/// \param cache an optional cache
formula* star_normal_form(const formula* sere,
snf_cache* cache = 0);
const formula* star_normal_form(const formula* sere,
snf_cache* cache = 0);
}
}

View file

@ -183,11 +183,11 @@ namespace spot
// If the formula has the form (!b)[*], return b.
static
formula*
const formula*
strip_star_not(const formula* f)
{
if (bunop* s = is_Star(f))
if (unop* n = is_Not(s->child()))
if (const bunop* s = is_Star(f))
if (const unop* n = is_Not(s->child()))
return n->child();
return 0;
}
@ -195,11 +195,11 @@ namespace spot
// If the formula as position i in multop mo has the form
// (!b)[*];b with b being a Boolean formula, return b.
static
formula*
const formula*
match_goto(const multop *mo, unsigned i)
{
assert(i + 1 < mo->size());
formula* b = strip_star_not(mo->nth(i));
const formula* b = strip_star_not(mo->nth(i));
if (!b || !b->is_boolean())
return 0;
if (mo->nth(i + 1) == b)
@ -207,7 +207,7 @@ namespace spot
return 0;
}
class to_string_visitor: public const_visitor
class to_string_visitor: public visitor
{
public:
to_string_visitor(std::ostream& os,
@ -301,13 +301,13 @@ namespace spot
in_ratexp_ = true;
top_level_ = true;
{
multop* m = is_multop(bo->first(), multop::Concat);
const multop* m = is_multop(bo->first(), multop::Concat);
if (m)
{
unsigned s = m->size();
if (m->nth(s - 1) == constant::true_instance())
{
formula* tmp = m->all_but(s - 1);
const formula* tmp = m->all_but(s - 1);
tmp->accept(*this);
tmp->destroy();
onelast = true;
@ -409,11 +409,11 @@ namespace spot
switch (op)
{
case bunop::Star:
if (multop* mo = is_Concat(c))
if (const multop* mo = is_Concat(c))
{
unsigned s = mo->size();
if (s == 2)
if (formula* b = match_goto(mo, 0))
if (const formula* b = match_goto(mo, 0))
{
c = b;
sugar = Goto;
@ -602,7 +602,7 @@ namespace spot
if (i + 1 < max)
{
// Try to match (!b)[*];b
formula* b = match_goto(mo, i);
const formula* b = match_goto(mo, i);
if (b)
{
emit_bunop_child(b);
@ -622,10 +622,10 @@ namespace spot
continue;
}
// Try to match ((!b)[*];b)[*i..j];(!b)[*]
if (bunop* s = is_Star(mo->nth(i)))
if (formula* b2 = strip_star_not(mo->nth(i + 1)))
if (multop* sc = is_Concat(s->child()))
if (formula* b1 = match_goto(sc, 0))
if (const bunop* s = is_Star(mo->nth(i)))
if (const formula* b2 = strip_star_not(mo->nth(i + 1)))
if (const multop* sc = is_Concat(s->child()))
if (const formula* b1 = match_goto(sc, 0))
if (b1 == b2)
{
emit_bunop_child(b1);
@ -754,7 +754,7 @@ namespace spot
to_spin_string(const formula* f, std::ostream& os, bool full_parent)
{
// Remove xor, ->, and <-> first.
formula* fu = unabbreviate_logic(f);
const formula* fu = unabbreviate_logic(f);
// Also remove W and M.
f = unabbreviate_wm(fu);
fu->destroy();

View file

@ -1,4 +1,4 @@
// Copyright (C) 2009, 2010 Laboratoire de Recherche et Développement
// Copyright (C) 2009, 2010, 2012 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2003 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
@ -37,7 +37,7 @@ namespace spot
}
void
unabbreviate_ltl_visitor::visit(unop* uo)
unabbreviate_ltl_visitor::visit(const unop* uo)
{
switch (uo->op())
{
@ -61,19 +61,19 @@ namespace spot
}
}
formula*
unabbreviate_ltl_visitor::recurse(formula* f)
const formula*
unabbreviate_ltl_visitor::recurse(const formula* f)
{
return unabbreviate_ltl(f);
}
formula*
const formula*
unabbreviate_ltl(const formula* f)
{
if (f->is_sugar_free_boolean() && f->is_sugar_free_ltl())
return f->clone();
unabbreviate_ltl_visitor v;
const_cast<formula*>(f)->accept(v);
f->accept(v);
return v.result();
}

View file

@ -1,7 +1,8 @@
// Copyright (C) 2011 Laboratoire de Recherche et Développement de
// -*- coding: utf-8 -*-
// Copyright (C) 2011, 2012 Laboratoire de Recherche et Développement de
// l'Epita (LRDE).
// Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6 (LIP6),
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// département Systèmes Répartis Coopératifs (SRC), Université Pierre
// et Marie Curie.
//
// This file is part of Spot, a model checking library.
@ -53,9 +54,9 @@ namespace spot
virtual ~unabbreviate_ltl_visitor();
using super::visit;
void visit(unop* uo);
void visit(const unop* uo);
formula* recurse(formula* f);
const formula* recurse(const formula* f);
};
/// \brief Clone and rewrite a formula to remove most of the
@ -66,7 +67,7 @@ namespace spot
///
/// This will also rewrite unary operators such as unop::F,
/// and unop::G, using only binop::U, and binop::R.
formula* unabbreviate_ltl(const formula* f);
const formula* unabbreviate_ltl(const formula* f);
}
}

View file

@ -44,10 +44,10 @@ namespace spot
}
using super::visit;
void visit(binop* bo)
void visit(const binop* bo)
{
formula* f1 = recurse(bo->first());
formula* f2 = recurse(bo->second());
const formula* f1 = recurse(bo->first());
const formula* f2 = recurse(bo->second());
binop::type op = bo->op();
switch (op)
{
@ -76,7 +76,7 @@ namespace spot
}
}
virtual formula* recurse(formula* f)
virtual const formula* recurse(const formula* f)
{
if (f->is_boolean())
return f->clone();
@ -86,11 +86,11 @@ namespace spot
};
}
formula*
const formula*
unabbreviate_wm(const formula* f)
{
unabbreviate_wm_visitor v;
return v.recurse(const_cast<formula*>(f));
return v.recurse(f);
}
}
}

View file

@ -37,7 +37,7 @@ namespace spot
/// and <code>a M b</code> is replaced by <code>b U (b & a)</code>.
///
/// \ingroup ltl_rewriting
formula* unabbreviate_wm(const formula* f);
const formula* unabbreviate_wm(const formula* f);
}
}