公式引擎
公式引擎相对独立:词法/语法 → AST → 依赖图 → 按拓扑求值,可在 Web Worker 中跑重计算,主线程只收结果 MUTATION。
1. 流水线
| 阶段 | 输出 |
|---|---|
| Lexer | Token 流 |
| Parser / AST | 表达式树 |
| Dependency | 引用关系(A1、区域、跨表) |
| Interpreter | 标量或数组结果 |
| 写回 | 通过 MUTATION 更新单元格 |
2. 函数系统
- 内置函数库(数学、文本、查找等)可扩展。
- 自定义函数通过插件注册,与 Excel 语义尽量对齐(具体以版本文档为准)。
3. 依赖与重算
- 单元格变更 → 标记下游依赖脏 → 增量重算,非全表重算。
- 循环引用检测与错误值(
#REF!等)由引擎统一处理。
4. Worker 与主线程
| 主线程 | Worker |
|---|---|
| 交互、渲染 | 大批量公式重算 |
| 发计算任务 | 返回结果 + 变更集 |
避免主线程长时间阻塞导致掉帧。
5. 与协同
公式结果最终以 MUTATION 形式同步;冲突策略与普通过单元格一致(见 07)。
6. 总结
公式 = 独立计算子系统;扩展时注册函数 + 保证依赖分析能识别新引用形式。