我必须解析以下文本
Camera {
position 0 0 0
direction 0 -1 0
up 0 1 0
FOVy 45
}
我的选择继续提升:精神,因为我不必处理 flex 或 bison。
我终于有了这个语法
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_)
>> '}'
;
}
};
问题是花括号内的部分甚至可以交换;我已经阅读了关于置换运算符^的信息,但是当至少有一个操作数以任何顺序匹配时,我读到了该匹配。我需要我的语法只有当它们都以任何顺序并且只有一次时才匹配。
有人可以帮助我吗?