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}