@danielsimonjr/mathts-表达
表达式解析器和评估器 数学。包根还再导出 MathNode 财务报告和审定财务报表 StringOptions 所用类型 scalarToNode 编号 : scalarToTex 内 @danielsimonjr/mathts-functions。 。 。 .
MathTS的表达引擎:一个解析器(字符串-AST),一个AST节点集,一个编译器,以及一个评价器. 包括一个沙盒getSafeProperty 编号 : getSafeMethod用于安全的财产进入.
对不信任字符串的限制 : 最大长度 1 000 000美元 字符,最大括号 125号 (和 500个 嵌入式无边规则、权力、指派或有条件规则,最大编译深度 512号,哪个 evaluate 在审定之前也适用(见 expression/tests/security/limits.test.ts 财务报告和审定财务报表 docs/api/expression.md) (中文(简体) ).
安装
npm install @danielsimonjr/mathts-expression
它提供的东西
createParse编号 :createParserClass编号 :createParser- 分析AST.- 16 AST节点构造器(
createConstantNode, (中文(简体) ),createOperatorNode(中文(简体) ). compile编号 :createEvaluate编号 :compileExpression评估表达式.createScalarBuilder——建设平板结树(number, (中文(简体) ),symbol, (中文(简体) ),op, (中文(简体) ),call, (中文(简体) ),from) (中文(简体) ).ln降为自然log财务报告和审定财务报表log下调为log10。公式字符串被拒绝。 用evaluateScalar从@danielsimonjr/mathts-functions。 。 。 .scalarCanonical编号 :scalarCanonicalKey编号 :scalarSize编号 :scalarDepth编号 :scalarComplexity编号 :scalarSymbols- 现有结构工具包ScalarNode。峡谷键平坦+财务报告和审定财务报表*,重写-财务报告和审定财务报表/,不折叠2^3改为8。 。 。 .enumerateScalars编号 :scalarGrammarAccepts- 确定大小,按顺序从语法中取出花生树,由scalarCanonicalKey。它是返回一个EnumerationStop理由(exhausted-space, (中文(简体) ),candidate-limit, (中文(简体) ),time-limit, (中文(简体) ),cancelled) (中文(简体) ).budget.maxCandidates, (中文(简体) ),budget.maxWallClockMs,则AbortSignal结束它;每考虑128个候选人就检查墙上钟和信号,所以一个能产生出几棵树的语法仍然会迅速停止.
import { createScalarBuilder, scalarEquals } from '@danielsimonjr/mathts-expression';
const b = createScalarBuilder();
const aa = b.op('*', [b.symbol('a'), b.symbol('a')]);
const aSquared = b.op('^', [b.symbol('a'), b.number(2)]);
console.log(scalarEquals(aa, aSquared)); // true
getStringSubset编号 :setStringSubset——访问者/指派使用的字符串索引 按职能分列subset(枪管是唯一的公开入口).- 每个节点的 AST 序列器 :
toString(), (中文(简体) ),toTex()(拉特克斯语),toHTML(),以及toMathML()(马来文). - 还公布了重点再出口:
@danielsimonjr/mathts-{parser,ast,evaluator}。 。 。 .
序列化 AST
每个节点都会被序列化为几种格式. toMathML() 返回数学ML
碎片 (比如说) toTex() 返回 LaTeX 片段,不设分隔符;
把它包起来 <math> 元素为 mathMLDocument(node) 来制作。 数学ML 是
由现代浏览器本地排序——没有外部依赖性.
import { mathMLDocument, mathMLError } from '@danielsimonjr/mathts-expression';
const node = parse('c = 1 / sqrt(eps0 * mu0)'); // parse from the functions package
node.toString(); // 'c = 1 / sqrt(eps0 * mu0)'
node.toTex(); // ' c=\\frac{1}{\\sqrt{ eps0\\cdot mu0}}'
node.toMathML(); // '<mrow><mi>c</mi><mo>=</mo><mfrac>…</mfrac></mrow>'
mathMLDocument(node); // '<math xmlns="…" display="block">…</math>' (renderable)
mathMLError(src) 生成一个 <math><merror> 用于解析失败的元素.
许可证
MIT (c) 小丹尼尔·西蒙.