次のテキストを解析する必要があります
Camera {
position 0 0 0
direction 0 -1 0
up 0 1 0
FOVy 45
}
flex や bison を扱う必要がなかったので、boost:spirit を選択しました。
私はついにこの文法を持っていました
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_)
>> '}'
;
}
};
問題は、中括弧内の部分が交換される可能性さえあることです。順列演算子^について読んだことがありますが、オペランドの少なくとも 1 つが任意の順序で一致した場合に一致することを読みました。すべての文法が任意の順序で 1 回だけ一致する場合にのみ、文法が一致する必要があります。
誰か助けてくれませんか?