我必须解析下面的一段文字
Camera {
position 0 0 0
direction 0 -1 0
up 0 1 0
FOVy 45
}
Run Code Online (Sandbox Code Playgroud)
我的选择继续提升:精神,因为我没有处理弹性或野牛.
我终于有了这个语法
struct camera_grammar : qi::grammar<Iterator, camera(), ascii::space_type>
{
qi::rule<Iterator, camera(), ascii::space_type> start;
camera_grammar() : camera_grammar::base_type(start)
{
start %=
lit("Camera")
>> '{'
>> (lit("position") >> float_ >> float_ >> float_)
>> (lit("direction") >> float_ >> float_ >> float_)
>> (lit("up") >> float_ >> float_ >> float_)
>> (lit("FOVy") >> int_)
>> '}'
;
}
};
Run Code Online (Sandbox Code Playgroud)
问题是花括号内的部分甚至可以交换; 我已经阅读了关于置换运算符^但是当至少有一个操作数以任何顺序匹配时,我读到匹配.我需要我的语法才能匹配只有当所有这些都按任何顺序而且只有一次时.
有人能帮助我吗?
我目前正在开发一个应用程序,旨在成为Windows的改进环境变量编辑器.
我已经使用System.Environment.GetEnvironmentVariables()和Registry来获取它们.但是这两种方法都在%之间扩展了文本,所以不是像实例%systemroot%/ system32那样得到我的程序中的C:/ Windows/system32 /.
有没有办法阻止这些物品的扩张?