Crate derive_finite_automaton

Source
Expand description

§derive finite automaton

crates.io badge docs.rs badge

A procedural macro for building a finite automaton. Main use is for lexing multiple item wide tokens see derive-finite-automaton/examples/main.rs.

Run example:

cd derive-finite-automaton
cargo run --example main

View example macro expansion (requires cargo-expand):

cd derive-finite-automaton
cargo expand --example main

§Example

use derive_finite_automaton::{FiniteAutomata, FiniteAutomataConstructor};

#[derive(FiniteAutomataConstructor, Debug, PartialEq)]
#[automaton_mappings(
    "{" => Tokens::OpenBrace,
    "}" => Tokens::CloseBrace,
    "=" => Tokens::Assign,
    "=>" => Tokens::ArrowFunction,
    "==" => Tokens::Equal,
    "===" => Tokens::StrictEqual,
    "." => Tokens::Dot,
    "..." => Tokens::Spread,
)]
pub enum Tokens {
    OpenBrace,
    CloseBrace,
    ArrowFunction,
    Equal,
    StrictEqual,
    Assign,
    Dot,
    Spread,
}

You can add conditional mappings with the following

use derive_finite_automaton::FiniteAutomataConstructor;

#[derive(Debug, FiniteAutomataConstructor)]
#[automaton_mappings(
    "{" => Tokens::OpenBrace,
    "}" => Tokens::CloseBrace,
    "=>" => Tokens::ArrowFunction,
    "==" => Tokens::Equal,
    "===" => Tokens::StrictEqual,
    "=" => Tokens::Assign,
    // Some mapping
    "." => Tokens::Dot,
)]
#[cfg_attr(feature = "special", automaton_mappings(
    ".?." => Tokens::Magic,
))]
pub enum Tokens {
    OpenBrace,
    CloseBrace,
    ArrowFunction,
    Equal,
    StrictEqual,
    Assign,
    Dot,
    #[cfg(feature = "special")]
    Magic,
}

Structs§

InvalidItem
Item found initially which does that have transition

Enums§

GetNextResult
Where ‘T’ is the type the stateful trie returns TODO the result should be only on the first result not the second …

Traits§

FiniteAutomata
FiniteAutomataConstructor
A type for which a stateful trie can be built

Type Aliases§

GetAutomataStateForValue
Helper for getting the state item used in the automata

Derive Macros§

FiniteAutomataConstructor