eryon_core/macros/
ruleset.rs

1/*
2    Appellation: ruleset <module>
3    Contrib: @FL03
4*/
5
6/// a macro to create a ruleset for finite state machines;
7///
8/// $`(Q, S) -> {Dir}(Q, S')`$
9///
10/// ## Basic Usage
11///
12/// ```rust
13/// ruleset! {
14///     (0, 1) -> Right(0, 1),
15/// }
16/// ```
17#[macro_export]
18macro_rules! ruleset {
19    ($(($state:expr, $symbol:expr) -> $dir:ident($next_state:expr, $next_symbol:expr)),* $(,)?) => {
20        {
21            let mut map = ::std::collections::HashMap::new();
22            $(
23                map.insert(
24                    $crate::rstm::Head::new($crate::rstm::State($state), $symbol),
25                    $crate::rstm::Tail::new($crate::rstm::Direction::$dir, $crate::rstm::State($next_state), $next_symbol)
26                );
27            )*
28            map
29        }
30    };
31}