5个不稳定版本
0.5.0 | 2023年12月3日 |
---|---|
0.4.2 | 2021年10月28日 |
0.4.1 | 2021年10月26日 |
0.4.0 | 2021年10月26日 |
0.3.0 | 2021年10月18日 |
#207 in WebAssembly
66 每月下载量
用于 7 个Crate(3个直接)
81KB
2.5K SLoC
Marktwin解析器
此库实现了Eternal-Twin使用的Marktwin(mkt)解析器。Marktwin是Eternal-Twin用于其消息的格式。它受到Markdown和Twinoid论坛代码的启发。有关更多信息,请参阅Marktwin库。
解析器使用Rust实现并编译为Wasm。它与Node和webpack兼容。
所有输入都产生有效的解析树,解析不会失败。
设计
解析器使用管道逐步将输入转换为树。
- 输入:一个有效的Unicode码点字符串。处理编码并提供此字符串是消费者的责任。
- 上下文无关的标记流:词法分析器仅使用当前索引标记字符串。
- 解析事件流:包含可能的重新映射的标记和节点的开始/结束事件。
- 具体语法树:解析事件流的树表示
- 抽象语法树:在CST之上提供更容易访问数据的适配器。
模糊测试
Rust实现支持模糊测试
# Make sure that you have `cargo-fuzz`
cargo install cargo-fuzz
# Fuzz the `lexer`
cargo fuzz run lexer
# Fuzz the `parser`
cargo fuzz run parser
依赖项
~1.5–2.6MB
~52K SLoC