23 个版本
0.6.2 | 2021 年 12 月 6 日 |
---|---|
0.6.1 | 2021 年 6 月 13 日 |
0.5.8 | 2021 年 5 月 8 日 |
0.5.7 | 2020 年 9 月 2 日 |
在 解析器实现 中排名 996
每月下载量 55
在 4 个crate中使用(直接使用3个)
97KB
3K SLoC
AsciiMath
此项目旨在为 Rust 实现一个功能齐全的 AsciiMath 解析器。它是 snekdown 解析器项目的一部分。
查看 规范。
依赖关系
- charred 用于分析输入字符串
- maplit 用于定义令牌映射的宏
- lazy_static 用于定义令牌的静态映射
- htmlescape 用于在转换为 MathML 时转义 HTML
使用方法
简单方法
use asciimath_rs::format::mathml::ToMathML;
fn main() {
let expression = asciimath_rs::parse("sin(2x) + 3".to_string());
let mathml_string = expression.to_mathml();
}
不那么简单的方法
use asciimath_rs::parsing::tokenizer::Tokenizer;
use asciimath_rs::parsing::tree_parser::TreeParser;
use asciimath_rs::format::mathml::ToMathML;
fn main() {
let mut tokenizer = Tokenizer::new("cos(2) - alpha".to_string());
let tokens = tokenizer.parse();
let mut tree_parser = TreeParser::new(tokens);
let expression = tree_parser.parse();
let mathml_string = expression.to_mathml();
}
工作原理
如不那么简单的示例所示,解析分为两个步骤。在第一步中,分析原始输入字符串并将其转换为表示字符序列语法意义的令牌。第二步以深度优先的方式将扁平的令牌向量转换为树。
然后将生成的表达式转换为 MathML,使用默认的 ToMathML
特性实现。
许可证
此项目采用 Apache 2.0 许可证。
依赖关系
~94KB