parsetl: change the interface to return a parsed_formula

This gets the interface of all the functions parsing formula in line
with the interface of the automaton parser: both return a "parsed_*"
object (parsed_formula or parsed_automaton) that contains the said
object and its list of errors.  Doing so avoid having to declare the
parse_error_list in advance.

* spot/tl/parse.hh, spot/parsetl/parsetl.yy: Do the change.
* spot/parsetl/fmterror.cc: Adjust the error printer.
* NEWS: Document it.
* bin/common_finput.cc, bin/common_finput.hh, bin/ltlcross.cc,
bin/ltldo.cc, bin/ltlfilt.cc, doc/org/tut01.org, doc/org/tut02.org,
doc/org/tut10.org, doc/org/tut20.org, python/ajax/spotcgi.in,
python/spot/impl.i, spot/parseaut/parseaut.yy, tests/core/checkpsl.cc,
tests/core/checkta.cc, tests/core/consterm.cc, tests/core/emptchk.cc,
tests/core/equalsf.cc, tests/core/ikwiad.cc, tests/core/kind.cc,
tests/core/length.cc, tests/core/ltlprod.cc, tests/core/ltlrel.cc,
tests/core/randtgba.cc, tests/core/readltl.cc, tests/core/reduc.cc,
tests/core/safra.cc, tests/core/syntimpl.cc, tests/core/tostring.cc,
tests/ltsmin/modelcheck.cc, tests/python/alarm.py,
tests/python/interdep.py, tests/python/ltl2tgba.py,
tests/python/ltlparse.py: Adjust all uses.
This commit is contained in:
Alexandre Duret-Lutz 2016-02-17 19:39:43 +01:00
parent cf4f58c34b
commit 22f442f758
37 changed files with 359 additions and 374 deletions

View file

@ -1,5 +1,5 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2014, 2015 Laboratoire de Recherche et Développement
// Copyright (C) 2014, 2015, 2016 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
@ -60,11 +60,10 @@ main(int argc, char** argv)
if (s.empty() || s[0] == '#') // Skip comments
continue;
spot::parse_error_list pe;
auto fpos = spot::parse_infix_psl(s, pe);
if (spot::format_parse_errors(std::cerr, s, pe))
auto pfpos = spot::parse_infix_psl(s);
if (pfpos.format_errors(std::cerr))
return 2;
auto fpos = pfpos.f;
auto fneg = spot::formula::Not(fpos);

View file

