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);
Partager