Mon problème est le suivant. J'ai un noeud ast qui est défini comme comme ce qui suit:analyse d'une seule valeur dans un nœud ast avec un conteneur
struct foo_node{
std::vector<std::string> value;
}
et j'ai un analyseur comme celui-ci pour l'analyse syntaxique dans le struct, qui fonctionne très bien:
typedef x3::rule<struct foo_node_class, foo_node> foo_node_type;
const foo_node_type foo_node = "foo_node";
auto const foo_node_def = "(" >> +x3::string("bar") >> ")";
Maintenant, je veux y parvenir l'analyseur analyse également "bar"
, sans crochets, mais seulement si c'est une barre unique. J'ai essayé de le faire comme ceci:
auto const foo_node_def = x3::string("bar")
| "(" > +x3::string("bar") > ")";
mais cela me donne une erreur de compilation, car x3::string("bar")
retourne une chaîne et non un std::vector<std::string>
. Ma question est, comment puis-je réaliser, que l'analyseur syntaxique x3::string("bar")
(et tous les autres analyseurs qui retournent une chaîne) analyse un vecteur?
s'il vous plaît toujours après a [mcve] –
Je suis entièrement d'accord avec l'exigence d'un MCVE/SSCCE. Dans votre cas vous aviez des conflits de nommage impossibles et des choses essentielles manquantes ("SPIRIT_DEFINE") que seuls les experts sauraient "deviner" – sehe
Je suis vraiment désolé je n'étais pas en ligne jusqu'à maintenant – Exagon