@ -1,6 +1,6 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2014, 2015 Laboratoire de Recherche et Développement
// de l'Epita (LRDE).
// Copyright (C) 2014, 2015, 2016 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
//
@ -85,11 +85,11 @@ main(int argc, char** argv)
if (s.empty() || s[0] == '#') // Skip comments
continue;
spot::parse_error_list pe;
auto f = spot::parse_infix_psl(s, pe);
auto pf = spot::parse_infix_psl(s);
if (spot::format_parse_errors(std::cerr, s, pe))
if (pf.format_errors(std::cerr))
return 2;
auto f = pf.f;
{

View file

@ -1,6 +1,6 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2010, 2011, 2012, 2015 Laboratoire de Recherche et
// Dévelopement de l'Epita (LRDE).
// Copyright (C) 2010, 2011, 2012, 2015, 2016 Laboratoire de Recherche
// et Dévelopement de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
//
@ -58,12 +58,11 @@ main(int argc, char **argv)
std::getline(ss, form, ',');
ss >> expected;
spot::parse_error_list p1;
auto f1 = spot::parse_infix_sere(form, p1);
if (spot::format_parse_errors(std::cerr, form, p1))
auto pf1 = spot::parse_infix_sere(form);
if (pf1.format_errors(std::cerr))
return 2;
bool b = f1.accepts_eword();
bool b = pf1.f.accepts_eword();
std::cout << form << ',' << b << '\n';
if (b != expected)
{

View file

@ -1,6 +1,6 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2014, 2015 Laboratoire de Recherche et Développement de
// l'Epita (LRDE).
// Copyright (C) 2014, 2015, 2016 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
//
@ -89,10 +89,10 @@ main(int argc, char** argv)
int runs = atoi(tokens[0].c_str());
spot::parse_error_list pe;
auto f = spot::parse_infix_psl(tokens[1], pe);
if (spot::format_parse_errors(std::cerr, tokens[1], pe))
auto pf = spot::parse_infix_psl(tokens[1]);
if (pf.format_errors(std::cerr))
return 2;
auto f = pf.f;
auto d = spot::make_bdd_dict();

View file

@ -1,5 +1,5 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2015 Laboratoire de
// Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2015, 2016 Laboratoire de
// Recherche et Développement de l'Epita (LRDE).
// Copyright (C) 2003, 2004, 2006 Laboratoire d'Informatique de
// Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
@ -95,21 +95,20 @@ main(int argc, char** argv)
return 2;
}
spot::parse_error_list p2;
auto f2 = spot::parse_infix_psl(formulas[size - 1], p2);
auto pf2 = spot::parse_infix_psl(formulas[size - 1]);
if (spot::format_parse_errors(std::cerr, formulas[size - 1], p2))
if (pf2.format_errors(std::cerr))
return 2;
auto f2 = pf2.f;
for (unsigned n = 0; n < size - 1; ++n)
{
spot::parse_error_list p1;
auto f1 = spot::parse_infix_psl(formulas[n], p1);
auto pf1 = spot::parse_infix_psl(formulas[n]);
if (check_first &&
spot::format_parse_errors(std::cerr, formulas[n], p1))
if (check_first && pf1.format_errors(std::cerr))
return 2;
auto f1 = pf1.f;
int exit_code = 0;

View file

@ -908,11 +908,11 @@ checked_main(int argc, char** argv)
case TransTAA:
case TransCompo:
{
spot::parse_error_list pel;
tm.start("parsing formula");
f = spot::parse_infix_psl(input, pel, env, debug_opt);
auto pf = spot::parse_infix_psl(input, env, debug_opt);
tm.stop("parsing formula");
exit_code = spot::format_parse_errors(std::cerr, input, pel);
exit_code = pf.format_errors(std::cerr);
f = pf.f;
}
break;
}

View file

@ -1,5 +1,5 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2010, 2012, 2015 Laboratoire de Recherche et
// Copyright (C) 2010, 2012, 2015, 2016 Laboratoire de Recherche et
// Developement de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
@ -59,9 +59,10 @@ main(int argc, char **argv)
std::getline(ss, expected);
spot::parse_error_list p1;
auto f1 = spot::parse_infix_psl(form, p1);
if (spot::format_parse_errors(std::cerr, form, p1))
auto pf1 = spot::parse_infix_psl(form);
if (pf1.format_errors(std::cerr))
return 2;
auto f1 = pf1.f;
std::ostringstream so;
spot::print_formula_props(so, f1, true);

View file

@ -1,6 +1,6 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2012, 2015 Laboratoire de Recherche et Developement de
// l'Epita (LRDE).
// Copyright (C) 2012, 2015, 2016 Laboratoire de Recherche et
// Developement de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
//
@ -45,11 +45,10 @@ main(int argc, char **argv)
}
{
spot::parse_error_list p1;
auto f1 = spot::parse_infix_psl(argv[1], p1);
if (spot::format_parse_errors(std::cerr, argv[1], p1))
auto pf1 = spot::parse_infix_psl(argv[1]);
if (pf1.format_errors(std::cerr))
return 2;
auto f1 = pf1.f;
if (boolone)
std::cout << spot::length_boolone(f1) << std::endl;

View file

@ -1,6 +1,6 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2008, 2009, 2012, 2014, 2015 Laboratoire de Recherche
// et Développement de l'Epita (LRDE).
// Copyright (C) 2008, 2009, 2012, 2014, 2015, 2016 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 et Marie Curie.
@ -46,17 +46,15 @@ main(int argc, char** argv)
{
spot::environment& env(spot::default_environment::instance());
spot::parse_error_list pel1;
auto f1 = spot::parse_infix_psl(argv[1], pel1, env);
if (spot::format_parse_errors(std::cerr, argv[1], pel1))
auto pf1 = spot::parse_infix_psl(argv[1], env);
if (pf1.format_errors(std::cerr))
return 2;
auto f1 = pf1.f;
spot::parse_error_list pel2;
auto f2 = spot::parse_infix_psl(argv[2], pel2, env);
if (spot::format_parse_errors(std::cerr, argv[2], pel2))
auto pf2 = spot::parse_infix_psl(argv[2], env);
if (pf2.format_errors(std::cerr))
return 2;
auto f2 = pf2.f;
auto dict = spot::make_bdd_dict();
{

View file

@ -1,5 +1,5 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2013, 2014, 2015 Laboratoire de Recherche et Developement
// Copyright (C) 2013, 2014, 2015, 2016 Laboratoire de Recherche et Developement
// de l'Epita (LRDE).
//
// This file is part of Spot, a model checking library.
@ -38,11 +38,10 @@ main(int argc, char **argv)
syntax(argv[0]);
{
spot::parse_error_list p1;
auto f1 = spot::parse_infix_psl(argv[1], p1);
if (spot::format_parse_errors(std::cerr, argv[1], p1))
auto pf1 = spot::parse_infix_psl(argv[1]);
if (pf1.format_errors(std::cerr))
return 2;
auto f1 = pf1.f;
spot::relabeling_map* m = new spot::relabeling_map;
auto f2 = spot::relabel_bse(f1, spot::Pnn, m);

View file

@ -1,5 +1,5 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2015 Laboratoire
// Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2015, 2016 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),
@ -860,15 +860,14 @@ main(int argc, char** argv)
break;
else if (input == "")
break;
spot::parse_error_list pel;
auto f = spot::parse_infix_psl(input, pel, env);
if (spot::format_parse_errors(std::cerr, input, pel))
auto pf = spot::parse_infix_psl(input, env);
if (pf.format_errors(std::cerr))
{
exit_code = 1;
break;
}
formula = spot::ltl_to_tgba_fm(f, dict, true);
auto* tmp = spot::atomic_prop_collect(f);
formula = spot::ltl_to_tgba_fm(pf.f, dict, true);
auto* tmp = spot::atomic_prop_collect(pf.f);
for (auto i: *tmp)
apf->insert(i);
delete tmp;

View file

@ -1,6 +1,6 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2008, 2009, 2012, 2015 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2008, 2009, 2012, 2015, 2016 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 et Marie Curie.
@ -55,12 +55,13 @@ main(int argc, char** argv)
{
spot::environment& env(spot::default_environment::instance());
spot::parse_error_list pel;
auto f = spot::parse_infix_psl(argv[formula_index], pel, env, debug);
exit_code =
spot::format_parse_errors(std::cerr, argv[formula_index], pel);
auto f = [&]()
{
auto pf = spot::parse_infix_psl(argv[formula_index], env, debug);
exit_code = pf.format_errors(std::cerr);
return pf.f;
}();
if (f)
{

View file

@ -1,5 +1,5 @@
// -*- coding: utf-8 -*_
// Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2015 Laboratoire
// Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2015, 2016 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),
@ -178,17 +178,17 @@ main(int argc, char** argv)
}
while (input == "");
spot::parse_error_list p1;
f1 = spot::parse_infix_psl(input, p1);
if (spot::format_parse_errors(std::cerr, input, p1))
auto pf1 = spot::parse_infix_psl(input);
if (pf1.format_errors(std::cerr))
return 2;
f1 = pf1.f;
}
else
{
spot::parse_error_list p1;
f1 = spot::parse_infix_psl(argv[2], p1);
if (spot::format_parse_errors(std::cerr, argv[2], p1))
auto pf1 = spot::parse_infix_psl(argv[2]);
if (pf1.format_errors(std::cerr))
return 2;
f1 = pf1.f;
}
if (argc == 4)
@ -199,10 +199,10 @@ main(int argc, char** argv)
exit(2);
}
spot::parse_error_list p2;
f2 = spot::parse_infix_psl(argv[3], p2);
if (spot::format_parse_errors(std::cerr, argv[3], p2))
auto pf2 = spot::parse_infix_psl(argv[3]);
if (pf2.format_errors(std::cerr))
return 2;
f2 = pf2.f;
}
{

View file

@ -111,13 +111,12 @@ int main(int argc, char* argv[])
spot::twa_graph_ptr res;
if (in_ltl)
{
spot::parse_error_list pel;
spot::formula f = spot::parse_infix_psl(input, pel);
if (spot::format_parse_errors(std::cerr, input, pel))
auto pf = spot::parse_infix_psl(input);
if (pf.format_errors(std::cerr))
return 2;
spot::translator trans(dict);
trans.set_pref(spot::postprocessor::Deterministic);
auto tmp = trans.run(f);
auto tmp = trans.run(pf.f);
res = spot::tgba_determinize(tmp, pretty_print, scc_opt,
use_bisim, use_stutter);
}

View file

@ -1,6 +1,6 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2015 Laboratoire de
// Recherche et Développement de l'Epita (LRDE).
// Copyright (C) 2008, 2009, 2010, 2011, 2012, 2014, 2015, 2016
// 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 et Marie Curie.
@ -45,20 +45,18 @@ main(int argc, char** argv)
int exit_return = 0;
{
spot::parse_error_list p1;
auto ftmp1 = spot::parse_infix_psl(argv[2], p1);
auto ftmp1 = spot::parse_infix_psl(argv[2]);
if (spot::format_parse_errors(std::cerr, argv[2], p1))
if (ftmp1.format_errors(std::cerr))
return 2;
spot::parse_error_list p2;
auto ftmp2 = spot::parse_infix_psl(argv[3], p2);
auto ftmp2 = spot::parse_infix_psl(argv[3]);
if (spot::format_parse_errors(std::cerr, argv[3], p2))
if (ftmp2.format_errors(std::cerr))
return 2;
spot::formula f1 = spot::negative_normal_form(ftmp1);
spot::formula f2 = spot::negative_normal_form(ftmp2);
spot::formula f1 = spot::negative_normal_form(ftmp1.f);
spot::formula f2 = spot::negative_normal_form(ftmp2.f);
std::string f1s = spot::str_psl(f1);
std::string f2s = spot::str_psl(f2);

View file

@ -1,6 +1,6 @@
// -*- coding: utf-8 -*-
// Copyright (C) 2008, 2009, 2012, 2015 Laboratoire de Recherche et
// Développement de l'Epita (LRDE).
// Copyright (C) 2008, 2009, 2012, 2015, 2016 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
// et Marie Curie.
@ -40,11 +40,10 @@ main(int argc, char **argv)
syntax(argv[0]);
{
spot::parse_error_list p1;
auto f1 = spot::parse_infix_psl(argv[1], p1);
if (spot::format_parse_errors(std::cerr, argv[1], p1))
auto pf1 = spot::parse_infix_psl(argv[1]);
if (pf1.format_errors(std::cerr))
return 2;
auto f1 = pf1.f;
// The string generated from an abstract tree should be parsable
// again.
@ -52,10 +51,10 @@ main(int argc, char **argv)
std::string f1s = spot::str_psl(f1);
std::cout << f1s << '\n';
auto f2 = spot::parse_infix_psl(f1s, p1);
if (spot::format_parse_errors(std::cerr, f1s, p1))
auto pf2 = spot::parse_infix_psl(f1s);
if (pf2.format_errors(std::cerr))
return 2;
auto f2 = pf2.f;
// This second abstract tree should be equal to the first.

View file

@ -192,9 +192,9 @@ checked_main(int argc, char **argv)
tm.start("parsing formula");
{
spot::parse_error_list pel;
f = spot::parse_infix_psl(argv[2], pel, env, false);
exit_code = spot::format_parse_errors(std::cerr, argv[2], pel);
auto pf = spot::parse_infix_psl(argv[2], env, false);
exit_code = pf.format_errors(std::cerr);
f = pf.f;
}
tm.stop("parsing formula");

View file

@ -1,6 +1,6 @@
# -*- mode: python; coding: utf-8 -*-
# Copyright (C) 2012, 2014, 2015 Laboratoire de Recherche et Développement
# de l'Epita
# Copyright (C) 2012, 2014, 2015, 2016 Laboratoire de Recherche et
# Développement de l'Epita
#
# This file is part of Spot, a model checking library.
#
@ -43,8 +43,7 @@ P_Rbt2.moins || P_Rbt2.stop))-> G((F "map[0]==1") && (F "map[1]==1")
"map[9]==3")))"""
e = spot.default_environment.instance()
p = spot.empty_parse_error_list()
f = spot.parse_infix_psl(f, p, e)
pf = spot.parse_infix_psl(f, e)
d = spot.make_bdd_dict()
spot.unblock_signal(signal.SIGALRM)
@ -58,9 +57,9 @@ if child != 0:
# If the child returns, before we get the alarm it's a bug.
exit(1)
# This is expected to take WAY more that 2s.
# This is expected to take WAY more than 2s.
print("Before")
spot.ltl_to_tgba_fm(f, d, True)
spot.ltl_to_tgba_fm(pf.f, d, True)
print("After")
exit(1)

View file

@ -1,5 +1,5 @@
# -*- mode: python; coding: utf-8 -*-
# Copyright (C) 2010, 2012, 2014, 2015 Laboratoire de Recherche et
# Copyright (C) 2010, 2012, 2014, 2015, 2016 Laboratoire de Recherche et
# Développement de l'EPITA.
# Copyright (C) 2003, 2004 Laboratoire d'Informatique de Paris 6
# (LIP6), département Systèmes Répartis Coopératifs (SRC), Université
@ -29,12 +29,11 @@ import sys
simp = spot.tl_simplifier()
e = spot.default_environment.instance()
p = spot.empty_parse_error_list()
f = spot.parse_infix_psl('GFa', p, e)
pf = spot.parse_infix_psl('GFa', e)
d = simp.get_dict()
a = spot.ltl_to_tgba_fm(f, d)
g = spot.parse_infix_boolean('b&c', p, e)
b = simp.as_bdd(g)
a = spot.ltl_to_tgba_fm(pf.f, d)
g = spot.parse_infix_boolean('b&c', e)
b = simp.as_bdd(g.f)
buddy.bdd_printset(b); spot.nl_cout()
del g
@ -54,5 +53,5 @@ del it
del s0
del b
del c
del f
del pf
del simp

View file

@ -1,5 +1,5 @@
# -*- mode: python; coding: utf-8 -*-
# Copyright (C) 2009, 2010, 2012, 2014, 2015 Laboratoire de Recherche et
# Copyright (C) 2009, 2010, 2012, 2014, 2015, 2016 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
@ -83,11 +83,11 @@ cout = spot.get_cout()
cerr = spot.get_cerr()
e = spot.default_environment.instance()
p = spot.empty_parse_error_list()
f = spot.parse_infix_psl(args[0], p, e, debug_opt)
if spot.format_parse_errors(cerr, args[0], p):
pf = spot.parse_infix_psl(args[0], e, debug_opt)
if pf.format_errors(cerr):
exit_code = 1
f = pf.f
dict = spot.make_bdd_dict()
@ -128,5 +128,6 @@ if f:
else:
exit_code = 1
del pf
del dict
assert spot.fnode_instances_check()

View file

@ -1,5 +1,5 @@
# -*- mode: python; coding: utf-8 -*-
# Copyright (C) 2009, 2010, 2012, 2014, 2015 Laboratoire de Recherche et
# Copyright (C) 2009, 2010, 2012, 2014, 2015, 2016 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
@ -24,22 +24,21 @@ import sys
import spot
e = spot.default_environment.instance()
p = spot.empty_parse_error_list()
l = ['GFa', 'a U (((b)) xor c)', '!(FFx <=> Fx)', 'a \/ a \/ b \/ a \/ a'];
for str1 in l:
f = spot.parse_infix_psl(str1, p, e, False)
if spot.format_parse_errors(spot.get_cout(), str1, p):
pf = spot.parse_infix_psl(str1, e, False)
if pf.format_errors(spot.get_cout()):
sys.exit(1)
str2 = str(f)
del f
str2 = str(pf.f)
del pf
sys.stdout.write(str2 + "\n")
# Try to reparse the stringified formula
f = spot.parse_infix_psl(str2, p, e)
if spot.format_parse_errors(spot.get_cout(), str2, p):
pf = spot.parse_infix_psl(str2, e)
if pf.format_errors(spot.get_cout()):
sys.exit(1)
sys.stdout.write(str(f) + "\n")
del f
sys.stdout.write(str(pf.f) + "\n")
del pf
assert spot.fnode_instances_check()