cgi: Add an nondeterministic monitor option

* src/tgbaalgos/postproc.hh (run): Rename the first argument as
input_disown to help Swig.
* wrap/python/spot.i: Wrap spot::postprocessor.
* wrap/python/ajax/ltl2tgba.html, wrap/python/ajax/protocol.txt:
Add an option for nondeterministic monitor.
* wrap/python/ajax/spot.in: Honor the new option, and rewrite the
monitor production using postprocessor.
This commit is contained in:
Alexandre Duret-Lutz 2013-03-05 22:02:34 +01:00
parent c892599494
commit abb5170565
5 changed files with 29 additions and 10 deletions

View file

@ -1,6 +1,6 @@
// -*- coding: utf-8 -*- // -*- coding: utf-8 -*-
// Copyright (C) 2012 Laboratoire de Recherche et Développement de // Copyright (C) 2012, 2013 Laboratoire de Recherche et Développement
// l'Epita (LRDE). // de l'Epita (LRDE).
// //
// This file is part of Spot, a model checking library. // This file is part of Spot, a model checking library.
// //
@ -84,8 +84,8 @@ namespace spot
level_ = level; level_ = level;
} }
/// Return the optimized automaton and delete \a input. /// Return the optimized automaton and delete \a input_disown.
const tgba* run(const tgba* input, const ltl::formula* f); const tgba* run(const tgba* input_disown, const ltl::formula* f);
private: private:
output_type type_; output_type type_;

View file

@ -504,6 +504,10 @@ an identifier: <span class="formula">aUb</span> is an atomic proposition, unlike
<INPUT type="radio" name="mf" value="d" checked> <INPUT type="radio" name="mf" value="d" checked>
a deterministic monitor a deterministic monitor
</label><br> </label><br>
<label class="rtip" title="A nondeterministic monitor is an NFA that accepts all the prefixes of the executions that satisfy the formula.">
<INPUT type="radio" name="mf" value="n" checked>
a nondeterministic monitor
</label><br>
</div> </div>
<div id="tabs-oa"> <div id="tabs-oa">
Translate the (simplified) formula as:<br> Translate the (simplified) formula as:<br>

View file

@ -36,9 +36,10 @@ Type of automaton if o=a (pick one)
af=s SBA af=s SBA
af=i Spin neverclaim af=i Spin neverclaim
Type of monitor if o=m (pick one -- no choice) Type of monitor if o=m (pick one)
mf=d mf=d deterministic
mf=n nondeterministic
Type of automaton for run if o=r (pick one) Type of automaton for run if o=r (pick one)

View file

@ -571,9 +571,15 @@ elif translator == 'l3':
# Monitor output # Monitor output
if output_type == 'm': if output_type == 'm':
issba = False issba = True
automaton = spot.scc_filter(automaton) mf = form.getfirst('mf', 'd')
automaton = spot.minimize_monitor(automaton) pp = spot.postprocessor()
pp.set_type(spot.postprocessor.Monitor)
if mf == 'd':
pp.set_pref(spot.postprocessor.Deterministic)
elif mf == 'n':
pp.set_pref(spot.postprocessor.Small)
automaton = pp.run(automaton, f)
unbufprint('<div class="automata-stats">') unbufprint('<div class="automata-stats">')
dont_run_dot = print_stats(automaton) dont_run_dot = print_stats(automaton)
unbufprint('</div>') unbufprint('</div>')

View file

@ -1,5 +1,5 @@
// -*- coding: utf-8 -*- // -*- coding: utf-8 -*-
// Copyright (C) 2009, 2010, 2011, 2012 Laboratoire de Recherche // Copyright (C) 2009, 2010, 2011, 2012, 2013 Laboratoire de Recherche
// et Développement de l'Epita (LRDE). // et Développement de l'Epita (LRDE).
// Copyright (C) 2003, 2004, 2005, 2006 Laboratoire d'Informatique // Copyright (C) 2003, 2004, 2005, 2006 Laboratoire d'Informatique
// de Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC), // de Paris 6 (LIP6), département Systèmes Répartis Coopératifs (SRC),
@ -108,6 +108,7 @@ namespace std {
#include "tgbaalgos/stats.hh" #include "tgbaalgos/stats.hh"
#include "tgbaalgos/isdet.hh" #include "tgbaalgos/isdet.hh"
#include "tgbaalgos/simulation.hh" #include "tgbaalgos/simulation.hh"
#include "tgbaalgos/postproc.hh"
#include "tgbaparse/public.hh" #include "tgbaparse/public.hh"
@ -211,6 +212,12 @@ using namespace spot;
%feature("new") spot::tgba_parse; %feature("new") spot::tgba_parse;
%feature("new") spot::tgba_to_ta; %feature("new") spot::tgba_to_ta;
%feature("new") spot::tgba_to_tgta; %feature("new") spot::tgba_to_tgta;
%feature("new") spot::postprocessor::run;
// The argument to postprocessor::run() will be deleted.
// Apparently SWIG can only disown arguments based on their
// names...
%apply SWIGTYPE *DISOWN { SWIGTYPE * input_disown };
// Help SWIG with namespace lookups. // Help SWIG with namespace lookups.
#define ltl spot::ltl #define ltl spot::ltl
@ -297,6 +304,7 @@ using namespace spot;
%include "tgbaalgos/stats.hh" %include "tgbaalgos/stats.hh"
%include "tgbaalgos/isdet.hh" %include "tgbaalgos/isdet.hh"
%include "tgbaalgos/simulation.hh" %include "tgbaalgos/simulation.hh"
%include "tgbaalgos/postproc.hh"
%include "tgbaparse/public.hh" %include "tgbaparse/public.hh"