IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Boost C++ Discussion :

Parsing de fichier avec spirit


Sujet :

Boost C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 349
    Par défaut Parsing de fichier avec spirit
    Bonjour, je viens vers vous car j'ai tourné un peu dans tous les sens lu pas mal de doc et j'arrive a rien
    J'ai un fichier:
    blablablabla
    blablablabla
    -ENZREV
    blablablablablablablablablabla
    blablablablablablablablablabla

    -ENZIRREV
    blablablablablablablablablabla
    blablablablablablablablablabla

    -METINT
    blablablablablablablablablabla
    blablablablablablablablablabla

    -METEXT
    blablablablablablablablablabla
    blablablablablablablablablabla

    -CAT
    blablablablablablablablablabla
    blablablablablablablablablabla
    donc je voudrais stocker le blabla dans les des vecteur aproprié :
    std::vector<std::string> enzrev, enzirrev, metint, metext,cat;
    pour celà j'ai fait
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #ifndef _PARSER_HPP
    #define	_PARSER_HPP
     
    #include <vector>
    #include <map>
    #include <string>
    #include <boost/spirit/include/qi.hpp>
    #include <boost/spirit/include/qi_lit.hpp>
    #include <boost/spirit/include/qi_lexeme.hpp>
    #include <boost/spirit/include/qi_grammar.hpp>
    #include <boost/spirit/include/support_ascii.hpp>
    #include <boost/spirit/include/phoenix_core.hpp>
    #include <boost/spirit/include/phoenix_operator.hpp>
    #include <boost/spirit/include/phoenix_object.hpp>
    #include <boost/fusion/include/adapt_struct.hpp>
    #include <boost/spirit/include/phoenix_stl.hpp>
    #include <boost/fusion/include/io.hpp>
    #include <boost/fusion/adapted/struct/adapt_struct.hpp>
    #include <boost/fusion/include/adapt_struct.hpp>
     
    namespace parser {
        using ::boost::spirit::qi::grammar;
        using ::boost::spirit::ascii::space_type;
        using ::std::vector;
        using ::std::map;
        using ::std::string;
        /**
         * data structure who store data parsed
         */
        struct Data {
            vector<string>                  enzrev;
            vector<string>                  enzirrev;
            vector<string>                  metext;
            vector<string>                  metint;
            //map< string,vector<string> >    cat;
        };
     
        BOOST_FUSION_ADAPT_STRUCT(  Data,
                                    (vector<string>                         , enzrev)
                                    (vector<string>                         , enzirrev)
                                    (vector<string>                         , metext)
                                    (vector<string>                         , metint)
                                )
        /**
         *
         */
        template <typename Iterator>
        struct parser : public grammar<Iterator,Data(), space_type> {
            /**
             *
             */
            parser() : parser::base_type(start) {
                using ::boost::spirit::lit;
                using ::boost::spirit::qi::lexeme;
                using ::boost::spirit::ascii::char_;
                using ::boost::spirit::qi::rule;
                using ::boost::phoenix::push_back;
                // declare rules
                rule<Iterator,string> content;
                rule<Iterator,vector()> enzrevContent;
                rule<Iterator,vector()> enzirrevContent;
                rule<Iterator,vector()> metextContent;
                rule<Iterator,vector()> metintContent;
                rule<Iterator,map()> catContent;
                rule<Iterator,Data(),space_type> start;
                // construct rules
                content         %= lexeme[+(char_ - ('\n\n' | "^-")];
                enzrevContent   = "^-ENZREV"    >> *content [push_back(content)];
                enzirrevContent = "^-ENZIRREV"  >> *content [push_back(content)];
                metextContent   = "^-METEXT"    >> *content [push_back(content)];
                metintContent   = "^-METINT"    >> *content [push_back(content)];
                catContent      = "^-CAT"       >> *content;
     
     
            }
     
        };
    }
    #endif
    et quand je compile plein d'erreur
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    g++    -c -g -I/usr/include/glib-2.0 -I/usr/include/glibmm-2.4 -I/usr/lib64/glibmm-2.4/include -I/usr/lib64/glib-2.0/include -I/usr/include/glibmm-2.4/glibmm -I/usr/include/boost/spirit -MMD -MP -MF build/Debug/GNU-Linux-x86/_ext/data/Projets/C++/metatool/src/Controller.o.d -o build/Debug/GNU-Linux-x86/_ext/data/Projets/C++/metatool/src/Controller.o /data/Projets/C++/metatool/src/Controller.cpp
    Dans le fichier inclus à partir de /data/Projets/C++/metatool/src/Controller.hpp:36,
              à partir de /data/Projets/C++/metatool/src/Controller.cpp:30:
    /data/Projets/C++/metatool/src/parser/parser.hpp:73:50: attention : constante caractère multi-caractères
                     from /data/Projets/C++/metatool/src/Controller.cpp:30:
    In file included from /data/Projets/C++/metatool/src/Controller.hpp:36,
    /data/Projets/C++/metatool/src/parser/parser.hpp:44: erreur: ‘tag_of’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:44: erreur: explicit specialization of non-template ‘parser::boost::fusion::traits::tag_of’
    /data/Projets/C++/metatool/src/parser/parser.hpp:44: erreur: ‘struct_tag’ does not name a type
    /data/Projets/C++/metatool/src/parser/parser.hpp:44: erreur: ‘struct_size’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:44: erreur: ‘mpl’ has not been declared
    /data/Projets/C++/metatool/src/parser/parser.hpp:44: erreur: expected ‘{’ before ‘int_’
    /data/Projets/C++/metatool/src/parser/parser.hpp:44: erreur: expected initializer before ‘<’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:49: erreur: ‘struct_member’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:49: erreur: explicit specialization of non-template ‘parser::boost::fusion::extension::struct_member’
    /data/Projets/C++/metatool/src/parser/parser.hpp:49: erreur: ‘struct_member’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:49: erreur: ‘parser::boost::fusion::extension::struct_member’ is not a template type
    /data/Projets/C++/metatool/src/parser/parser.hpp:49: erreur: ‘struct_member’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:49: erreur: ‘parser::boost::fusion::extension::struct_member’ is not a template type
    /data/Projets/C++/metatool/src/parser/parser.hpp:49: erreur: ‘struct_member’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:49: erreur: ‘parser::boost::fusion::extension::struct_member’ is not a template type
    /data/Projets/C++/metatool/src/parser/parser.hpp: In constructor ‘parser::parser<Iterator>::parser()’:
    /data/Projets/C++/metatool/src/parser/parser.hpp:58: erreur: ‘start’ was not declared in this scope
    /data/Projets/C++/metatool/src/parser/parser.hpp:66: erreur: a function call cannot appear in a constant-expression
    /data/Projets/C++/metatool/src/parser/parser.hpp:66: erreur: patron de l'argument 2 est invalide
    /data/Projets/C++/metatool/src/parser/parser.hpp:66: erreur: invalid type in declaration before ‘;’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:67: erreur: a function call cannot appear in a constant-expression
    /data/Projets/C++/metatool/src/parser/parser.hpp:67: erreur: patron de l'argument 2 est invalide
    /data/Projets/C++/metatool/src/parser/parser.hpp:67: erreur: invalid type in declaration before ‘;’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:68: erreur: a function call cannot appear in a constant-expression
    /data/Projets/C++/metatool/src/parser/parser.hpp:68: erreur: patron de l'argument 2 est invalide
    /data/Projets/C++/metatool/src/parser/parser.hpp:68: erreur: invalid type in declaration before ‘;’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:69: erreur: a function call cannot appear in a constant-expression
    /data/Projets/C++/metatool/src/parser/parser.hpp:69: erreur: patron de l'argument 2 est invalide
    /data/Projets/C++/metatool/src/parser/parser.hpp:69: erreur: invalid type in declaration before ‘;’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:70: erreur: a function call cannot appear in a constant-expression
    /data/Projets/C++/metatool/src/parser/parser.hpp:70: erreur: patron de l'argument 2 est invalide
    /data/Projets/C++/metatool/src/parser/parser.hpp:70: erreur: invalid type in declaration before ‘;’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:73: erreur: invalid operands of types ‘intandconst char [3]’ to binary ‘operator|’
    /data/Projets/C++/metatool/src/parser/parser.hpp:73: erreur: expected ‘)’ before ‘]’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:73: erreur: expected ‘]’ before ‘;’ token
    /data/Projets/C++/metatool/src/Controller.cpp: In member function ‘void Controller::start()’:
    /data/Projets/C++/metatool/src/Controller.cpp:59: erreur: ‘Data’ was not declared in this scope
    /data/Projets/C++/metatool/src/Controller.cpp:59: erreur: expected ‘;’ before ‘data’
    /data/Projets/C++/metatool/src/Controller.cpp:61: erreur: ‘data’ was not declared in this scope
                     from /usr/include/boost/spirit/home/phoenix/core/detail/function_eval.hpp:79,
                     from /usr/include/boost/spirit/home/phoenix/function/function.hpp:11,
                     from /usr/include/boost/spirit/home/phoenix/function.hpp:11,
                     from /usr/include/boost/spirit/include/phoenix_function.hpp:11,
                     from /usr/include/boost/spirit/home/support/terminal.hpp:18,
                     from /usr/include/boost/spirit/home/support/common_terminals.hpp:15,
                     from /usr/include/boost/spirit/home/lex/lexer/terminals.hpp:13,
                     from /usr/include/boost/spirit/home/lex/lexer.hpp:13,
                     from /usr/include/boost/spirit/home/lex.hpp:13,
                     from /usr/include/boost/spirit/home/lex/lexer_lexertl.hpp:15,
                     from /usr/include/boost/spirit/include/lex_lexertl.hpp:16,
                     from /data/Projets/C++/metatool/src/Controller.hpp:35,
                     from /data/Projets/C++/metatool/src/Controller.cpp:30:
    /usr/include/boost/spirit/home/phoenix/core/detail/function_eval.hpp: At global scope:
    /usr/include/boost/spirit/home/phoenix/core/detail/function_eval.hpp: In instantiation of ‘boost::phoenix::detail::function_eval<1>::result<boost::phoenix::basic_environment<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> > >’:
    In file included from /usr/include/boost/preprocessor/iteration/detail/iter/forward1.hpp:52,
    /usr/include/boost/spirit/home/phoenix/core/detail/composite_eval.hpp:89:   instantiated from ‘boost::phoenix::detail::composite_eval<2>::result<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::phoenix::basic_environment<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >’
    /usr/include/boost/spirit/home/phoenix/core/composite.hpp:61:   instantiated from ‘boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >::result<boost::phoenix::basic_environment<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >’
    /usr/include/boost/spirit/home/phoenix/core/actor.hpp:56:   instantiated from ‘boost::phoenix::eval_result<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::phoenix::basic_environment<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >’
    /usr/include/boost/mpl/eval_if.hpp:38:   instantiated from ‘boost::mpl::eval_if<mpl_::bool_<false>, boost::mpl::identity<boost::phoenix::detail::error_expecting_arguments>, boost::phoenix::eval_result<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::phoenix::basic_environment<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >’
    /usr/include/boost/spirit/home/phoenix/core/actor.hpp:87:   instantiated from ‘boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >’
    /data/Projets/C++/metatool/src/parser/parser.hpp:74:   instantiated from ‘parser::parser<Iterator>::parser() [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]’
    /data/Projets/C++/metatool/src/Controller.cpp:52:   instantiated from here
    /usr/include/boost/spirit/home/phoenix/core/detail/function_eval.hpp:116: erreur: wrong number of template arguments (1, should be 2)
    /usr/include/boost/spirit/home/phoenix/stl/container/container.hpp:484: erreur: provided fortemplate<class C, class Arg> struct boost::phoenix::stl::push_back::result’
    /usr/include/boost/spirit/home/phoenix/core/detail/function_eval.hpp: In instantiation of ‘boost::phoenix::detail::function_eval<1>::result<boost::phoenix::basic_environment<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> > >’:
    /usr/include/boost/spirit/home/phoenix/core/detail/composite_eval.hpp:89:   instantiated from ‘boost::phoenix::detail::composite_eval<2>::result<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::phoenix::basic_environment<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >’
    /usr/include/boost/spirit/home/phoenix/core/composite.hpp:61:   instantiated from ‘boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >::result<boost::phoenix::basic_environment<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >’
    /usr/include/boost/spirit/home/phoenix/core/actor.hpp:56:   instantiated from ‘boost::phoenix::eval_result<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::phoenix::basic_environment<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >’
    /usr/include/boost/mpl/eval_if.hpp:38:   instantiated from ‘boost::mpl::eval_if<mpl_::bool_<false>, boost::mpl::identity<boost::phoenix::detail::error_expecting_arguments>, boost::phoenix::eval_result<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> >, boost::phoenix::basic_environment<boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >’
    /usr/include/boost/spirit/home/phoenix/core/actor.hpp:87:   instantiated from ‘boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >’
    /data/Projets/C++/metatool/src/parser/parser.hpp:74:   instantiated from ‘parser::parser<Iterator>::parser() [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]’
    /data/Projets/C++/metatool/src/Controller.cpp:52:   instantiated from here
    /usr/include/boost/spirit/home/phoenix/core/detail/function_eval.hpp:126: erreur: wrong number of template arguments (1, should be 2)
    /usr/include/boost/spirit/home/phoenix/stl/container/container.hpp:484: erreur: provided fortemplate<class C, class Arg> struct boost::phoenix::stl::push_back::result’
                     from /data/Projets/C++/metatool/src/Controller.cpp:30:
    /data/Projets/C++/metatool/src/parser/parser.hpp: In constructor ‘parser::parser<Iterator>::parser() [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >]’:
    In file included from /data/Projets/C++/metatool/src/Controller.hpp:36,
    /data/Projets/C++/metatool/src/Controller.cpp:52:   instantiated from here
    /data/Projets/C++/metatool/src/parser/parser.hpp:74: erreur: cannot convert ‘const boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const char (&)[9]>, 0l>, const boost::proto::exprns_::expr<boost::proto::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type>&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >&>, 0l> >, 2l>&>, 1l>&>, 2l>’ to ‘int’ in assignment
    /data/Projets/C++/metatool/src/Controller.cpp:52:   instantiated from here
    /data/Projets/C++/metatool/src/parser/parser.hpp:75: erreur: cannot convert ‘const boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const char (&)[11]>, 0l>, const boost::proto::exprns_::expr<boost::proto::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type>&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >&>, 0l> >, 2l>&>, 1l>&>, 2l>’ to ‘int’ in assignment
    /data/Projets/C++/metatool/src/Controller.cpp:52:   instantiated from here
    /data/Projets/C++/metatool/src/parser/parser.hpp:76: erreur: cannot convert ‘const boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const char (&)[9]>, 0l>, const boost::proto::exprns_::expr<boost::proto::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type>&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >&>, 0l> >, 2l>&>, 1l>&>, 2l>’ to ‘int’ in assignment
    /data/Projets/C++/metatool/src/Controller.cpp:52:   instantiated from here
    /data/Projets/C++/metatool/src/parser/parser.hpp:77: erreur: cannot convert ‘const boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const char (&)[9]>, 0l>, const boost::proto::exprns_::expr<boost::proto::tag::dereference, boost::proto::argsns_::list1<const boost::proto::exprns_::expr<boost::proto::tag::subscript, boost::proto::argsns_::list2<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type>&, boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const boost::phoenix::actor<boost::phoenix::composite<boost::phoenix::detail::function_eval<1>, boost::fusion::vector<boost::phoenix::value<boost::phoenix::stl::push_back>, boost::phoenix::value<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_> > >&>, 0l> >, 2l>&>, 1l>&>, 2l>’ to ‘int’ in assignment
    /data/Projets/C++/metatool/src/Controller.cpp:52:   instantiated from here
    /data/Projets/C++/metatool/src/parser/parser.hpp:78: erreur: cannot convert ‘const boost::proto::exprns_::expr<boost::proto::tag::shift_right, boost::proto::argsns_::list2<boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<const char (&)[6]>, 0l>, const boost::proto::exprns_::expr<boost::proto::tag::dereference, boost::proto::argsns_::list1<boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::unused_type, boost::fusion::unused_type>&>, 1l>&>, 2l>’ to ‘int’ in assignment
    gmake[2]: *** [build/Debug/GNU-Linux-x86/_ext/data/Projets/C++/metatool/src/Controller.o] Erreur 1
    gmake[2]: quittant le répertoire « /data/Projets/C++/metatool »
    gmake[1]: *** [.build-conf] Erreur 2
    gmake[1]: quittant le répertoire « /data/Projets/C++/metatool »
    gmake: *** [.build-impl] Erreur 2
    BUILD FAILED (exit value 2, total time: 9s)
    Je vous remercie par avance de votre précieuse aide

  2. #2
    Membre très actif

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 349
    Par défaut
    j'ai corrigé quelques erreur d'inatenttion :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    #ifndef _PARSER_HPP
    #define	_PARSER_HPP
     
    #include <vector>
    #include <map>
    #include <string>
    #include <boost/spirit/include/qi.hpp>
    #include <boost/spirit/include/qi_lit.hpp>
    #include <boost/spirit/include/qi_lexeme.hpp>
    #include <boost/spirit/include/qi_grammar.hpp>
    #include <boost/spirit/include/support_ascii.hpp>
    #include <boost/spirit/include/phoenix_core.hpp>
    #include <boost/spirit/include/phoenix_operator.hpp>
    #include <boost/spirit/include/phoenix_object.hpp>
    #include <boost/fusion/include/adapt_struct.hpp>
    #include <boost/spirit/include/phoenix_stl.hpp>
    #include <boost/fusion/include/io.hpp>
    #include <boost/fusion/adapted/struct/adapt_struct.hpp>
    #include <boost/fusion/include/adapt_struct.hpp>
     
    namespace parser {
     
        using ::boost::spirit::qi::grammar;
        using ::boost::spirit::ascii::space_type;
        using ::std::vector;
        using ::std::map;
        using ::std::string;
        /**
         * data structure who store data parsed
         */
        struct Data {
            vector<string>                  enzrev;
            vector<string>                  enzirrev;
            vector<string>                  metext;
            vector<string>                  metint;
            //map< string,vector<string> >    cat;
        };
     
        BOOST_FUSION_ADAPT_STRUCT(  Data,
                                    (vector<string> , enzrev)
                                    (vector<string> , enzirrev)
                                    (vector<string> , metext)
                                    (vector<string> , metint)
                                )
        /**
         *
         */
        template <typename Iterator>
        struct parser : public grammar<Iterator,Data(), space_type> {
            // declare rules
            using ::boost::spirit::qi::rule;
            rule<Iterator,string>               content;
            rule<Iterator,vector()>             enzrevContent;
            rule<Iterator,vector()>             enzirrevContent;
            rule<Iterator,vector()>             metextContent;
            rule<Iterator,vector()>             metintContent;
            rule<Iterator,map()>                catContent;
            rule<Iterator,Data(),space_type>    start;
            /**
             *
             */
            parser() : parser::base_type(start) {
                using ::boost::spirit::lit;
                using ::boost::spirit::qi::lexeme;
                using ::boost::spirit::ascii::char_;
                using ::boost::phoenix::push_back;
                // construct rules
                content         %= lexeme[+(char_ - ('\n\n' | "^-")) >> ('\n\n' | "^-")];
                enzrevContent   = "^-ENZREV"    >> *content [push_back(content)];
                enzirrevContent = "^-ENZIRREV"  >> *content [push_back(content)];
                metextContent   = "^-METEXT"    >> *content [push_back(content)];
                metintContent   = "^-METINT"    >> *content [push_back(content)];
                catContent      = "^-CAT"       >> *content;
                start           %= enzrevContent >> enzirrevContent >> enzirrevContent >> metextContent >> metintContent >> metintContent >> catContent;
            }
     
        };
    }
    #endif	/* _PARSER_HPP */
    mais j'ai toujours un soucis à la compilayion:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    g++    -c -g -I/usr/include/glib-2.0 -I/usr/include/glibmm-2.4 -I/usr/lib64/glibmm-2.4/include -I/usr/lib64/glib-2.0/include -I/usr/include/glibmm-2.4/glibmm -I/usr/include/boost/spirit -MMD -MP -MF build/Debug/GNU-Linux-x86/_ext/data/Projets/C++/metatool/src/Controller.o.d -o build/Debug/GNU-Linux-x86/_ext/data/Projets/C++/metatool/src/Controller.o /data/Projets/C++/metatool/src/Controller.cpp
    Dans le fichier inclus à partir de /data/Projets/C++/metatool/src/Controller.hpp:36,
              à partir de /data/Projets/C++/metatool/src/Controller.cpp:30:
    /data/Projets/C++/metatool/src/parser/parser.hpp:74:50: attention : constante caractère multi-caractères
    /data/Projets/C++/metatool/src/parser/parser.hpp:74:70: attention : constante caractère multi-caractères
                     from /data/Projets/C++/metatool/src/Controller.cpp:30:
    In file included from /data/Projets/C++/metatool/src/Controller.hpp:36,
    /data/Projets/C++/metatool/src/parser/parser.hpp:45: erreur: ‘tag_of’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:45: erreur: explicit specialization of non-template ‘parser::boost::fusion::traits::tag_of’
    /data/Projets/C++/metatool/src/parser/parser.hpp:45: erreur: ‘struct_tag’ does not name a type
    /data/Projets/C++/metatool/src/parser/parser.hpp:45: erreur: ‘struct_size’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:45: erreur: ‘mpl’ has not been declared
    /data/Projets/C++/metatool/src/parser/parser.hpp:45: erreur: expected ‘{’ before ‘int_’
    /data/Projets/C++/metatool/src/parser/parser.hpp:45: erreur: expected initializer before ‘<’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:50: erreur: ‘struct_member’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:50: erreur: explicit specialization of non-template ‘parser::boost::fusion::extension::struct_member’
    /data/Projets/C++/metatool/src/parser/parser.hpp:50: erreur: ‘struct_member’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:50: erreur: ‘parser::boost::fusion::extension::struct_member’ is not a template type
    /data/Projets/C++/metatool/src/parser/parser.hpp:50: erreur: ‘struct_member’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:50: erreur: ‘parser::boost::fusion::extension::struct_member’ is not a template type
    /data/Projets/C++/metatool/src/parser/parser.hpp:50: erreur: ‘struct_member’ is not a template
    /data/Projets/C++/metatool/src/parser/parser.hpp:50: erreur: ‘parser::boost::fusion::extension::struct_member’ is not a template type
    /data/Projets/C++/metatool/src/parser/parser.hpp:57: erreur: l'utilisation de déclaration pour un non membre au niveau de la portée de la classe
    /data/Projets/C++/metatool/src/parser/parser.hpp:58: erreur: ISO C++ forbids declaration of ‘rule’ with no type
    /data/Projets/C++/metatool/src/parser/parser.hpp:58: erreur: expected ‘;’ before ‘<’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:59: erreur: ISO C++ forbids declaration of ‘rule’ with no type
    /data/Projets/C++/metatool/src/parser/parser.hpp:59: erreur: expected ‘;’ before ‘<’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:60: erreur: ISO C++ forbids declaration of ‘rule’ with no type
    /data/Projets/C++/metatool/src/parser/parser.hpp:60: erreur: expected ‘;’ before ‘<’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:61: erreur: ISO C++ forbids declaration of ‘rule’ with no type
    /data/Projets/C++/metatool/src/parser/parser.hpp:61: erreur: expected ‘;’ before ‘<’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:62: erreur: ISO C++ forbids declaration of ‘rule’ with no type
    /data/Projets/C++/metatool/src/parser/parser.hpp:62: erreur: expected ‘;’ before ‘<’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:63: erreur: ISO C++ forbids declaration of ‘rule’ with no type
    /data/Projets/C++/metatool/src/parser/parser.hpp:63: erreur: expected ‘;’ before ‘<’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp:64: erreur: ISO C++ forbids declaration of ‘rule’ with no type
    /data/Projets/C++/metatool/src/parser/parser.hpp:64: erreur: expected ‘;’ before ‘<’ token
    /data/Projets/C++/metatool/src/parser/parser.hpp: In constructor ‘parser::parser<Iterator>::parser()’:
    /data/Projets/C++/metatool/src/parser/parser.hpp:68: erreur: ‘start’ was not declared in this scope
    /data/Projets/C++/metatool/src/parser/parser.hpp:74: erreur: ‘content’ was not declared in this scope
    /data/Projets/C++/metatool/src/parser/parser.hpp:74: erreur: invalid operands of types ‘intandconst char [3]’ to binary ‘operator|’
    /data/Projets/C++/metatool/src/parser/parser.hpp:74: erreur: invalid operands of types ‘intandconst char [3]’ to binary ‘operator|’
    /data/Projets/C++/metatool/src/parser/parser.hpp:75: erreur: ‘enzrevContent’ was not declared in this scope
    /data/Projets/C++/metatool/src/parser/parser.hpp:76: erreur: ‘enzirrevContent’ was not declared in this scope
    /data/Projets/C++/metatool/src/parser/parser.hpp:77: erreur: ‘metextContent’ was not declared in this scope
    /data/Projets/C++/metatool/src/parser/parser.hpp:78: erreur: ‘metintContent’ was not declared in this scope
    /data/Projets/C++/metatool/src/parser/parser.hpp:79: erreur: ‘catContent’ was not declared in this scope
                     from /usr/include/boost/spirit/home/lex/tokenize_and_parse.hpp:15,
                     from /usr/include/boost/spirit/home/lex.hpp:15,
                     from /usr/include/boost/spirit/home/lex/lexer_lexertl.hpp:15,
                     from /usr/include/boost/spirit/include/lex_lexertl.hpp:16,
                     from /data/Projets/C++/metatool/src/Controller.hpp:35,
                     from /data/Projets/C++/metatool/src/Controller.cpp:30:
    /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp: In member function ‘bool boost::spirit::qi::rule<Iterator, T1, T2, T3>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Context = const boost::fusion::unused_type, Skipper = boost::fusion::unused_type, Attribute = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, T1 = parser::Data(), T2 = boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l>, T3 = boost::fusion::unused_type]’:
    In file included from /usr/include/boost/spirit/home/qi/nonterminal/grammar.hpp:18,
    /usr/include/boost/spirit/home/qi/reference.hpp:41:   instantiated from ‘bool boost::spirit::qi::reference<Subject>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Context = const boost::fusion::unused_type, Skipper = boost::fusion::unused_type, Attribute = boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, A0&, A1&) [with Iterator = Controller::start()::iterator_type, Expr = Controller::start()::FileParser, A0 = const boost::spirit::ascii::space_type, A1 = parser::Data]::vector_type, Subject = const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, parser::Data(), boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l>, boost::fusion::unused_type>]’
    /usr/include/boost/spirit/home/qi/parse_attr.hpp:59:   instantiated from ‘bool boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, A0&, A1&) [with Iterator = Controller::start()::iterator_type, Expr = Controller::start()::FileParser, A0 = const boost::spirit::ascii::space_type, A1 = parser::Data]’
    /data/Projets/C++/metatool/src/Controller.cpp:61:   instantiated from here
    /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:236: erreur: no match for call to ‘(const boost::function<bool(__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, const __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, boost::spirit::context<boost::fusion::cons<parser::Data&, boost::fusion::nil>, boost::fusion::vector0<void> >&, const boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >&)>) (__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, const __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, boost::spirit::context<boost::fusion::cons<parser::Data&, boost::fusion::nil>, boost::fusion::vector0<void> >&, const boost::fusion::unused_type&)’
    /usr/include/boost/function/function_template.hpp:1006: note: candidats sont: R boost::function4<R, T1, T2, T3, T4>::operator()(T0, T1, T2, T3) const [with R = bool, T0 = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, T1 = const __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >&, T2 = boost::spirit::context<boost::fusion::cons<parser::Data&, boost::fusion::nil>, boost::fusion::vector0<void> >&, T3 = const boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >&]
                     from /usr/include/boost/spirit/home/lex/qi.hpp:13,
                     from /usr/include/boost/spirit/home/lex.hpp:14,
                     from /usr/include/boost/spirit/home/lex/lexer_lexertl.hpp:15,
                     from /usr/include/boost/spirit/include/lex_lexertl.hpp:16,
                     from /data/Projets/C++/metatool/src/Controller.hpp:35,
                     from /data/Projets/C++/metatool/src/Controller.cpp:30:
    /usr/include/boost/spirit/home/support/attributes.hpp: In static member function ‘static Transformed boost::spirit::traits::transform_attribute<Exposed, Transformed, Enable>::pre(Exposed&) [with Exposed = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Transformed = parser::Data, Enable = void]’:
    In file included from /usr/include/boost/spirit/home/lex/qi/state_switcher.hpp:14,
    /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:225:   instantiated from ‘bool boost::spirit::qi::rule<Iterator, T1, T2, T3>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Context = const boost::fusion::unused_type, Skipper = boost::fusion::unused_type, Attribute = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, T1 = parser::Data(), T2 = boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l>, T3 = boost::fusion::unused_type]’
    /usr/include/boost/spirit/home/qi/reference.hpp:41:   instantiated from ‘bool boost::spirit::qi::reference<Subject>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Context = const boost::fusion::unused_type, Skipper = boost::fusion::unused_type, Attribute = boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, A0&, A1&) [with Iterator = Controller::start()::iterator_type, Expr = Controller::start()::FileParser, A0 = const boost::spirit::ascii::space_type, A1 = parser::Data]::vector_type, Subject = const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, parser::Data(), boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l>, boost::fusion::unused_type>]’
    /usr/include/boost/spirit/home/qi/parse_attr.hpp:59:   instantiated from ‘bool boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, A0&, A1&) [with Iterator = Controller::start()::iterator_type, Expr = Controller::start()::FileParser, A0 = const boost::spirit::ascii::space_type, A1 = parser::Data]’
    /data/Projets/C++/metatool/src/Controller.cpp:61:   instantiated from here
    /usr/include/boost/spirit/home/support/attributes.hpp:409: erreur: no matching function for call to ‘parser::Data::Data(boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>&)’
    /data/Projets/C++/metatool/src/parser/parser.hpp:37: note: candidats sont: parser::Data::Data()
    /data/Projets/C++/metatool/src/parser/parser.hpp:37: note:                 parser::Data::Data(const parser::Data&)
                     from /usr/include/boost/fusion/include/intrinsic.hpp:10,
                     from /usr/include/boost/proto/fusion.hpp:24,
                     from /usr/include/boost/proto/core.hpp:22,
                     from /usr/include/boost/proto/proto.hpp:13,
                     from /usr/include/boost/spirit/home/support/terminal.hpp:14,
                     from /usr/include/boost/spirit/home/support/common_terminals.hpp:15,
                     from /usr/include/boost/spirit/home/lex/lexer/terminals.hpp:13,
                     from /usr/include/boost/spirit/home/lex/lexer.hpp:13,
                     from /usr/include/boost/spirit/home/lex.hpp:13,
                     from /usr/include/boost/spirit/home/lex/lexer_lexertl.hpp:15,
                     from /usr/include/boost/spirit/include/lex_lexertl.hpp:16,
                     from /data/Projets/C++/metatool/src/Controller.hpp:35,
                     from /data/Projets/C++/metatool/src/Controller.cpp:30:
    /usr/include/boost/fusion/sequence/intrinsic/begin.hpp: At global scope:
    /usr/include/boost/fusion/sequence/intrinsic/begin.hpp: In instantiation of ‘boost::fusion::result_of::begin<const parser::Data>’:
    In file included from /usr/include/boost/fusion/sequence/intrinsic.hpp:12,
    /usr/include/boost/fusion/container/vector/detail/vector_n.hpp:65:   instantiated from ‘static boost::fusion::vector_data2<Derived, T0, T1> boost::fusion::vector_data2<Derived, T0, T1>::init_from_sequence(const Sequence&) [with Sequence = parser::Data, Derived = boost::fusion::vector2<const boost::spirit::ascii::space_type&, parser::Data&>, T0 = const boost::spirit::ascii::space_type&, T1 = parser::Data&]’
    /usr/include/boost/fusion/container/vector/detail/vector_n.hpp:111:   instantiated from ‘boost::fusion::vector2<T0, T1>::vector2(const Sequence&) [with Sequence = parser::Data, T0 = const boost::spirit::ascii::space_type&, T1 = parser::Data&]’
    /usr/include/boost/fusion/container/vector/vector.hpp:62:   instantiated from ‘boost::fusion::vector<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::vector(const Sequence&) [with Sequence = parser::Data, T0 = const boost::spirit::ascii::space_type&, T1 = parser::Data&, T2 = boost::fusion::void_, T3 = boost::fusion::void_, T4 = boost::fusion::void_, T5 = boost::fusion::void_, T6 = boost::fusion::void_, T7 = boost::fusion::void_, T8 = boost::fusion::void_, T9 = boost::fusion::void_]’
    /usr/include/boost/spirit/home/qi/detail/assign_to.hpp:72:   instantiated from ‘static void boost::spirit::traits::assign_to_attribute_from_value<Attribute, T, Enable>::call(const T&, Attribute&) [with Attribute = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, T = parser::Data, Enable = void]’
    /usr/include/boost/spirit/home/qi/detail/assign_to.hpp:99:   instantiated from ‘void boost::spirit::traits::assign_to(const T&, Attribute&) [with T = parser::Data, Attribute = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>]’
    /usr/include/boost/spirit/home/support/attributes.hpp:419:   instantiated from ‘static void boost::spirit::traits::transform_attribute<Exposed, Transformed, Enable>::post(Exposed&, const Transformed&, mpl_::true_) [with Exposed = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Transformed = parser::Data, Enable = void]’
    /usr/include/boost/spirit/home/support/attributes.hpp:424:   instantiated from ‘static void boost::spirit::traits::transform_attribute<Exposed, Transformed, Enable>::post(Exposed&, const Transformed&) [with Exposed = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Transformed = parser::Data, Enable = void]’
    /usr/include/boost/spirit/home/support/attributes.hpp:525:   instantiated from ‘void boost::spirit::traits::post_transform(Exposed&, const Transformed&) [with Exposed = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Transformed = parser::Data]’
    /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:240:   instantiated from ‘bool boost::spirit::qi::rule<Iterator, T1, T2, T3>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Context = const boost::fusion::unused_type, Skipper = boost::fusion::unused_type, Attribute = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, T1 = parser::Data(), T2 = boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l>, T3 = boost::fusion::unused_type]’
    /usr/include/boost/spirit/home/qi/reference.hpp:41:   instantiated from ‘bool boost::spirit::qi::reference<Subject>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Context = const boost::fusion::unused_type, Skipper = boost::fusion::unused_type, Attribute = boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, A0&, A1&) [with Iterator = Controller::start()::iterator_type, Expr = Controller::start()::FileParser, A0 = const boost::spirit::ascii::space_type, A1 = parser::Data]::vector_type, Subject = const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, parser::Data(), boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l>, boost::fusion::unused_type>]’
    /usr/include/boost/spirit/home/qi/parse_attr.hpp:59:   instantiated from ‘bool boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, A0&, A1&) [with Iterator = Controller::start()::iterator_type, Expr = Controller::start()::FileParser, A0 = const boost::spirit::ascii::space_type, A1 = parser::Data]’
    /data/Projets/C++/metatool/src/Controller.cpp:61:   instantiated from here
    /usr/include/boost/fusion/sequence/intrinsic/begin.hpp:56: erreur: invalid use of incomplete type ‘struct boost::fusion::extension::begin_impl<boost::fusion::non_fusion_tag>::apply<const parser::Data>’
    /usr/include/boost/fusion/sequence/intrinsic/begin.hpp:27: erreur: declaration of ‘struct boost::fusion::extension::begin_impl<boost::fusion::non_fusion_tag>::apply<const parser::Data>’
                     from /usr/include/boost/fusion/container/vector/vector10.hpp:62,
                     from /usr/include/boost/fusion/algorithm/transformation/erase.hpp:12,
                     from /usr/include/boost/fusion/mpl/erase.hpp:12,
                     from /usr/include/boost/fusion/mpl.hpp:20,
                     from /usr/include/boost/fusion/view/detail/strictest_traversal.hpp:14,
                     from /usr/include/boost/fusion/view/transform_view/transform_view.hpp:20,
                     from /usr/include/boost/fusion/view/transform_view.hpp:10,
                     from /usr/include/boost/fusion/include/transform_view.hpp:10,
                     from /usr/include/boost/proto/fusion.hpp:28,
                     from /usr/include/boost/proto/core.hpp:22,
                     from /usr/include/boost/proto/proto.hpp:13,
                     from /usr/include/boost/spirit/home/support/terminal.hpp:14,
                     from /usr/include/boost/spirit/home/support/common_terminals.hpp:15,
                     from /usr/include/boost/spirit/home/lex/lexer/terminals.hpp:13,
                     from /usr/include/boost/spirit/home/lex/lexer.hpp:13,
                     from /usr/include/boost/spirit/home/lex.hpp:13,
                     from /usr/include/boost/spirit/home/lex/lexer_lexertl.hpp:15,
                     from /usr/include/boost/spirit/include/lex_lexertl.hpp:16,
                     from /data/Projets/C++/metatool/src/Controller.hpp:35,
                     from /data/Projets/C++/metatool/src/Controller.cpp:30:
    /usr/include/boost/fusion/container/vector/detail/vector_n.hpp: In static member function ‘static boost::fusion::vector_data2<Derived, T0, T1> boost::fusion::vector_data2<Derived, T0, T1>::init_from_sequence(const Sequence&) [with Sequence = parser::Data, Derived = boost::fusion::vector2<const boost::spirit::ascii::space_type&, parser::Data&>, T0 = const boost::spirit::ascii::space_type&, T1 = parser::Data&]’:
    In file included from /usr/include/boost/preprocessor/iteration/detail/iter/forward1.hpp:57,
    /usr/include/boost/fusion/container/vector/detail/vector_n.hpp:111:   instantiated from ‘boost::fusion::vector2<T0, T1>::vector2(const Sequence&) [with Sequence = parser::Data, T0 = const boost::spirit::ascii::space_type&, T1 = parser::Data&]’
    /usr/include/boost/fusion/container/vector/vector.hpp:62:   instantiated from ‘boost::fusion::vector<T0, T1, T2, T3, T4, T5, T6, T7, T8, T9>::vector(const Sequence&) [with Sequence = parser::Data, T0 = const boost::spirit::ascii::space_type&, T1 = parser::Data&, T2 = boost::fusion::void_, T3 = boost::fusion::void_, T4 = boost::fusion::void_, T5 = boost::fusion::void_, T6 = boost::fusion::void_, T7 = boost::fusion::void_, T8 = boost::fusion::void_, T9 = boost::fusion::void_]’
    /usr/include/boost/spirit/home/qi/detail/assign_to.hpp:72:   instantiated from ‘static void boost::spirit::traits::assign_to_attribute_from_value<Attribute, T, Enable>::call(const T&, Attribute&) [with Attribute = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, T = parser::Data, Enable = void]’
    /usr/include/boost/spirit/home/qi/detail/assign_to.hpp:99:   instantiated from ‘void boost::spirit::traits::assign_to(const T&, Attribute&) [with T = parser::Data, Attribute = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>]’
    /usr/include/boost/spirit/home/support/attributes.hpp:419:   instantiated from ‘static void boost::spirit::traits::transform_attribute<Exposed, Transformed, Enable>::post(Exposed&, const Transformed&, mpl_::true_) [with Exposed = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Transformed = parser::Data, Enable = void]’
    /usr/include/boost/spirit/home/support/attributes.hpp:424:   instantiated from ‘static void boost::spirit::traits::transform_attribute<Exposed, Transformed, Enable>::post(Exposed&, const Transformed&) [with Exposed = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Transformed = parser::Data, Enable = void]’
    /usr/include/boost/spirit/home/support/attributes.hpp:525:   instantiated from ‘void boost::spirit::traits::post_transform(Exposed&, const Transformed&) [with Exposed = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Transformed = parser::Data]’
    /usr/include/boost/spirit/home/qi/nonterminal/rule.hpp:240:   instantiated from ‘bool boost::spirit::qi::rule<Iterator, T1, T2, T3>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Context = const boost::fusion::unused_type, Skipper = boost::fusion::unused_type, Attribute = boost::fusion::vector<const boost::spirit::ascii::space_type&, parser::Data&, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>, Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, T1 = parser::Data(), T2 = boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l>, T3 = boost::fusion::unused_type]’
    /usr/include/boost/spirit/home/qi/reference.hpp:41:   instantiated from ‘bool boost::spirit::qi::reference<Subject>::parse(Iterator&, const Iterator&, Context&, const Skipper&, Attribute&) const [with Iterator = __gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, Context = const boost::fusion::unused_type, Skipper = boost::fusion::unused_type, Attribute = boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, A0&, A1&) [with Iterator = Controller::start()::iterator_type, Expr = Controller::start()::FileParser, A0 = const boost::spirit::ascii::space_type, A1 = parser::Data]::vector_type, Subject = const boost::spirit::qi::rule<__gnu_cxx::__normal_iterator<const char*, std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, parser::Data(), boost::proto::exprns_::expr<boost::proto::tag::terminal, boost::proto::argsns_::term<boost::spirit::tag::char_code<boost::spirit::tag::space, boost::spirit::char_encoding::ascii> >, 0l>, boost::fusion::unused_type>]’
    /usr/include/boost/spirit/home/qi/parse_attr.hpp:59:   instantiated from ‘bool boost::spirit::qi::parse(Iterator&, Iterator, const Expr&, A0&, A1&) [with Iterator = Controller::start()::iterator_type, Expr = Controller::start()::FileParser, A0 = const boost::spirit::ascii::space_type, A1 = parser::Data]’
    /data/Projets/C++/metatool/src/Controller.cpp:61:   instantiated from here
    /usr/include/boost/fusion/container/vector/detail/vector_n.hpp:65: erreur: no type named ‘type’ in ‘struct boost::fusion::result_of::begin<const parser::Data>’
    /usr/include/boost/fusion/container/vector/detail/vector_n.hpp:67: erreur: no type named ‘type’ in ‘struct boost::fusion::result_of::begin<const parser::Data>’
    gmake[2]: *** [build/Debug/GNU-Linux-x86/_ext/data/Projets/C++/metatool/src/Controller.o] Erreur 1
    gmake[2]: quittant le répertoire « /data/Projets/C++/metatool »
    gmake[1]: *** [.build-conf] Erreur 2
    gmake[1]: quittant le répertoire « /data/Projets/C++/metatool »
    gmake: *** [.build-impl] Erreur 2
    BUILD FAILED (exit value 2, total time: 9s)
    Je vous remrcie pour votre aide.
    Si vous avez une façon différente je suis preneur

    note: j'ai essayé avec spirit::lex aussi mais là ça compile mais lors du parsing ça boucle infiniment (enfin c'est une autre histoire)

  3. #3
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,

    J'ai relevé deux erreurs mineures :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    using boost::spirit::qi::rule;
    
    template <typename Iterator>
    struct parser : public grammar<Iterator,Data(), space_type> 
    {
    	
    
        // declare rules
        rule<Iterator,string()>               content;
    Par contre il y a une erreur plus sérieuse dans le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        rule<Iterator,vector()>             enzrevContent;
        rule<Iterator,vector()>             enzirrevContent;
        rule<Iterator,vector()>             metextContent;
        rule<Iterator,vector()>             metintContent;
        rule<Iterator,map()>                catContent;
        rule<Iterator,Data(),space_type>    start;
    "vector" et "map" ne sont pas des types valides car ce sont des templates. Des types valides seraient "vector<UnType>" ainsi que "map<TypeClé, TypeData>."

  4. #4
    Membre très actif

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 349
    Par défaut
    bonjour,
    Un grand merci pour ta réponse , ça fait toujours très plaisir d'avoir un oeil exterieur quand on se prend la tête
    j'ai appliqué les correctif, ce qui donne:
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
     
    #ifndef _PARSER_HPP
    #define	_PARSER_HPP
     
    #include <vector>
    #include <map>
    #include <string>
    #include <boost/spirit/include/qi.hpp>
    #include <boost/spirit/include/qi_lit.hpp>
    #include <boost/spirit/include/qi_lexeme.hpp>
    #include <boost/spirit/include/qi_grammar.hpp>
    #include <boost/spirit/include/support_ascii.hpp>
    #include <boost/spirit/include/phoenix_core.hpp>
    #include <boost/spirit/include/phoenix_operator.hpp>
    #include <boost/spirit/include/phoenix_object.hpp>
    #include <boost/fusion/include/adapt_struct.hpp>
    #include <boost/spirit/include/phoenix_stl.hpp>
    #include <boost/fusion/include/io.hpp>
    #include <boost/fusion/adapted/struct/adapt_struct.hpp>
    #include <boost/fusion/include/adapt_struct.hpp>
     
    using boost::spirit::qi::grammar;
    using boost::spirit::ascii::space_type;
    using boost::spirit::qi::rule;
    using std::vector;
    using std::map;
    using std::string;
    /**
     * data structure who store data parsed
     */
    struct Data {
        vector<string>                  enzrev;
        vector<string>                  enzirrev;
        vector<string>                  metext;
        vector<string>                  metint;
        //map< string,vector<string> >    cat;
    };
     
    BOOST_FUSION_ADAPT_STRUCT(  Data,
                                (vector<string> , enzrev)
                                (vector<string> , enzirrev)
                                (vector<string> , metext)
                                (vector<string> , metint)
                            )
    /**
     *
     */
    template <typename Iterator>
    struct parser : public grammar<Iterator,Data(), space_type> {
        // declare rules
        rule<Iterator,string()>             content;
        rule<Iterator,vector<string>()>     enzrevContent;
        rule<Iterator,vector<string>()>     enzirrevContent;
        rule<Iterator,vector<string>()>     metextContent;
        rule<Iterator,vector<string>()>     metintContent;
        //rule<Iterator,map()>                catContent;
        rule<Iterator,Data(),space_type>    start;
        /**
         *
         */
        parser() : parser::base_type(start) {
            using boost::spirit::lit;
            using boost::spirit::qi::lexeme;
            using boost::spirit::ascii::char_;
            using boost::phoenix::push_back;
     
            // construct rules
            content         %= lexeme[+(char_ - ('\n\n' | "^-")) >> ('\n\n' | "^-")];
            enzrevContent   = "^-ENZREV"    >> *content [push_back(content)];
            enzirrevContent = "^-ENZIRREV"  >> *content [push_back(content)];
            metextContent   = "^-METEXT"    >> *content [push_back(content)];
            metintContent   = "^-METINT"    >> *content [push_back(content)];
            //catContent      = "^-CAT"       >> *content;
            start           %= enzrevContent >> enzirrevContent >> enzirrevContent >> metextContent >> metintContent >> metintContent /*>> catContent*/;
        }
     
    };
    #endif	/* _PARSER_HPP */
    et pour l'erreur de compilation
    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
    g++    -c -g -I/usr/include/glib-2.0 -I/usr/include/glibmm-2.4 -I/usr/lib64/glibmm-2.4/include -I/usr/lib64/glib-2.0/include -I/usr/include/glibmm-2.4/glibmm -I/usr/include/boost/spirit -MMD -MP -MF build/Debug/GNU-Linux-x86/_extController.o.d -o build/Debug/GNU-Linux-x86/_extController.o Controller.cpp
    Dans le fichier inclus à partir de Controller.hpp:36,
              à partir de Controller.cpp:30:
    parser/parser.hpp:73:46: attention : constante caractère multi-caractères
    parser/parser.hpp:73:66: attention : constante caractère multi-caractères
                     from Controller.cpp:30:
    parser/parser.hpp: In static member function ‘static boost::fusion::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>& boost::fusion::extension::struct_member<Data, 0>::call(Data&)’:
    In file included from Controller.hpp:36,
    parser/parser.hpp:49: erreur: invalid initialization of reference of type ‘boost::fusion::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>&’ from expression of type ‘std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >’
    parser/parser.hpp: In static member function ‘static boost::fusion::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>& boost::fusion::extension::struct_member<Data, 1>::call(Data&)’:
    parser/parser.hpp:49: erreur: invalid initialization of reference of type ‘boost::fusion::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>&’ from expression of type ‘std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >’
    parser/parser.hpp: In static member function ‘static boost::fusion::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>& boost::fusion::extension::struct_member<Data, 2>::call(Data&)’:
    parser/parser.hpp:49: erreur: invalid initialization of reference of type ‘boost::fusion::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>&’ from expression of type ‘std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >’
    parser/parser.hpp: In static member function ‘static boost::fusion::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>& boost::fusion::extension::struct_member<Data, 3>::call(Data&)’:
    parser/parser.hpp:49: erreur: invalid initialization of reference of type ‘boost::fusion::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_, boost::fusion::void_>&’ from expression of type ‘std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > >’
    parser/parser.hpp: In constructor ‘parser<Iterator>::parser()’:
    parser/parser.hpp:73: erreur: invalid operands of types ‘intandconst char [3]’ to binary ‘operator|’
    parser/parser.hpp:73: erreur: invalid operands of types ‘intandconst char [3]’ to binary ‘operator|’’
    Note: je met à diposition les souces pour faire des tests: http://dl.free.fr/rWYpYbr5Q

  5. #5
    zul
    zul est déconnecté
    Membre chevronné Avatar de zul
    Profil pro
    Inscrit en
    Juin 2002
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 498
    Par défaut
    Je n'arrive pas à récupérer les sources, mais plusieurs choses semblent suspectes dans ce ce que tu as collé.

    phoenix::push_back prend deux arguments, le vecteur dans lequel tu veux pushé puis l'élément que tu as à insérer. Je pense que tes règles devraient donc ressembler à quelquechose de la sorte

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            enzrevContent   = "^-ENZREV"    >> *(content [push_back(_val, _1)])
    _val va être remplacé par le résultat de la règle (le vector<string> ici), et _1 'est un placeholder qui va être remplacé par "content" dans ce cas.

    Tu devrais jeter un coup d'oeil à l'exemple mini_xml1.cpp (voir http://www.boost.org/doc/libs/1_42_0...l___asts_.html) qui montre entre autre comment on utilise push_back et les différents placeholders (documentés quelques pages avant dans la doc).

  6. #6
    Membre très actif

    Profil pro
    Inscrit en
    Mars 2009
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Mars 2009
    Messages : 349
    Par défaut
    je te remerci zul pour ton intervention car je suis vraiment bloqué, j'ai appliqué ton conseil mais toujours pareil/
    ici le lien direct pour télécharger le fichier: http://dl.free.fr/rRU5ldBvK/metatool.tar.gz

    je vous remercie en tout cas pour votre aide

Discussions similaires

  1. [JDOM] Simple Parsing un fichier avec JDOM2
    Par tmar houcem dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 16/05/2014, 10h41
  2. [JDOM] Problème avec le parsing du fichier XML
    Par nounouuuuu201186 dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 10/02/2012, 14h08
  3. [SAX] Parse d'un fichier avec des '<'
    Par bamby44 dans le forum Format d'échange (XML, JSON...)
    Réponses: 10
    Dernier message: 28/11/2010, 12h21
  4. [XSL] Problème de parse d'un fichier avec Namspaces
    Par mpereg dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 20/02/2007, 19h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo