下面以 **Markdown 列表** 格式，完整列出本方案中定义的 **所有分数算子**（算子名称、简短描述、匹配表达式模板、步骤描述）。匹配表达式模板采用可读的模式化表达（类似正则/模式模板），便于在解析器/分类器中快速匹配；步骤描述为可程序化执行的分步骤（便于直接映射为算子调用序列）。

> 说明：模板使用占位符 `{NUM}`（整数），`{FRAC}`（分数或带分数或小数可解析为 Fraction）、`{INT}`（整数）、`{DEC}`（小数）、`{PCT}`（百分数）；运算符用 `+ - * / ?` 表示比较运算。解析器可把这些模板转为正则或语法树规则以做匹配。

---

* **约分（简化分数）**

  * **描述**：将任意形式的分数（假分数/带分数）化为最简分数或按要求转为带分数。
  * **匹配表达式模板**：`{FRAC}`（单一分数输入或需要化简的分数表达）
  * **步骤描述**：

    1. 解析为 `Fraction(numer, denom)`，确保分母为正。
    2. 计算 `g = gcd(numer, denom)`；`numer' = numer / g`，`denom' = denom / g`。
    3. 如需带分数格式：`whole = numer' // denom'`，`rem = numer' % denom'`，输出 `whole rem/denom'`。
    4. 返回约分后的分数与步骤验证（gcd 校验）。

* **倒数（求逆）**

  * **描述**：求分数的倒数；带分数先转为假分数；对0进行校验。
  * **匹配表达式模板**：`reciprocal({FRAC})` 或 `1 / {FRAC}` 或 输入带 `× ??? = 1` 的题型
  * **步骤描述**：

    1. 检查分数是否为 0（若是，返回错误）。
    2. 把带分数转为假分数（如适用）。
    3. 交换分子与分母，约分并规范符号（分母>0）。
    4. 返回倒数并验证 `orig * reciprocal == 1`。

* **分数与小数互化**

  * **描述**：分数 ↔ 小数 的相互转换；检测是否为有限小数或循环小数并按精度处理。
  * **匹配表达式模板**：`{FRAC} -> decimal` 或 `{DEC} -> fraction`
  * **步骤描述**：

    1. 约分分数，检查分母质因数是否只包含 2 与 5。
    2. 若是，计算精确有限小数；否则标注循环小数并按 `precision` 截断或返回循环节。
    3. 若小数转分数：移位（乘 10^k），化为分数后约分。
    4. 输出并验证（通过 Fraction 精确等价性）。

* **分数与百分数互化**

  * **描述**：分数 ↔ 百分数（乘以或除以 100 并格式化）。
  * **匹配表达式模板**：`{FRAC} -> %` 或 `{PCT} -> fraction`
  * **步骤描述**：

    1. 分数转百分数：计算 `(numer/denom)*100`，按 `context.precision` 格式化并添加 `%`。
    2. 百分数转分数：去 `%`，除以 100，化为 Fraction 并约分。
    3. 验证数值等价性。

* **同分母分数加法（同分母相加）**

  * **描述**：分母相同的分数直接相加分子，最后约分/带分数化。
  * **匹配表达式模板**：`{FRAC1} + {FRAC2}` 且 `denom1 == denom2`
  * **步骤描述**：

    1. 验证分母相同；若不同，转交异分母算子。
    2. 计算 `result = (num1 + num2) / denom`。
    3. 约分并按 `display_style` 转换为带分数（如需）。
    4. 校验（比较交叉乘法或原算子重算）。

* **同分母分数减法**

  * **描述**：分母相同的分数直接相减分子并约分。
  * **匹配表达式模板**：`{FRAC1} - {FRAC2}` 且 `denom1 == denom2`
  * **步骤描述**：

    1. 验证分母相同。
    2. 计算 `result = (num1 - num2) / denom`（保留符号）。
    3. 约分并规范输出格式。
    4. 校验与返回。

* **异分母分数加法（通分法）**

  * **描述**：对不同分母的分数求最小公倍数（lcm），调整分子后相加。
  * **匹配表达式模板**：`{FRAC1} + {FRAC2}` 且 `denom1 != denom2`
  * **步骤描述**：

    1. 计算 `l = lcm(den1, den2, ...)`。
    2. 调整分子：`adj_num_i = num_i * (l / den_i)`。
    3. 求和 `sum_adj = Σ adj_num_i`，结果 `sum_adj / l`。
    4. 约分并按需转带分数；验证（重算或交叉比对）。

* **异分母分数减法**

  * **描述**：与异分母加法类似，调整分子后相减。
  * **匹配表达式模板**：`{FRAC1} - {FRAC2}` 且 `denom1 != denom2`
  * **步骤描述**：

    1. 计算 lcm 并扩分子。
    2. 计算 `adj_num1 - adj_num2`，得 `raw_result / l`。
    3. 约分/格式化，并验证。

