Skip to content

fix(math): 修复数字 tokenizer 吞掉相邻运算符 - #80

Merged
wang-kaopu merged 3 commits into
omdsh-dev:mainfrom
wang-kaopu:fix/safe-math-tokenizer
Aug 28, 2026
Merged

fix(math): 修复数字 tokenizer 吞掉相邻运算符#80
wang-kaopu merged 3 commits into
omdsh-dev:mainfrom
wang-kaopu:fix/safe-math-tokenizer

Conversation

@wang-kaopu

Copy link
Copy Markdown
Collaborator

问题

SafeMath 原数字 tokenizer 会连续吞入数字、.e/E+/-

因此普通表达式里的相邻运算符也可能被当成数字的一部分,例如:

  • 1+2
  • 2-1
  • 2-sin(x)

导致合法表达式解析失败。

修复

按数字语法逐段扫描:

  1. 整数部分;
  2. 可选小数部分;
  3. 可选指数部分;
  4. 指数中的 +/- 只允许紧跟 e/E

这样普通 +/- 会留给 expression parser,同时继续支持 1e-3 / 1e+3

测试

新增回归测试覆盖:

  • 相邻 +/- 运算符;
  • 小数;
  • 正负科学计数法指数;
  • ., 1e, 1e+, 1e-, 1e--2 等非法数字。

验证

提交 PR 前已执行:

  • pnpm run check
  • 同步提交重新构建的 lib/ 产物

@wang-kaopu
wang-kaopu force-pushed the fix/safe-math-tokenizer branch from b5c789f to f596c19 Compare August 28, 2026 13:21
@wang-kaopu
wang-kaopu merged commit a47b710 into omdsh-dev:main Aug 28, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant