1 个稳定版本

8.0.0 2022年11月26日
7.0.3 2019年12月5日
6.0.1 2019年5月1日
5.0.0 2016年1月25日
4.0.0 2015年12月11日

#12 in #lex

28 每月下载量

Apache-2.0

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