Vcsn
2.2
Be Rational
|
Build a "lazy proper" automaton from the input with nullable labels. More...
#include <epsilon-remover-lazy.hh>
Public Types | |
using | in_automaton_t = Aut |
using | in_context_t = context_t_of< in_automaton_t > |
using | context_t = detail::proper_context< context_t_of< Aut >> |
using | automaton_t = fresh_automaton_t_of< Aut, context_t > |
using | self_t = lazy_proper_automaton_impl |
using | super_t = automaton_decorator< automaton_t > |
using | state_t = state_t_of< automaton_t > |
using | transition_t = transition_t_of< automaton_t > |
using | transpose_in_automaton_t = transpose_automaton< in_automaton_t > |
Public Types inherited from vcsn::detail::automaton_decorator< fresh_automaton_t_of< Aut, detail::proper_context< context_t_of< Aut > > > > | |
using | automaton_t = Aut |
The type of automaton to wrap. More... | |
using | context_t = context_t_of< Aut > |
using | element_type = typename automaton_t::element_type |
The automaton type, without shared_ptr. More... | |
using | fresh_automaton_t = typename element_type::template fresh_automaton_t< Ctx > |
The (shared pointer) type to use it we have to create an automaton of the same (underlying) type. More... | |
using | kind_t = typename context_t::kind_t |
using | labelset_t = typename context_t::labelset_t |
using | labelset_ptr = typename context_t::labelset_ptr |
using | label_t = typename labelset_t::value_t |
using | weightset_t = typename context_t::weightset_t |
using | weightset_ptr = typename context_t::weightset_ptr |
using | weight_t = typename weightset_t::value_t |
using | state_t = state_t_of< automaton_t > |
using | transition_t = transition_t_of< automaton_t > |
Public Member Functions | |
std::ostream & | print_set (std::ostream &o, format fmt) const |
lazy_proper_automaton_impl (const in_automaton_t &a, bool prune=true) | |
We cannot initialize super_t with the input automaton, we have to call remover_() first with the transposed input, then assign the proper automaton from the remover to this->aut_. More... | |
bool | state_has_spontaneous_out (state_t s) const |
Whether the given state has outgoing spontaneous transitions. More... | |
void | complete_ (state_t s) const |
Complete a state: find its outgoing transitions. More... | |
auto | all_out (state_t s) const -> decltype(vcsn::detail::all_out(this->aut_, s)) |
All the outgoing transitions. More... | |
bool | is_lazy (state_t s) const |
auto | all_states () const |
All states including pre()/post(). More... | |
template<typename Pred > | |
auto | all_states (Pred pred) const |
All states including pre()/post() that validate pred. More... | |
auto | states () const |
All states excluding pre()/post(). More... | |
Public Member Functions inherited from vcsn::detail::automaton_decorator< fresh_automaton_t_of< Aut, detail::proper_context< context_t_of< Aut > > > > | |
automaton_decorator (automaton_t aut) | |
automaton_decorator (const automaton_decorator &aut) | |
automaton_decorator (const context_t &ctx) | |
automaton_decorator (automaton_decorator &&aut) | |
automaton_decorator & | operator= (automaton_decorator &&that) |
automaton_t | strip () |
The automaton we decorate. More... | |
auto | all_in (Args &&...args) const -> decltype(aut_-> all_in(std::forward< Args >(args)...)) |
auto | all_out (Args &&...args) const -> decltype(aut_-> all_out(std::forward< Args >(args)...)) |
auto | all_states (Args &&...args) const -> decltype(aut_-> all_states(std::forward< Args >(args)...)) |
auto | all_transitions (Args &&...args) const -> decltype(aut_-> all_transitions(std::forward< Args >(args)...)) |
auto | context (Args &&...args) const -> decltype(aut_-> context(std::forward< Args >(args)...)) |
auto | dst_of (Args &&...args) const -> decltype(aut_-> dst_of(std::forward< Args >(args)...)) |
auto | get_final_weight (Args &&...args) const -> decltype(aut_-> get_ final _weight(std |
auto | get_initial_weight (Args &&...args) const -> decltype(aut_-> get_initial_weight(std::forward< Args >(args)...)) |
auto | get_transition (Args &&...args) const -> decltype(aut_-> get_transition(std::forward< Args >(args)...)) |
auto | has_state (Args &&...args) const -> decltype(aut_-> has_state(std::forward< Args >(args)...)) |
auto | has_transition (Args &&...args) const -> decltype(aut_-> has_transition(std::forward< Args >(args)...)) |
auto | is_final (Args &&...args) const -> decltype(aut_-> is_ final(std |
auto | is_initial (Args &&...args) const -> decltype(aut_-> is_initial(std::forward< Args >(args)...)) |
auto | label_of (Args &&...args) const -> decltype(aut_-> label_of(std::forward< Args >(args)...)) |
auto | labelset (Args &&...args) const -> decltype(aut_-> labelset(std::forward< Args >(args)...)) |
auto | num_all_states (Args &&...args) const -> decltype(aut_-> num_all_states(std::forward< Args >(args)...)) |
auto | num_finals (Args &&...args) const -> decltype(aut_-> num_ final s(std |
auto | num_initials (Args &&...args) const -> decltype(aut_-> num_initials(std::forward< Args >(args)...)) |
auto | num_states (Args &&...args) const -> decltype(aut_-> num_states(std::forward< Args >(args)...)) |
auto | num_transitions (Args &&...args) const -> decltype(aut_-> num_transitions(std::forward< Args >(args)...)) |
auto | prepost_label (Args &&...args) const -> decltype(aut_-> prepost_label(std::forward< Args >(args)...)) |
auto | print (Args &&...args) const -> decltype(aut_-> print(std::forward< Args >(args)...)) |
auto | print_set (Args &&...args) const -> decltype(aut_-> print_set(std::forward< Args >(args)...)) |
auto | print_state (Args &&...args) const -> decltype(aut_-> print_state(std::forward< Args >(args)...)) |
auto | print_state_name (Args &&...args) const -> decltype(aut_-> print_state_name(std::forward< Args >(args)...)) |
auto | src_of (Args &&...args) const -> decltype(aut_-> src_of(std::forward< Args >(args)...)) |
auto | state_has_name (Args &&...args) const -> decltype(aut_-> state_has_name(std::forward< Args >(args)...)) |
auto | is_lazy (Args &&...args) const -> decltype(aut_-> is_lazy(std::forward< Args >(args)...)) |
auto | is_lazy_in (Args &&...args) const -> decltype(aut_-> is_lazy_in(std::forward< Args >(args)...)) |
auto | states (Args &&...args) const -> decltype(aut_-> states(std::forward< Args >(args)...)) |
auto | weight_of (Args &&...args) const -> decltype(aut_-> weight_of(std::forward< Args >(args)...)) |
auto | weightset (Args &&...args) const -> decltype(aut_-> weightset(std::forward< Args >(args)...)) |
auto | add_final (Args &&...args) -> decltype(aut_-> add_ final(std |
auto | add_initial (Args &&...args) -> decltype(aut_-> add_initial(std::forward< Args >(args)...)) |
auto | add_transition (Args &&...args) -> decltype(aut_-> add_transition(std::forward< Args >(args)...)) |
auto | add_transition_copy (Args &&...args) -> decltype(aut_-> add_transition_copy(std::forward< Args >(args)...)) |
auto | add_weight (Args &&...args) -> decltype(aut_-> add_weight(std::forward< Args >(args)...)) |
auto | del_state (Args &&...args) -> decltype(aut_-> del_state(std::forward< Args >(args)...)) |
auto | del_transition (Args &&...args) -> decltype(aut_-> del_transition(std::forward< Args >(args)...)) |
auto | lmul_weight (Args &&...args) -> decltype(aut_-> lmul_weight(std::forward< Args >(args)...)) |
auto | new_state (Args &&...args) -> decltype(aut_-> new_state(std::forward< Args >(args)...)) |
auto | new_transition (Args &&...args) -> decltype(aut_-> new_transition(std::forward< Args >(args)...)) |
auto | new_transition_copy (Args &&...args) -> decltype(aut_-> new_transition_copy(std::forward< Args >(args)...)) |
auto | rmul_weight (Args &&...args) -> decltype(aut_-> rmul_weight(std::forward< Args >(args)...)) |
auto | set_final (Args &&...args) -> decltype(aut_-> set_ final(std |
auto | set_lazy (Args &&...args) -> decltype(aut_-> set_lazy(std::forward< Args >(args)...)) |
auto | set_lazy_in (Args &&...args) -> decltype(aut_-> set_lazy_in(std::forward< Args >(args)...)) |
auto | set_initial (Args &&...args) -> decltype(aut_-> set_initial(std::forward< Args >(args)...)) |
auto | set_transition (Args &&...args) -> decltype(aut_-> set_transition(std::forward< Args >(args)...)) |
auto | set_weight (Args &&...args) -> decltype(aut_-> set_weight(std::forward< Args >(args)...)) |
auto | unset_final (Args &&...args) -> decltype(aut_-> unset_ final(std |
auto | unset_initial (Args &&...args) -> decltype(aut_-> unset_initial(std::forward< Args >(args)...)) |
Static Public Member Functions | |
static symbol | sname () |
Static Public Member Functions inherited from vcsn::detail::automaton_decorator< fresh_automaton_t_of< Aut, detail::proper_context< context_t_of< Aut > > > > | |
static constexpr auto | lazy_transition (Args &&...args) -> decltype(element_type::lazy_transition(std::forward< Args >(args)...)) |
static constexpr auto | null_state (Args &&...args) -> decltype(element_type::null_state(std::forward< Args >(args)...)) |
static constexpr auto | null_transition (Args &&...args) -> decltype(element_type::null_transition(std::forward< Args >(args)...)) |
static constexpr auto | post (Args &&...args) -> decltype(element_type::post(std::forward< Args >(args)...)) |
static constexpr auto | pre (Args &&...args) -> decltype(element_type::pre(std::forward< Args >(args)...)) |
static constexpr auto | sname (Args &&...args) -> decltype(element_type::sname(std::forward< Args >(args)...)) |
Private Attributes | |
epsilon_remover_separate< transpose_in_automaton_t > | remover_ |
std::unordered_set< state_t > | proper_states_ |
States whose outgoing transitions are known. More... | |
std::unordered_set< state_t > | known_states_ |
States we want to show ("wavefront", proper_states and their successors) More... | |
Additional Inherited Members | |
Protected Attributes inherited from vcsn::detail::automaton_decorator< fresh_automaton_t_of< Aut, detail::proper_context< context_t_of< Aut > > > > | |
automaton_t | aut_ |
The wrapped automaton, possibly const. More... | |
Build a "lazy proper" automaton from the input with nullable labels.
The resulting automaton has the proper_context
matching the context of the input.
We use the epsilon-remover-separate algorithm to build two separate automata: the spontaneous one and the proper one. The methods of lazy_proper_automaton are forwarded to the proper automaton of the separate remover algorithm.
Since the remover implementation works on incoming transitions and we want to be lazy on outgoing transitions to have a forward automaton, we transpose the input automaton before passing it to the remover, and we transpose its proper part again when adding it as the underlying automaton.
Definition at line 31 of file epsilon-remover-lazy.hh.
using vcsn::detail::lazy_proper_automaton_impl< Aut, has_one >::automaton_t = fresh_automaton_t_of<Aut, context_t> |
Definition at line 40 of file epsilon-remover-lazy.hh.
using vcsn::detail::lazy_proper_automaton_impl< Aut, has_one >::context_t = detail::proper_context<context_t_of<Aut>> |
Definition at line 39 of file epsilon-remover-lazy.hh.
using vcsn::detail::lazy_proper_automaton_impl< Aut, has_one >::in_automaton_t = Aut |
Definition at line 36 of file epsilon-remover-lazy.hh.
using vcsn::detail::lazy_proper_automaton_impl< Aut, has_one >::in_context_t = context_t_of<in_automaton_t> |
Definition at line 37 of file epsilon-remover-lazy.hh.
using vcsn::detail::lazy_proper_automaton_impl< Aut, has_one >::self_t = lazy_proper_automaton_impl |
Definition at line 42 of file epsilon-remover-lazy.hh.
using vcsn::detail::lazy_proper_automaton_impl< Aut, has_one >::state_t = state_t_of<automaton_t> |
Definition at line 44 of file epsilon-remover-lazy.hh.
using vcsn::detail::lazy_proper_automaton_impl< Aut, has_one >::super_t = automaton_decorator<automaton_t> |
Definition at line 43 of file epsilon-remover-lazy.hh.
using vcsn::detail::lazy_proper_automaton_impl< Aut, has_one >::transition_t = transition_t_of<automaton_t> |
Definition at line 45 of file epsilon-remover-lazy.hh.
using vcsn::detail::lazy_proper_automaton_impl< Aut, has_one >::transpose_in_automaton_t = transpose_automaton<in_automaton_t> |
Definition at line 47 of file epsilon-remover-lazy.hh.
|
inline |
We cannot initialize super_t with the input automaton, we have to call remover_() first with the transposed input, then assign the proper automaton from the remover to this->aut_.
Definition at line 67 of file epsilon-remover-lazy.hh.
|
inline |
All the outgoing transitions.
Definition at line 116 of file epsilon-remover-lazy.hh.
|
inline |
All states including pre()/post().
Guaranteed in increasing order.
Definition at line 131 of file epsilon-remover-lazy.hh.
|
inline |
All states including pre()/post() that validate pred.
Guaranteed in increasing order.
Definition at line 139 of file epsilon-remover-lazy.hh.
|
inline |
Complete a state: find its outgoing transitions.
Since remover_on can remove the state it's working on, and add outgoing transitions from its parents, we need to call it on all the successors of the state while they have outgoing spontaneous transitions.
Definition at line 90 of file epsilon-remover-lazy.hh.
|
inline |
Definition at line 124 of file epsilon-remover-lazy.hh.
|
inline |
Definition at line 57 of file epsilon-remover-lazy.hh.
|
inlinestatic |
Definition at line 49 of file epsilon-remover-lazy.hh.
References vcsn::sname().
|
inline |
Whether the given state has outgoing spontaneous transitions.
Definition at line 78 of file epsilon-remover-lazy.hh.
|
inline |
All states excluding pre()/post().
Guaranteed in increasing order.
Definition at line 150 of file epsilon-remover-lazy.hh.
|
private |
States we want to show ("wavefront", proper_states and their successors)
Definition at line 167 of file epsilon-remover-lazy.hh.
|
private |
States whose outgoing transitions are known.
Definition at line 163 of file epsilon-remover-lazy.hh.
|
private |
Definition at line 160 of file epsilon-remover-lazy.hh.