Maintain basic LTL properties using a bitfield inside formula objects.
This bitfield is easily updated as the formulae are constructed. Doing so avoids many AST recursions to compute these properties individually. This patch removes the eventual_universal_visitor, as well as the kind_of() function. * src/ltlast/formula.hh (is_boolean, is_sugar_free_boolean, is_in_nenoform, is_X_free, is_sugar_free_ltl, is_ltl_formula, is_eltl_formula, is_psl_formula, is_eventual, is_universal, is_marked): New methods to query formula properties in constant time. (get_props, ltl_prop): A method and structure for implementation as a field bit in an unsigned, for fast computation. (print_formula_props): New function. * src/ltlast/formula.cc (print_formula_props): Implement it. * src/ltlast/atomic_prop.cc, src/ltlast/binop.cc, src/ltlast/bunop.cc, src/ltlast/constant.cc, src/ltlast/multop.cc, src/ltlast/unop.cc, src/ltlast/automatop.cc: Compute the properties as instances are constructed. * src/ltlparse/ltlparse.yy: Update to use is_boolean() instead of kind_of(). * src/ltltest/kind.cc: Update to use print_formula_props(). * src/ltltest/kind.test: Adjust to test eventual and universal properties. * src/ltlvisit/kind.cc, src/ltlvisit/kind.hh: Delete these files. * src/ltlvisit/Makefile.am: Remove kind.hh and kind.cc. * src/ltlvisit/reduce.cc (recurse_eu, eventual_universal_visitor): Remove, no longer needed. (reduce_visitor, is_eventual, is_universal): Adjust to use formula::is_eventual(), and formula::is_universal(). * src/ltlvisit/reduce.hh (is_eventual, is_universal): Declare as deprecated.
This commit is contained in:
parent
1671aa5da1
commit
546260e7a0
17 changed files with 408 additions and 488 deletions
|
|
@ -35,7 +35,6 @@
|
|||
#include <string>
|
||||
#include "public.hh"
|
||||
#include "ltlast/allnodes.hh"
|
||||
#include "ltlvisit/kind.hh"
|
||||
|
||||
struct minmax_t { unsigned min, max; };
|
||||
}
|
||||
|
|
@ -367,7 +366,7 @@ rationalexp: booleanatom
|
|||
$1.min, $1.max); }
|
||||
| rationalexp equalargs
|
||||
{
|
||||
if ((kind_of($1) & Boolean_Kind) == Boolean_Kind)
|
||||
if ($1->is_boolean())
|
||||
{
|
||||
$$ = bunop::instance(bunop::Equal, $1, $2.min, $2.max);
|
||||
}
|
||||
|
|
@ -384,7 +383,7 @@ rationalexp: booleanatom
|
|||
}
|
||||
| rationalexp gotoargs
|
||||
{
|
||||
if ((kind_of($1) & Boolean_Kind) == Boolean_Kind)
|
||||
if ($1->is_boolean())
|
||||
{
|
||||
$$ = bunop::instance(bunop::Goto, $1, $2.min, $2.max);
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue