Skip to main content

Crate sml_pattern

Crate sml_pattern 

Source
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§

StaticTable
静态表:由「书写形式 → 语义」的常量切片构造。

Enums§

Class
字符类。默认 Unicode 语义:Alpha 匹配汉字,Digit 匹配全角数字。 (regex 的 \d 在 JS 是 ASCII、Python 是 Unicode,这类跨语言不一致是 bug 温床, 这里明确选定 Unicode 一侧。)
Concept
与语言无关的内部语义。任何书写形式都先映射到它,再由它驱动编译。
Pat
模式 IR(L1:无递归、无守卫)

Constants§

BILINGUAL
双语表(默认):同一份文档里中英写法等价,可混用。
CHINESE
中文表
ENGLISH
英文表

Traits§

KeywordTable
关键字表:书写形式 → 内部语义。

Functions§

compile_rule
把一条规则编译为模式 IR,关键字表取默认 BILINGUAL
compile_rule_with
用指定的关键字表编译(供非中英语言或项目自有方言使用)。
is_match
用已编译的模式匹配整段文本(全文匹配,非搜索)。
matches
便捷入口:直接用「规则表 + 规则名」匹配文本(默认双语关键字)。
matches_with
指定关键字表的匹配入口。