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

Download history 15/week @ 2024-03-11 8/week @ 2024-03-18 25/week @ 2024-04-01 38/week @ 2024-04-15 32/week @ 2024-04-22 10/week @ 2024-04-29 27/week @ 2024-05-20 4/week @ 2024-05-27 23/week @ 2024-06-03 13/week @ 2024-06-10 9/week @ 2024-06-17 21/week @ 2024-06-24

66 每月下载量
用于 7 个Crate(3个直接)

AGPL-3.0或更高版本

81KB
2.5K SLoC

Marktwin解析器

此库实现了Eternal-Twin使用的Marktwin(mkt)解析器。Marktwin是Eternal-Twin用于其消息的格式。它受到Markdown和Twinoid论坛代码的启发。有关更多信息,请参阅Marktwin库。

解析器使用Rust实现并编译为Wasm。它与Node和webpack兼容。

所有输入都产生有效的解析树,解析不会失败。

设计

解析器使用管道逐步将输入转换为树。

  1. 输入:一个有效的Unicode码点字符串。处理编码并提供此字符串是消费者的责任。
  2. 上下文无关的标记流:词法分析器仅使用当前索引标记字符串。
  3. 解析事件流:包含可能的重新映射的标记和节点的开始/结束事件。
  4. 具体语法树:解析事件流的树表示
  5. 抽象语法树:在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