Struct enso_automata::nfa::Nfa[][src]

pub struct Nfa {
    pub start: State,
    // some fields omitted
}
Expand description

The definition of a NFA for a given set of symbols, states, and transitions (specifically a NFA with ε-moves).

A NFA is a finite state automaton that accepts or rejects a given sequence of symbols. In contrast with a DFA, the NFA may transition between states without reading any new symbol through use of epsilon links.

 ┌───┐  'N'  ┌───┐    ┌───┐  'F'  ┌───┐    ┌───┐  'A'  ┌───┐
 │ 0 │ ----> │ 1 │ -> │ 2 │ ----> │ 3 │ -> │ 3 │ ----> │ 3 │
 └───┘       └───┘ ε  └───┘       └───┘ ε  └───┘       └───┘

Fields

start: State

Implementations

impl Nfa[src]

pub fn new() -> Self[src]

Constructor.

pub fn new_state(&mut self) -> State[src]

Adds a new state to the NFA and returns its identifier.

pub fn new_state_exported(&mut self) -> State[src]

Adds a new state to the NFA, marks it as an exported state, and returns its identifier.

pub fn states(&self) -> &Vec<Data>[src]

Get a reference to the states for this automaton.

pub fn alphabet(&self) -> &Segmentation[src]

Get a reference to the alphabet for this automaton.

pub fn connect(&mut self, source: State, target: State)[src]

Creates an epsilon transition between two states.

Whenever the automaton happens to be in source state it can immediately transition to the target state. It is, however, not required to do so.

pub fn connect_via(
    &mut self,
    source: State,
    target: State,
    symbols: &RangeInclusive<Symbol>
)
[src]

Creates an ordinary transition for a range of symbols.

If any symbol from such range happens to be the input when the automaton is in the source state, it will immediately transition to the target state.

pub fn new_pattern(
    &mut self,
    source: State,
    pattern: impl AsRef<Pattern>
) -> State
[src]

Transforms a pattern to connected NFA states by using the algorithm described here. The asymptotic complexity is linear in number of symbols.

pub fn new_pattern_to(
    &mut self,
    source: State,
    target: State,
    pattern: impl AsRef<Pattern>
)
[src]

Transforms a pattern to connected NFA states by using the algorithm described here. This function is similar to new_pattern, but it consumes an explicit target state. The asymptotic complexity is linear in number of symbols.

pub fn eps_matrix(&self) -> Vec<StateSetId>[src]

Merges states that are connected by epsilon links, using an algorithm based on the one shown here.

pub fn nfa_matrix(&self) -> Matrix<State>[src]

Computes a transition matrix (state, symbol) => state for the Nfa, ignoring epsilon links.

pub fn as_graphviz_code(&self) -> String[src]

Convert the automata to a GraphViz Dot code for the deubgging purposes.

Trait Implementations

impl Clone for Nfa[src]

fn clone(&self) -> Nfa[src]

Returns a copy of the value. Read more

fn clone_from(&mut self, source: &Self)1.0.0[src]

Performs copy-assignment from source. Read more

impl Debug for Nfa[src]

fn fmt(&self, f: &mut Formatter<'_>) -> Result[src]

Formats the value using the given formatter. Read more

impl Default for Nfa[src]

fn default() -> Self[src]

Returns the “default value” for a type. Read more

impl From<&'_ Nfa> for Dfa[src]

fn from(nfa: &Nfa) -> Self[src]

Transforms an Nfa into a Dfa, based on the algorithm described here. The asymptotic complexity is quadratic in number of states.

impl Index<State<Nfa>> for Nfa[src]

type Output = Data

The returned type after indexing.

fn index(&self, state: State) -> &Self::Output[src]

Performs the indexing (container[index]) operation. Read more

impl IndexMut<State<Nfa>> for Nfa[src]

fn index_mut(&mut self, state: State) -> &mut Self::Output[src]

Performs the mutable indexing (container[index]) operation. Read more

impl PartialEq<Nfa> for Nfa[src]

fn eq(&self, other: &Nfa) -> bool[src]

This method tests for self and other values to be equal, and is used by ==. Read more

fn ne(&self, other: &Nfa) -> bool[src]

This method tests for !=.

impl Eq for Nfa[src]

impl StructuralEq for Nfa[src]

impl StructuralPartialEq for Nfa[src]

Auto Trait Implementations

impl RefUnwindSafe for Nfa

impl Send for Nfa

impl Sync for Nfa

impl Unpin for Nfa

impl UnwindSafe for Nfa

Blanket Implementations

impl<T> Any for T where
    T: 'static + ?Sized
[src]

pub fn type_id(&self) -> TypeId[src]

Gets the TypeId of self. Read more

impl<T> Borrow<T> for T where
    T: ?Sized
[src]

pub fn borrow(&self) -> &T[src]

Immutably borrows from an owned value. Read more

impl<T> BorrowMut<T> for T where
    T: ?Sized
[src]

pub fn borrow_mut(&mut self) -> &mut T[src]

Mutably borrows from an owned value. Read more

impl<T> From<T> for T[src]

pub fn from(t: T) -> T[src]

Performs the conversion.

impl<T> HasRefValue for T where
    T: ?Sized
[src]

type RefValue = T

impl<T, U> Into<U> for T where
    U: From<T>, 
[src]

pub fn into(self) -> U[src]

Performs the conversion.

impl<T> PhantomConversions for T[src]

fn phantom_into<P>() -> P where
    Self: PhantomInto<P>, 
[src]

fn phantom_from<P>() -> Self where
    P: PhantomInto<Self>, 
[src]

impl<T> Same<T> for T

type Output = T

Should always be Self

impl<SS, SP> SupersetOf<SS> for SP where
    SS: SubsetOf<SP>, 

pub fn to_subset(&self) -> Option<SS>

The inverse inclusion map: attempts to construct self from the equivalent element of its superset. Read more

pub fn is_in_subset(&self) -> bool

Checks if self is actually part of its subset T (and can be converted to it).

pub fn to_subset_unchecked(&self) -> SS

Use with care! Same as self.to_subset but without any property checks. Always succeeds.

pub fn from_subset(element: &SS) -> SP

The inclusion map: converts self to the equivalent element of its superset.

impl<T> ToImpl for T[src]

fn to<P>(self) -> P where
    Self: Into<P>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

The resulting type after obtaining ownership.

pub fn to_owned(&self) -> T[src]

Creates owned data from borrowed data, usually by cloning. Read more

pub fn clone_into(&self, target: &mut T)[src]

🔬 This is a nightly-only experimental API. (toowned_clone_into)

recently added

Uses borrowed data to replace owned data, usually by cloning. Read more

impl<T> ToRef<T> for T where
    T: ?Sized
[src]

pub fn to_ref(&self) -> &T[src]

impl<T, U> TryFrom<U> for T where
    U: Into<T>, 
[src]

type Error = Infallible

The type returned in the event of a conversion error.

pub fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>[src]

Performs the conversion.

impl<T, U> TryInto<U> for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.

pub fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>[src]

Performs the conversion.

impl<T> TypeDisplay for T[src]

pub default fn type_display() -> String[src]

impl<V, T> VZip<V> for T where
    V: MultiLane<T>, 

pub fn vzip(self) -> V