C库读取基于花括号语法的配置文件
对于我的C项目,我希望使用基于花括号的配置文件,如:C库读取基于花括号语法的配置文件,c,configuration-files,C,Configuration Files,对于我的C项目,我希望使用基于花括号的配置文件,如: account { name = "test@test.com"; password = "test"; autoconnect = true; } 等等,或者一些变化 我正在寻找一些好的C库来满足我的需要。您能提供建议吗?我建议使用lexer和解析器来完成这项工作,可以使用/combo或/ 基本上,您可以在.l和.y文件中编写代码来描述布局,并且lexer/parser生成器创建C代码来为您处理文件,调用函数将数据
account {
name = "test@test.com";
password = "test";
autoconnect = true;
}
等等,或者一些变化
我正在寻找一些好的C库来满足我的需要。您能提供建议吗?我建议使用lexer和解析器来完成这项工作,可以使用/combo或/ 基本上,您可以在
.l
和.y
文件中编写代码来描述布局,并且lexer/parser生成器创建C代码来为您处理文件,调用函数将数据传递给您
除非你精通这门艺术,否则词汇分析和句法分析是一件很痛苦的事情。像我提到的那些工具使这项工作容易得多
在lexer中,您可以识别词汇元素,如
e\u账户(账户)
e_openbrace({)
e_name(name)
e_字符串(“[^”]*”)
e_分号(;)
e_account
,e_openbrace
,零个或多个e_节
,最后是e_closebrace
。还检测e_节
作为(除其他外)e_名称
,e_等于
,e_字符串
,然后是e_分号
大多数智能都是隐藏的(至少对于lex/yacc来说,代码看起来很难看),但这比尝试自己编写要好:-)您想要的语法几乎与相同,如下所示:
account = {
name = "test@test.com",
password = "test",
autoconnect = true,
}
如果你适合,我强烈推荐Lua,因为它被设计成嵌入在C程序中作为一个配置或脚本工具。你可以使用原始的LuaC API,或者如果你喜欢C++,有一些东西可以使语言中的某些东西更漂亮。
下面是一个简单的示例,使用纯C Lua API从包含Lua“块”的缓冲区检索值。您基本上可以用C读取(或mmap)配置文件,将指向文本的指针传递给Lua,让Lua执行它,然后迭代检索位和段。另一种方法是执行“绑定”使用绑定,流程更像是设置C结构来表示配置数据,将它们绑定到Lua,并让Lua配置脚本实际填充(构造)一个配置对象,然后从C访问该对象。根据您的具体需要,这可能更好,也可能更差,但在纯C中(与C++相反),学习曲线可能比“获取值”方法更陡峭。您所描述的JSON变体:
account={
name: "test@test.com",
password: "test",
autoconnect: true
}
为此,我想推荐Ragel,它可以生成扫描程序,并且语法相当简单。+1:实际上,Lua的设计目标之一是可以用作配置语言。