Expand description
SML 模式语言(Loom 融入 SML 的产物):L1 层的无回溯匹配引擎。
§为什么不是正则
规则就是普通 SML 数据(片段),不引入新 token,因此能被 SML 自身的
include / 契约 / 中文关键字复用。匹配侧用 Thompson NFA 并行推进,
结构上不存在回溯,故免疫 ReDoS(见 [nfa] 模块说明)。
§关键字与语言无关
书写形式(中文 / 英文 / 任意语言)由 KeywordTable trait 决定,
编译逻辑只认 Concept。默认 BILINGUAL(中英等价)。
§规则写法(中英等价,可混用)
@日期ISO {
序列: [
{ 名: 年, 类: 数字, 次: 4 }
{ 字面: "-" }
{ 名: 月, 类: 数字, 次: 2 }
]
}Modules§
- regex
- regex 逃生舱:把 regex 子集编译进同一个 IR,而非引入第二个引擎。
Structs§
- Static
Table - 静态表:由「书写形式 → 语义」的常量切片构造。
Enums§
- Class
- 字符类。默认 Unicode 语义:
Alpha匹配汉字,Digit匹配全角数字。 (regex 的\d在 JS 是 ASCII、Python 是 Unicode,这类跨语言不一致是 bug 温床, 这里明确选定 Unicode 一侧。) - Concept
- 与语言无关的内部语义。任何书写形式都先映射到它,再由它驱动编译。
- Pat
- 模式 IR(L1:无递归、无守卫)
Constants§
Traits§
- Keyword
Table - 关键字表:书写形式 → 内部语义。
Functions§
- compile_
rule - 把一条规则编译为模式 IR,关键字表取默认
BILINGUAL。 - compile_
rule_ with - 用指定的关键字表编译(供非中英语言或项目自有方言使用)。
- is_
match - 用已编译的模式匹配整段文本(全文匹配,非搜索)。
- matches
- 便捷入口:直接用「规则表 + 规则名」匹配文本(默认双语关键字)。
- matches_
with - 指定关键字表的匹配入口。