1 个稳定版本
8.0.0 | 2022年11月26日 |
---|---|
7.0.3 |
|
6.0.1 |
|
5.0.0 |
|
4.0.0 |
|
#12 in #lex
28 每月下载量
13KB
290 代码行
Rustastic Automaton
ram
允许您轻松创建基于有限状态机的语言词法分析器。
ram
可免费使用。您可以通过 Liberapay 💪 支持其开发。
用法
在 Cargo.toml 中将 ram
添加为依赖项
[dependencies]
ram = "8.0"
请参阅 https://docs.rs/ram 中的示例和文档。
许可证
源代码在 Apache 2.0 许可证下发布。
lib.rs
:
该库使创建用于对字符串进行标记的有限状态机变得简单。
以下是用它创建的最简单的自动机,它仅查找文件结束标记 (EOF)
use ram::Automaton;
enum TokenType {
End,
}
// Create the FSM (2 states, 0 or 1) that will parse the source code
let mut am = Automaton::new(0, 1);
// When the FSM hits the end of the source, go to state 1, the final state
am.find_end(TokenType::End as i32, 0, 1);
// Run the FSM with an empty string as the source code
let source_code = format!("");
let runner = am.run(source_code);
assert_eq!(runner.tokens.len(), 1);
assert!(runner.completed());
// With a non-empty string, the result is not complete
let source_code = format!("Invalid entry");
let runner = am.run(source_code);
assert_eq!(runner.tokens.len(), 0);
assert!(!runner.completed());
运行 cargo run --example let-it-be-42
以查看更完整的示例。
依赖项
~2–3MB
~53K SLoC