struct coordinate {
int x;
int y;
int z;
};
BOOST_FUSION_ADAPT_STRUCT(
coordinate,
(int, x)
(int, y)
(int, z)
)
template <typename Iterator>
struct coordinate_grammar : qi::grammar<Iterator, coordinate(), ascii::space_type>
{
coordinate_grammar()
:
coordinate_grammar::base_type(start),
optional_x(-(qi::int_ >> ':')),
optional_z(-('@' >> qi::int_)),
start(optional_x >> qi::int_ >> optional_z)
{
}
qi::rule<Iterator, int, ascii::space_type> optional_x;
qi::rule<Iterator, int, ascii::space_type> optional_z;
qi::rule<Iterator, coordinate(), ascii::space_type> start;
};
Je souhaite définir 0
comme valeur par défaut de x
y 1000
comme valeur par défaut de z
.
Entrée --> Sortie souhaitée :
-
200:400@300
-->[200,400,300]
-
200:400
-->[200,400,1000]
-
400@300
-->[0,400,300]
-
400
-->[0,400,1000]
Comment dois-je modifier la syntaxe de la règle pour fournir une valeur par défaut lorsqu'une valeur n'a pas été spécifiée pour l'élément optionnel _( optional_x
y optional_z
)_ des analyseurs ?