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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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);