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

Download history 34/week @ 2024-03-11 4/week @ 2024-03-18 14/week @ 2024-03-25 34/week @ 2024-04-01 20/week @ 2024-04-08 15/week @ 2024-04-15 10/week @ 2024-04-22 12/week @ 2024-04-29 23/week @ 2024-05-06 7/week @ 2024-05-20 5/week @ 2024-05-27 12/week @ 2024-06-03 25/week @ 2024-06-10 9/week @ 2024-06-17 9/week @ 2024-06-24

每月下载量 55
4 个crate中使用(直接使用3个)

Apache-2.0

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