Articles of boost spirit qi

faire un vecteur de pointeurs partagés à partir de Spirit Qi

Ceci est une question de suivi d’ une question précédente . Je peux parsingr des vecteurs de chaînes de ma grammaire, mais je n’arrive pas à parsingr un vecteur de pointeurs partagés sur des chaînes ; c.-à-d. std::vector<std::shared_ptr > besoin d’un peu d’aide. Mon en-tête de compilation: #define BOOST_SPIRIT_USE_PHOENIX_V3 1 #include #include #include #include #include […]

Learning Boost.Spirit: parsingr INI

J’ai commencé à apprendre Boost.Spirit et à finir de lire la section Qi – Writing Parsers . Lors de la lecture, tout est facile et compréhensible. Mais lorsque j’essaie de faire quelque chose, il y a beaucoup d’erreurs, car il y a trop d’inclusions et d’espaces de noms et j’ai besoin de savoir quand les […]

Classe v / s struct in boost :: spirit

Dans la documentation boost :: spirit, les grammaires sont définies à l’aide de struct. Par exemple, template struct my_grammar : qi::grammar<Iterator, qi::locals, ascii::space_type > { my_grammar() : my_grammar::base_type(start, “start”) { // using this and that // rules and action etc. } }; Je me demande si je peux l’écrire en utilisant la classe (sinon pourquoi?). […]

Aucune erreur de conversion viable de boost :: spirit :: saved_type

Je reçois cette erreur: include / boost / spirit / home / phoenix / bind / detail / member_function_ptr.hpp: 109: 35: pas de conversion viable de ‘boost :: spirit :: saved_type’ à ‘const std :: __ 1: : basic_ssortingng ‘ #define BOOST_SPIRIT_USE_PHOENIX_V3 #define spirit boost::spirit #define phoenix boost::phoenix component_ = lit( ‘-‘ ) >> ssortingng_[ […]

Erreur lors de l’utilisation de boost :: spirit :: qi :: phrase_parse () avec un qi :: grammaire

Je fais un parsingur de messages IRC avec Boost.Spirit mais une erreur (très longue) s’affiche lorsque j’essaie d’parsingr une entrée. J’ai suivi l’exemple des ” chiffres romains “. De plus, j’utilise g++4.7 avec -std=c++11 . L’erreur se produit uniquement lorsque j’appelle phrase_parse() sur test.cpp , et non lorsque je test.cpp une instance de message_grammar . […]

avertissement de déclenchement de l’parsingur d’esprit boost

Comment puis-je append des avertissements dans l’parsingur d’esprit boost? Edit: … qui pourrait signaler le problème avec la position Par exemple, si j’ai un parsingur entier: (‘0′ >> oct) | int_ J’aimerais pouvoir faire quelque chose comme ça: (‘0’ >> oct) | “-0” –> sortinggger warning(“negative octal values are not supported, it will be interpreted […]

Renforcez l’esprit d’parsing des chaînes avec les espaces de début et de fin

Je suis encore nouveau dans l’esprit Boost. J’essaie d’parsingr une chaîne avec des espaces de début et de fin possibles et des espaces intermédiaires. Je veux faire ce qui suit avec la chaîne Supprimer tout espace blanc de fin et de début Limiter les espaces de mots intermédiaires à un espace blanc Par exemple “( […]

Boost Spirit Qi Espérance

Je suis relativement nouveau dans Spirit Qi et j’essaye d’parsingr un langage qui ressemble à un assembleur. Par exemple, j’aimerais parsingr: Func Ident{ Mov name, “hello” Push 5 Exit } Jusqu’ici tout va bien. Je peux parsingr correctement. Cependant, le gestionnaire d’erreurs présente parfois des emplacements d’erreur étranges. Prenons par exemple le code défectueux suivant: […]

Utilisation de l’action sémantique avec la propagation d’atsortingbuts dans l’esprit

J’ai un peu joué avec le code chez link et j’ai une autre question. J’ai ajouté une action sémantique à: action = actions_ >> ‘(‘ >> parameters >> ‘)'[ /* semantic action placed here */]; je peux donc réutiliser la règle avec la vérification à plusieurs endroits. Le problème est qu’alors l’esprit cesse de propager […]

Comment parsingr la fin de ligne avec boost :: spirit :: qi?

Un simple eol ne devrait-il pas faire l’affaire? #include #include #include #include using boost::spirit::ascii::space; using boost::spirit::lit; using boost::spirit::qi::eol; using boost::spirit::qi::phrase_parse; struct fix : std::unary_function { fix(std::ssortingng &result) : result(result) {} void operator() (char c) { if (c == ‘\n’) result += “\\n”; else if (c == ‘\r’) result += “\\r”; else result += c; } […]