# 范围和限制

标准基线为 Liberty 2017.06，完整格式兼容的最终目标与当前缺口见 [标准契约](STANDARD_CONFORMANCE.md)。本页的求值限制不删减最终格式目标。0.4.4 当前完整符合性为 false。

| 能力 | 当前支持 | 明确边界 |
| --- | --- | --- |
| 通用语法 | 注释、续行、引号、属性、复杂属性、分组、未知扩展 | 单个具名 library 根；通过显式 source map 展开 include；不解压 .gz |
| 文本往返 | 稳定缩进，保留未知属性和分组，核对写出前后 AST | 丢弃注释与排版；不保留字节级原文 |
| 领域模型 | library / cell / pin / timing / lu_table_template，多名称标量 pin 展开 | 不展开 bus / bundle；泛型 AST 仍保留这些分组 |
| 单位 | 时间、容量、可选电压的显式 SI 比例 | 缺失单位可检查，SI 查询会拒绝；不猜默认值 |
| 检查 | 重复、数值、方向、引脚及逻辑引用、网格、时序类型字段 | 不是全部 Liberty 厂商规则的标准认证 |
| 表格 | 六类时序表的标量、一维、二维模型与插值 | 三维格式可由 TableData 校验；数值求值报告 UnsupportedDimension，不求值 CCS/ECSM/LVF |
| SI 查询 | cell_rise / cell_fall / rise_transition / fall_transition 组合弧 | 不求值 setup/hold 等约束表；不做路径 STA |
| 条件弧 | --when 显式匹配原条件字符串；歧义拒绝 | 不自动推导条件蕴含或输入波形 |
| 布尔函数 | !、~、后缀 '、与、或、异或、隐式与、常量和括号 | 按 Liberty 的取反→XOR→AND→OR 优先级，支持函数内引号引脚名；真值表默认 12 输入、硬上限 16 |
| 差异 | 结构、数值写法、支持的布尔运算符写法归一；未知字段可见 | 不是 SAT/逻辑等价、物理等价或时序回归阈值判定 |
| 单元提取 | 指定 cell 和所有原有库级上下文 | 不递归裁剪模板、不是网表或布局提取 |
| 后端 | 核心 native / JS / Wasm GC，CLI native | 文件命令依赖官方 async 原生 IO |
| 文件输出 | 独占临时文件、同步文件后改名、默认不覆盖 | 不声明目录 fsync 或突然断电时的持久性保证 |

范围策略：不支持的求值请求应显式拒绝；未知语法字段可以保留，但保留不等于理解或验证。lint 的零错误仅代表通过已实现规则。normalize/extract 是结构操作，调用者应另外 lint 输出。

## 默认资源上限

CLI 只读取普通 UTF-8 文件（可带一个开头 BOM），输入不超过 16 MiB；核心文本上限为 16,777,216 个 UTF-16 代码单元。核心最多 2,000,000 个 token、单 token 1,048,576 个代码单元、128 层分组、1,000,000 个 AST 节点。表格单轴最多 10,000 点、最多 1,000,000 个值。

CLI 输出最多 64 MiB。差异最多 200,000 个索引项，默认展示 10,000 个变化，可调至 100,000；单字段预览 1024 个字符，截断标记及完整变化计数会保留。它是有界内存解析器，不是流式超大工艺库解析器。真实样本 1,720,231 字节；未验证所有商业工艺库。

坐标必须有限且非负；默认越界失败。clamp/extrapolate 只能显式选择，结果标记该行为；只有单点轴时不能推导外推斜率。查询前会运行领域检查；批量热路径可自行加载并选择 Table 后调用 lookup_table，不能把微基准时间当作整个 CLI 查询耗时。

0.4.0 compat 的规则目录明确非穷尽。未分类组保留并警告；已识别分组仍可能有未实施的属性规则。多参数 pin 的通用 AST 与标准参数检查可用，领域模型支持直接声明的多名称标量引脚；bank/向量表达式不是完整求值器。写出在分配完整文本之前核对包含引号转义、缩进的字符预算。缺少分号时明确拒绝，不隐式修补厂商文件。

0.4.0 的 ModelLimits 默认最多展开 100000 个直接标量引脚、4000000 个估算验证工作单位（包含共享属性扫描、函数/条件和表数据）。核心调用可显式调整，硬上限为 1000000 引脚、16000000 工作单位；超过返回 ModelLimit，非法预算返回 InvalidLimit，不报告成语法无效。CLI 采用默认值。bus/bundle 未展开时返回 UnexpandedPinContainer 警告，不能把直接引脚数理解为所有向量成员数。SI 前缀大小写有意义，不将 MV 降为 mV；不支持的前缀明确拒绝。

0.4.1：read_table 与 read_table_data 使用同一格式校验入口。除 scalar 外，表格必须解析到至少一条非空轴；模板已声明的变量必须有对应的已解析轴。缺轴/空轴返回 TableShape，不再隐式返回常数。CLI 整数预算接受十进制数字及可选前导 +，拒绝小数/指数写法；不会先舍入成整数。

0.4.2：根文件和显式 include 片段开头可有一个 U+FEFF 编码签名，计入输入预算和原始 UTF-16 offset，不计入可见列号；中途或重复的 U+FEFF 不作为空白删除，引号内容原样保留，输出不加 BOM。这是输入编码兼容，不是新 Liberty 标准条目。statetable 内部节点仅补充本单元的布尔引用环境，不当作物理引脚、不做状态仿真。

0.4.3 的编译器下限为 0.10.16；推荐及 CI 固定 SDK/core 0.10.16+b1a0e846e。当前采用新版 Json(value) 构造和 Int32 规范名称，不继续承诺旧 SDK 的构建兼容。数字算法和求值维度未扩张。

0.4.4：总线可在显式给出正宽度、一个端点和 downto 布尔方向时推导另一端点，并检查非负性和成员边界；缺少方向、缺少两个端点等其他默认组合仍未实现。仅验证，不展开向量。扩展属性使用 name : value;，已声明属性的复杂写法返回 DefinedAttributeForm。SI 转换时间外推若得到负值返回 NegativeTransition；通用查表和合法负传播延迟仍可返回负值。状态引用环境按单元建立一次，不改变原有作用域隔离。
