Boost Spirit X3: syntaxe incorrecte pour BOOST_SPIRIT_DEFINE
Salut!
J'essaie de definir une grammaire sur un arbre, mais j'ai un souci avec la syntaxe de BOOST_SPIRIT_DEFINE.
En gros, de ce que j'ai compris de la bilbiotheque, je dois utiliser BOOST_SPIRIT_DEFINE pour les regles qui sont recursives.
J'ai essaye quelques variantes du code suivant (j'ai du mal a suivre les evolutions de la syntaxe a travers les presentations/tutos etc, mais je me base sur https://godbolt.org/ ), mais il refuse de compiler, avec l'erreur suivante:
Code:
1 2 3 4 5 6 7
| error: expected expression
BOOST_SPIRIT_DEFINE(branch, branch_set);
^
/include/boost/spirit/home/x3/nonterminal/rule.hpp:247:5: note: expanded from macro 'BOOST_SPIRIT_DEFINE'
BOOST_SPIRIT_DEFINE_, _, BOOST_PP_VARIADIC_TO_SEQ(__VA_ARGS__)) \
^
1 error generated. |
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
|
std::string input="(,,(,));" ;
auto iter = input.begin();
auto iter_end = input.end();
// Grammar
rule<struct branch> branch{"branch"};
rule<struct branch_set> branch_set{"branch_set"};
auto name = alpha >> *alnum;
auto length = ':' > double_;
auto leaf = -name;
auto internal= '(' >> branch_set >> ')' >> -name;
auto subtree = leaf | internal;
auto tree = subtree >> ";";
auto const branch_def = subtree >> length;
auto const branch_set_def = branch | branch >> ',' >> branch_set;
BOOST_SPIRIT_DEFINE(branch, branch_set); |