* **分数乘分数（乘法）**

  * **描述**：两个分数相乘，优先交叉约分以减少运算量，然后相乘。
  * **匹配表达式模板**：`{FRAC1} * {FRAC2}`
  * **步骤描述**：

    1. 把带分数转为假分数（如有）。
    2. 交叉约分（num1 与 den2、num2 与 den1）。
    3. 计算 `(num1 * num2) / (den1 * den2)`，约分并返回。
    4. 校验：用 Fraction 精确比对。

* **分数乘整数**

  * **描述**：分数与整数相乘，可先与分母约掉公因子以简化。
  * **匹配表达式模板**：`{FRAC} * {INT}` 或 `{INT} * {FRAC}`
  * **步骤描述**：

    1. 尝试将整数与分母约掉（gcd）。
    2. 计算新分子 `num * (int / g)` 与新分母 `den / g`。
    3. 约分并输出。

* **分数乘小数**

  * **描述**：把小数转为分数（或分数转小数）再计算，输出形式按 `context` 要求。
  * **匹配表达式模板**：`{FRAC} * {DEC}` 或 `{DEC} * {FRAC}`
  * **步骤描述**：

    1. 将小数转换为分数（移位），或按策略选择把分数转小数。
    2. 调用分数乘分数算子（含交叉约分）。
    3. 若输出要求小数，转换并按精度返回；验证等价性。

* **带分数↔假分数互转**

  * **描述**：带分数与假分数相互转换（基础算子，供其它算子复用）。
  * **匹配表达式模板**：`{mixed}`（如 `a b/c`）或 `improper fraction`
  * **步骤描述**：

    1. 带分数 → 假分数：`improper = whole * denom + numer`。
    2. 假分数 → 带分数：`whole = numer // denom`，`rem = numer % denom`。
    3. 返回转换结果并验证等价。

* **分数除以分数**

  * **描述**：除以分数等同乘以其倒数；先检查除数非零，优先交叉约分。
  * **匹配表达式模板**：`{FRAC1} / {FRAC2}`
  * **步骤描述**：

    1. 校验除数不为 0。
    2. 计算倒数 `reciprocal(FRAC2)`。
    3. 调用分数乘分数算子（交叉约分→乘→约分）。
    4. 输出并验证。

* **分数除以整数**

  * **描述**：`(a/b) ÷ n = a / (b*n)`，可先把整数与分子约掉以简化。
  * **匹配表达式模板**：`{FRAC} / {INT}`
  * **步骤描述**：

    1. 将整数并入分母：`new_den = den * n`。
    2. 约分 `num / new_den` 并返回。

* **分数除以小数**

  * **描述**：把小数转为分数或同时放大被除数和除数，使除数为整数，按分数除法处理。
  * **匹配表达式模板**：`{FRAC} / {DEC}`
  * **步骤描述**：

    1. 把小数转成 `p/10^k`，或同时 ×10^k 两边使除数为整数。
    2. 调用分数除以分数算子处理（或变为分数乘法）。
    3. 约分/格式化并验证。

* **分数比较大小（一般）**

  * **描述**：比较两个分数的大小；优先快速路径（同分母/同分子），否则交叉相乘比较。
  * **匹配表达式模板**：`{FRAC1} ? {FRAC2}`（? ∈ {<,>,=,≤,≥}）
  * **步骤描述**：

    1. 若 `den1 == den2`，直接比较 `num1 ? num2`；若 `num1 == num2`，较小分母者较大。
    2. 否则比较 `num1 * den2 ? num2 * den1`。
    3. 返回比较结论并记录中间计算用于验证。

* **同分母分数大小比较**

  * **描述**：专用快速比较同分母分数的算子（直接比较分子）。
  * **匹配表达式模板**：同分母情形 `den1 == den2` 与 `{FRAC1} ? {FRAC2}`
  * **步骤描述**：

    1. 读取并比较分子大小，返回结论并验证。

* **异分母分数大小比较**

  * **描述**：专用交叉相乘比较算子（避免完全通分以节省计算量）。
  * **匹配表达式模板**：`{FRAC1} ? {FRAC2}` 且 `den1 != den2`
  * **步骤描述**：

    1. 计算 `lhs = num1 * den2`，`rhs = num2 * den1`。
    2. 比较 `lhs ? rhs` 并返回。

* **分数化百分数**

  * **描述**：把分数转换为百分数（乘以 100 并格式化）。
  * **匹配表达式模板**：`{FRAC} -> %` 或 `convert to percent`
  * **步骤描述**：

    1. 计算 `(num/den) * 100`。
    2. 按 `context.precision` 或整数输出并附 `%`。
    3. 验证等价性。

