ExpressionParser 包解析和评估数学表达式,并生成 LaTeX
翻译和评估结果。
例如,以下
let e = ExpressionParser("(-b+sqrt(b^2-4a*c))/2a")
Ident.addSymbol(("a", 1))
Ident.addSymbol(("b", -3))
Ident.addSymbol(("c", -4))
if let b = e.parse() {
print(b)
}
产生如下输出:
("\\frac{-{b}+\\sqrt{{b}^{2}-4{}{a}\\times{c}}}{2{}{a}}", 4.0)
其中 LaTeX
字符串给出以下排版方程
在您项目的 Package.swift
文件中添加如下依赖项
dependencies: [
.package(url: "https://github.com/mgriebling/ExpressionParser.git", from: "0.1.0"),
]
ExpressionParser 包含两个源文件,Parser.swift
和 Scanner.swift
。 它们是由 Coco 编译器 [https://github.com/mgriebling/Coco] 翻译输入 ATG (Attributed Grammar) 文件 (exp.atg) 生成的,该文件以紧凑的文本格式描述要扫描和解析的操作。 Coco
编译器生成器还需要一些 .frame
文件,代码段被插入到这些文件中以生成最终的 swift 解析器和扫描器文件。 抽象语法树表示 (AST) 是使用 AST.swift
数据类型构建的。 然后评估此树以生成 LaTeX
翻译并评估结果。 有关 Coco
的更多详细信息,请参阅 https://ssw.jku.at/Research/Projects/Coco/ 网站。