普贤教程 › 包参考
pxml 包
PXML 配置语言解析器(qg-issue 04 收编)
纯函数风格(无 IO/无状态),入口 pxml_parse(text) -> Result(0.2.0 起):
| 项 | 值 |
|---|---|
| 包名 | pxml |
| 版本 | 0.2.0 |
| 可用版本 | 0.1.0 / 0.2.0 |
| 入口 | pxml.px |
| 分类 | 数据格式与编解码 |
| 文件数 / 行数 | 1 / 451 |
安装与引入
bash
pxpkg init # 首次 pxpkg add pxml@0.2.0 pxpkg install
px
import pxml所属分类教程:数据格式与编解码
公开接口
| 函数 | 参数 |
|---|---|
pxml_parse | text |
其余 20 个 def(内部与辅助,可直接调用但不属稳定接口)
| 函数 | 参数 |
|---|---|
px_nd(): # 空 dict(M129 起 {} 即空 dict;此处保留 json_parse 旧写法,行为一致) | |
px_isdigit | c |
px_isalpha | c |
px_isid0 | c |
px_isid | c |
px_is_unit | u |
px_dur_ns | num, unit |
px_scan_string | text, i, line |
px_scan_number | text, i, line |
px_scan_ident | text, i, line |
px_tokenize | text |
px_seen | arr, key |
px_tname | tk |
px_parse_key | toks, pos |
px_parse_value | toks, pos |
px_parse_call | toks, pos |
px_parse_array | toks, pos |
px_parse_body | toks, pos, in_con |
px_parse_container | toks, pos |
px_parse_document | toks |
包内说明(源码头注释)
text
============================================================ 普贤标准库:std.pxml —— PXML 配置语言解析器(qg-issue 04 收编) ------------------------------------------------------------ 纯函数风格(无 IO/无状态),入口 pxml_parse(text) -> Result(0.2.0 起): Ok(dict) 解析成功,载荷 = 配置树 Err(str) 失败,载荷 = "line N: ..." 诊断文案 消费:r.is_ok() / r.err() / r.unwrap(),或函数内 `let v = pxml_parse(t)?` JSON 序列化形态不变(Result → {"ok":bool,"value":...}),但 Result **不支持** r["ok"] 索引 (索引 Result 会 R1002 响亮报错,不静默给 null)⇒ 旧调用点漏改会当场红,不会静默错值。 随发布包分发:import std.pxml。 加密能力说明:ENC 字段级加密"识别不解密"(分层铁律,解析器永不碰密钥); 消费方运行时解密依赖 aes_gcm/base64 native —— 按 std.gfx 先例, ENC 解密主打编译模式(pxc build);纯解析(无加密函数)双模式一致。 完整规范:docs/PXML.md(v0.6) 设计决策(实现约定,v0.3): - duration 字面量(720h / 1.5s)换算为纳秒 int(1d = 86400e9 ns) - ENC[...] 整体识别为"带标记字符串",原样保留含 ENC[ 前缀; 解析器不解密、不校验内部——解密是消费方运行时职责(分层铁律) - env("X") / include("p") 解析为 call 节点 {"__call":"env","args":["X"]},消费方展开(parser 不做 IO) - 字符串必须引号(' " 或 """),无裸字符串、无隐式类型转换 - 块 {} 与 dict {} 同形;键重复报错;# 注释(引号/ENC 内不剥离) - 不支持:缩进语义、YAML 裸值/冒号、\u 转义(直接写 UTF-8)、 未知 duration 单位、裸标识符值、科学计数 duration 语法 EBNF 见 docs/CONFIG-FORMAT.md §5.2 ============================================================ ---- 工具 ----