sml

SML { ❄ }

下载页 问题反馈、使用疑问,或随便聊聊: QQ 群 · 点击加入 sal@mail.swebase.cn 中文 EN

错误码总表

SML 的每类错误都有稳定的机器可读码,形如 E-CONTRACT-002:

码是稳定契约,文案不是。 各语言实现的报错措辞可以不同(甚至不同语言),只要码相同就是同一件事: 用码去判断、去检索、去写文档;不要用文案去匹配。

权威数据源是仓库里的 errors/codes.sml, 本页的表格由 python errors/gen_json.py 从它生成 —— 也就是说这一页与代码引用的是同一份事实, 不会出现「文档里有的码代码里没有」。当前共 141 条码。

码表回答的是「有哪些码」;实现是否真的会报出这个码是另一件事,进度见仓库 errors/README.md 的 「码的落地进度」。目前五端(Rust / JS / C / C++ / Lua)与命令行工具 smltools 均已全量带码, 各端都有一份「触发条件 → 期望码」的用例,同一条件在五端报同一个码。

带来的一类可见变化:此前「静默通过」的输入现在都带码报错(不再悄悄给一棵错树)—— 未闭合字符串 E-LEX-001、未闭合块注释 E-LEX-002 / E-LEX-003、未知转义 E-LEX-004、 非法 \u E-LEX-005、数组里多余的 } E-PARSE-003、闭合符错配 E-PARSE-002、 未注册指令 E-PARSE-005、未定义片段引用 E-INCLUDE-006、顶层标量 E-PARSE-008。 本轮新增的码里有 E-INCLUDE-012(include 路径写法非法)与 E-CLI-008(smltools 命令行用法错误)。 (⚠️ 2026-09-19:E-INCLUDE-012 已升为语言级规则 —— 判据在 sml-include,因此 Rust(含 smltools)与 Lua 都抛;下表的 impls 即以码表为准。)

正在加载错误码表……(若长时间无内容,说明 errors.json 未生成: 先跑 python errors/gen_json.py)

怎么用

E-CONTRACT-002   字段类型不符
E-PARSE-008      顶层标量不可往返
E-LIMIT-001      嵌套过深