5次发布
0.2.0 | 2024年3月1日 |
---|---|
0.1.3 | 2023年9月20日 |
0.1.2 | 2023年9月20日 |
0.1.1 | 2023年9月19日 |
0.1.0 | 2021年12月6日 |
#119 在 解析工具
74 每月下载量
用于 4 个crate(通过 ezno-parser)
7KB
81 行
生成有限自动机
构建有限自动机的过程宏。主要用途是用于解析多个字符宽的令牌,请参阅derive-finite-automaton/examples/main.rs
。
运行示例
cd derive-finite-automaton
cargo run --example main
查看示例宏展开(需要 cargo-expand)
cd derive-finite-automaton
cargo expand --example main
示例
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,
}
您可以使用以下方式添加条件映射
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,
}
依赖项
~0.3–0.8MB
~19K SLoC