* **百分数特殊转换算子（百分数→分数→小数）**

  * **描述**：处理百分数与分数/小数的互转，作为百分数类题目的专用算子。
  * **匹配表达式模板**：`{PCT}` 或 `?%`
  * **步骤描述**：

    1. 若转换为分数：`value / 100` → 化为 Fraction 并约分。
    2. 若转换为小数：`value / 100` → Decimal/float 按精度返回。
    3. 验证。

* **分数的初步认识与简单加减**

  * **描述**：低年级基础题型的快速路径（直接调用同分母/异分母加减并生成教学文本）。
  * **匹配表达式模板**：简单形式如 `{NUM}/{DEN} ± {NUM}/{DEN}`（常见教材题型）
  * **步骤描述**：

    1. 识别是否同分母，选择对应算子。
    2. 执行并生成简洁教学性步骤（短句风格）。
    3. 返回结果并附教学提示。

* **分数的意义与基本判断算子**

  * **描述**：用于教学提示或判断题（如 `1/2 > 1/5`）的启发式算子（不做复杂通分，给出直观规则）。
  * **匹配表达式模板**：`{FRAC1} ? {FRAC2}`（教学场景或选择题）
  * **步骤描述**：

    1. 使用简单启发法（同分母/同分子规则、分母与分子比较法）快速得出结论。
    2. 如启发法不可直接判断，回退到标准比较算子。

* **分数题型识别算子（Classifier）**

  * **描述**：把原始输入映射到具体的算子/题型候选，返回候选列表与匹配度分数（供引擎调度）。
  * **匹配表达式模板**：任意原始 `Problem` 输入（解析后调用）
  * **步骤描述**：

    1. 解析操作数类型与运算符，应用模式库（模板匹配）得到候选算子集合。
    2. 为每个候选算子计算 `score`（基于模板匹配度、优先级、稳定性），返回排序列表与匹配原因。

* **复杂表达式求值（含括号与多运算）**

  * **描述**：将复合表达式拆为二元子任务并逐步求解（符合运算优先级）。
  * **匹配表达式模板**：任何包含多运算/括号的表达式（如 `(1/2 + 3/4) / (5/6)`）
  * **步骤描述**：

    1. 解析表达式为 AST（抽象语法树）。
    2. 自底向上分解子任务并对每个子任务选择最合适算子执行。
    3. 组合中间结果并输出完整步骤链与验证。

* **分数乘法一般算子（通用）**

  * **描述**：通用乘法管线，支持多操作数、分数/小数/整数混合，内部统一转为 Fraction 处理。
  * **匹配表达式模板**：`{FRAC/INT/DEC} * {FRAC/INT/DEC} [* ...]`
  * **步骤描述**：

    1. 规范化所有操作数为 Fraction。
    2. 逐对执行交叉约分与乘法（或并行约分策略）。
    3. 最终约分并按 `context` 输出格式（fraction/mixed/decimal）。

* **分数除法一般算子（通用）**

  * **描述**：通用除法管线，支持混合输入；把除数取倒数并乘以被除数。
  * **匹配表达式模板**：`{FRAC/INT/DEC} / {FRAC/INT/DEC}`
  * **步骤描述**：

    1. 规范化操作数为 Fraction，并检查除数不为 0。
    2. 取除数倒数并调用乘法管线。
    3. 约分并格式化输出。

* **带分数展示算子（教学展示）**

  * **描述**：把假分数转换为带分数并生成教学性展示步骤（可选）。
  * **匹配表达式模板**：`improper fraction` 且 `context.display_style == mixed`
  * **步骤描述**：

    1. 计算 `whole = numer // denom`，`rem = numer % denom`。
    2. 输出 `whole rem/denom` 的格式化步骤与教学提示。

* **交叉约分算子（原子）**

  * **描述**：在乘除之前尝试交叉约分以减少运算量（num1 ⇔ den2, num2 ⇔ den1）。
  * **匹配表达式模板**：乘除算子之前的预处理阶段
  * **步骤描述**：

    1. 对可能约掉的对进行 gcd 检查并执行约分。
    2. 返回约分后的中间分数供后续乘法/除法使用。

* **规范化算子（normalize_fraction）**

  * **描述**：统一约分、符号归一（分母>0）、按 display_style 转换为带分数或小数。
  * **匹配表达式模板**：任意分数输出阶段
  * **步骤描述**：

    1. 计算 gcd 并除以之。
    2. 若分母 < 0，则分子取负并使分母正。
    3. 按 `context` 输出风格格式化。
