python: add a spot.automata(filename) interface, yielding automata

* src/hoaparse/fmterror.cc, src/hoaparse/public.hh,
src/hoaparse/hoaparse.yy (hoa_stream_parser::parse_strict): New method
that raises an exception whenever a syntax error is encountered.
* src/ltlparse/public.hh (parse_error): Move ...
* src/misc/common.hh: ... here.
* wrap/python/spot_impl.i: Wrap the hoa output.
* wrap/python/spot.py: Implement spot.automata.
* wrap/python/tests/automata-io.ipynb: New test.
* wrap/python/tests/Makefile.am: Add it.
This commit is contained in:
Alexandre Duret-Lutz 2015-03-27 10:04:36 +01:00
parent 8e6b35e5e3
commit 25de479e12
9 changed files with 701 additions and 22 deletions

View file

@ -80,6 +80,46 @@ formula.__init__ = _formula_str_ctor
formula.to_str = _formula_to_str
formula.show_ast = _render_formula_as_svg
def _tgba_to_str(a, format='hoa', opt=None):
format = format.lower()
if format == 'hoa':
ostr = ostringstream()
hoa_reachable(ostr, a, opt)
return ostr.str()
if format == 'dot':
ostr = ostringstream()
dotty_reachable(ostr, a, opt)
return ostr.str()
if format == 'spin':
ostr = ostringstream()
never_claim_reachable(ostr, a, opt)
return ostr.str()
if format == 'lbtt':
ostr = ostringstream()
lbtt_reachable(ostr, a, bool(opt))
return ostr.str()
raise ValueError("unknown string format: " + format)
def _tgba_save(a, filename, format='hoa', opt=None, append=False):
with open(filename, 'a' if append else 'w') as f:
s = a.to_str(format, opt)
f.write(s)
if s[-1] != '\n':
f.write('\n')
return a
tgba.to_str = _tgba_to_str
tgba.save = _tgba_save
def automata(filename):
p = hoa_stream_parser(filename, True)
while True:
a = p.parse_strict(_bdd_dict)
if a == None:
return
yield a
def translate(formula, output='tgba', pref='small', level='high',
complete=False):
"""Translate a formula into an automaton.