Skip to content

Latest commit

 

History

80 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SRON-Parser

License Status

适用于 SRON 格式的多语言解析器

简介

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"]

Python 使用

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 官方规范 为共同契约,各语言实现等价功能。

Python(python/symlib)— 功能完整

支持解析与序列化双向链路,规范特性已全部覆盖,配套 18 个单元测试用例(round-trip 一致性回归)。自带可执行 demo(python sron.py)。

特性 状态
注释(//#/* ... */
命名空间(a.b.c = value
类型指定(key : type = value,含 integer/boolean 规范名别名)
整数(十/二/三/八/十六进制、正负号)
数字分隔符(1_000_000
浮点数(含科学计数法 1e61.23e-4
字符串(双/单引号、三重引号、转义序列、空串)
布尔值 / 空值(true/false/null/nil
列表(支持嵌套、混合类型)
序列化(含三重引号自动转换)
自定义类型扩展接口
单元测试(python/symlib/tests

.NET(dotnet/symlib)— 早期骨架

解决方案入口为 sym-lib.sln。目前仅有 Strchr 字符判定工具类可用作解析器基础,Sron 类为空壳,解析逻辑待实现。

C/C++(c/)— 规划中

尚无 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/)

SRON 语法定义

以下为本项目遵循的非官方语法定义(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>会被忽略。
    单词内部字符间直接连接,单词间使用','连接。
*)

Roadmap

  1. Python 缺陷修复:浮点数解析、\x 转义解析、包导入结构(已完成)。
  2. Python 规范补全:单引号字符串、科学计数法、三进制整数、数字分隔符 _(已完成)。
  3. 测试体系:解析/序列化 round-trip 一致性测试与规范符合性测试套件(已完成,python/symlib/tests)。
  4. .NET 实现:基于 Strchr 完成 Sron 解析与序列化,随 SRON.NET 发布 NuGet 包。
  5. 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 文件

HDDF (High-Density Data Format) 是一种通用的二进制数据存储格式,作为本方法库的后续规划内容。

许可证

本项目代码使用 Apache License 2.0 许可证;SRON 格式规范本身采用 MIT 许可证。

About

Multi-language parser for the SRON (SRInternet-Object Notation) configuration format.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages