Bonjour à tous.
Avoir lu les différents sujets sur les parseurs ne m'a pas réellement aidé pour mon problème. Voici globalement l'objectif.

Créer une fonction ayant pour prototype :
std::pair<SomeFunctor,bool> Parse(const std::string& expression);

L'opérator () de SomeFunctor est du type :

bool SomeFunctor::operator()(const Color& c);

Voici les mots clés pouvant être contenus dans la chaine :

"(", ")", "or", "and","not", "r", "v", "b", "=", "!=", "<", ">", "<=", ">=", "=<", "=>", "&", "|","!",...

Et la fonction pourrait parser par exemple :


r<=100 & (!(v<200) | b>150)
r<=100 and (not(v<200) or b>150) Ce qui revient au même.
et même

r and b >100 or v<50 Ce que n'autoriserait pas notre compilateur par exemple.

Le foncteur renvoyé est tel que l'opérator () du foncteur renvoit true si la couleur respecte la chaine et false sinon. Le bool de la pair permet d'indiquer si le parsing a échoué.

Je ne sais même pas par ou commencer (je ne voit même pas à quoi ressemble mon SomeFunctor).

Spirit est-il intéressant ici ?
Si il faut l'écrire à la main, quelques idées ?

L'objectif est que l'opérator() du SomeFunctor soit le plus rapide possible.

Merci à tous.