#parsing #tokenization #utils

derive-finite-automaton

Procedural macro for generating finite automaton

1 unstable release

0.1.0 Dec 6, 2021

#14 in #tokenization

Download history 1/week @ 2022-12-01 1/week @ 2022-12-08 1/week @ 2022-12-22 1/week @ 2023-01-05 2/week @ 2023-01-19 5/week @ 2023-01-26 3/week @ 2023-02-02 7/week @ 2023-02-09 3/week @ 2023-02-16 33/week @ 2023-02-23 61/week @ 2023-03-02 32/week @ 2023-03-09 103/week @ 2023-03-16

229 downloads per month
Used in 3 crates (via ezno-parser)

MIT license

5KB
65 lines

derive-finite-automaton

Crates

A procedural macro for building a finite automaton. Main use is for lexing multiple character 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,
}

Dependencies

~0.7–1MB
~26K SLoC