parsetl: speedup parsing of n-ary operators with many operands
Issue #500, reported by Yann Thierry-Mieg. * spot/parsetl/parsetl.yy, spot/parsetl/scantl.ll: Use variant to store a new pnode objects that delays the construction of n-ary operators. * spot/parsetl/Makefile.am: Do not distribute stack.hh anymore. * spot/tl/formula.cc: Fix detection of overflow in Star and FStar. * HACKING: Update Bison requirements to 3.3. * tests/core/500.test: New test case. * tests/Makefile.am: Add it. * tests/core/ltl2tgba2.test, tests/core/ltlsynt.test, tests/core/tostring.test: Adjust to new expected order. * NEWS: Mention the change.
This commit is contained in:
parent
46f3f5aaf4
commit
9c6a09890e
11 changed files with 374 additions and 181 deletions
9
NEWS
9
NEWS
|
|
@ -66,6 +66,15 @@ New in spot 2.10.4.dev (net yet released)
|
|||
- purge_dead_states() will now also remove edges labeled by false
|
||||
(except self-loops).
|
||||
|
||||
- When parsing formulas with a huge number of operands for an n-ary
|
||||
operator (for instance 'p1 | p2 | ... | p1000') the LTL parser
|
||||
would construct that formula two operand at a time, and the
|
||||
formula constructor for that operator would be responsible for
|
||||
inlining, sorting, deduplicating, ... all operands at each step.
|
||||
This resulted in a worst-than-quadratic slowdown. This is now
|
||||
averted in the parser by delaying the construction of such n-ary
|
||||
nodes until all children are known.
|
||||
|
||||
Bugs fixed:
|
||||
|
||||
- reduce_parity() produced incorrect results when applied to
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue