SRON (SRInternet-Object Notation) 是一种统一和简化配置管理的通用配置文件格式,易于阅读、编写、验证和扩展。本项目是为 SRON 提供 C/C++、Python、.NET 三套等价实现,覆盖**解析(parse)与序列化(construct/serialize)**完整链路。完整格式规范见 SRON 官方仓库,API 文档见 document.md。
一个典型的 SRON 配置文件(标准扩展名 .Srd):
// 全局配置
name = "A SRON based Application"
debug = true
// 命名空间与类型指定
server.host = "localhost"
server.port :integer = 8080
// 多行字符串
database.query = """
SELECT * FROM users
WHERE status = 'active';
"""
// 列表
allowed_origins = ["https://example.com", "https://localhost:3000"]from sron import SRON
sron = SRON()
data = sron('server.port :integer = 8080\n') # 解析:str/bytes -> dict
text = sron.construct(data) # 序列化:dict -> SRON 文本解析结果以 (类型, 值) 元组保留显式类型信息:
{'server': ('dict', {'port': ('int', 8080)})}也可通过 push_parser / push_constructor 注册自定义类型的解析与序列化逻辑。
以 SRON 官方规范 为共同契约,各语言实现等价功能。
支持解析与序列化双向链路,规范特性已全部覆盖,配套 18 个单元测试用例(round-trip 一致性回归)。自带可执行 demo(python sron.py)。
| 特性 | 状态 |
|---|---|
注释(//、#、/* ... */) |
✅ |
命名空间(a.b.c = value) |
✅ |
类型指定(key : type = value,含 integer/boolean 规范名别名) |
✅ |
| 整数(十/二/三/八/十六进制、正负号) | ✅ |
数字分隔符(1_000_000) |
✅ |
浮点数(含科学计数法 1e6、1.23e-4) |
✅ |
| 字符串(双/单引号、三重引号、转义序列、空串) | ✅ |
布尔值 / 空值(true/false/null/nil) |
✅ |
| 列表(支持嵌套、混合类型) | ✅ |
| 序列化(含三重引号自动转换) | ✅ |
| 自定义类型扩展接口 | ✅ |
单元测试(python/symlib/tests) |
✅ |
解决方案入口为 sym-lib.sln。目前仅有 Strchr 字符判定工具类可用作解析器基础,Sron 类为空壳,解析逻辑待实现。
尚无 SRON 解析实现。现有基础库(symstr 字符串处理、hashmap 哈希映射、TUI 框架)将作为 C 版解析器的底层依赖,通过根目录 make 构建。
| 能力 | Python | .NET | C/C++ |
|---|---|---|---|
| 解析(文本 → 对象) | ✅ | ❌ | ❌ |
| 序列化(对象 → 文本) | ✅ | ❌ | ❌ |
| 注释 | ✅ | ❌ | ❌ |
| 命名空间 | ✅ | ❌ | ❌ |
| 类型指定 | ✅ | ❌ | ❌ |
| 自定义类型扩展 | ✅ | ❌ | ❌ |
SRON-Parser/
├── c/ # C/C++ 基础库(symstr、hashmap、speed、TUI),供后续 C 版解析器使用
│ └── subapp/ # 基于自研 ants 框架的 TUI 演示子应用
├── python/symlib/ # Python SRON 解析器(解析 + 序列化)
│ ├── sron.py # SRON 解析/构造核心实现
│ ├── bufferedreader.py # Unicode 缓冲读取器
│ └── tests/ # unittest 测试套件
├── dotnet/symlib/ # .NET 实现(骨架)
├── document.md # 库 API 文档
├── sym-lib.sln # .NET 解决方案入口
└── Makefile # 顶层构建(代理至 c/)
以下为本项目遵循的非官方语法定义(ODS 3):
<sron> = [<line> (, <line>)*]
<line> = <path> [, ':', <type>], '=', <value>
<path> = <ident> (, '.', <ident>)*
<type> = 'string' | 'integer' | 'float' | 'boolean' | 'null' | 'array' | <defined_class>
<defined_class> = (? 用户声明的类型名称 须匹配<ident> ?)
<ident> = <ident_head> <ident_body>*
<ident_head> = <alpha> | '_'
<alpha> = <alpha_low> | <alpha_up>
<alpha_low> = 'a' | 'b' | 'c' | ... | 'z'
<alpha_up> = 'A' | 'B' | 'C' | ... | 'Z'
<ident_body> = <ident_head> | <dec_body>
<value> = <string> | <integer> | <real> | <boolean> | <null> | <array> | <defined_type>
<defined_type> = (? 用户声明的类型 value 语法 ?)
<digit> = '0b' <bin> | '0' <oct> | '0x' <hex> | '0t' <ter> | <dec>
<dec> = <dec_body> | '+' <dec_body> | '-' <dec_body>
<bin> = {<bin_dig> ['_']} <bin_dig>
<oct> = {<oct_dig> ['_']} <oct_dig>
<ter> = {<ter_dig> ['_']} <ter_dig>
<hex> = {<hex_dig> ['_']} <hex_dig>
<dec_body> = {<dec_dig> ['_']} <dec_dig>
<hex_dig> = <dec_dig> | 'a' | 'b' | 'c' | ... | 'f' | 'A' | 'B' | 'C' |... | 'F'
<dec_dig> = <oct_dig> | '8' | '9'
<oct_dig> = <ter_dig> | '3' | '4' | ... | '7'
<ter_dig> = <bin_dig> | '2'
<bin_dig> = '0' | '1'
<float> = ['-' | '+'] [<dec_body>] '.' [<dec_body>]
<real> = <float> | <float> 'e' <dec> | <float> 'E' <dec>
<boolean> = 'true' | 'false' | 'null' | '0' | '1'
<null> = 'null'
<string> = '"' <any>* '"' | "'" <any>* "'" | '"""' <any>* '"""' | "'''" <any>* "'''"
<array> = '[', [<value>] (, ',', <value>)*, ']'
<space> = ' ' | '\t' | '\n' | '\r' | '\f' | '\v' | ' ' | <note>
<note> = '//' <any>* '\n' | '/*' <any>* '*/'
(*
注意,本规则里单词内部字符之间不允许出现<space>
而单词之间则允许出现<space>,且<space>会被忽略。
单词内部字符间直接连接,单词间使用','连接。
*)Python 缺陷修复:浮点数解析、(已完成)。\x转义解析、包导入结构Python 规范补全:单引号字符串、科学计数法、三进制整数、数字分隔符(已完成)。_测试体系:解析/序列化 round-trip 一致性测试与规范符合性测试套件(已完成,python/symlib/tests)。- .NET 实现:基于
Strchr完成Sron解析与序列化,随 SRON.NET 发布 NuGet 包。 - C/C++ 实现:基于
symstr/hashmap实现 C 版解析器。
- C/C++:根目录执行
make(代理至c/目录构建)。 - Python:进入
python/symlib目录,执行python3 sron.py运行内置 demo;在仓库根目录执行python -m unittest discover -s python/symlib/tests运行测试。 - .NET:使用 Visual Studio 打开
sym-lib.sln。
HDDF (High-Density Data Format) 是一种通用的二进制数据存储格式,作为本方法库的后续规划内容。
本项目代码使用 Apache License 2.0 许可证;SRON 格式规范本身采用 MIT 许可证。