Parser "Boost Spirit" mit geerbten Attributen - einfaches Beispiel wird nicht kompiliert

Ich versuche, einen Parser für eine C-ähnliche Sprache mit boost :: spirit zu schreiben, der geerbte Attribute verwendet, um Informationen zum Variablenbereich zu übertragen. Beispielsweise würde "Namespace a {var b}" "a" als Attribut an den Parser für "var b" übergeben.

Ich habe Probleme, einen grundlegenden Parser zu bekommen, der geerbte Attribute verwendet, um diesen Code zu kompilieren:

#ifndef CPARSER_DEF_HPP
#define CPARSER_DEF_HPP

#include <string>

#include <boost/spirit/include/qi.hpp>

namespace encoding = boost::spirit::ascii;
using boost::spirit::unused_type;
using boost::spirit::qi::rule;

template <typename Iterator>
struct cparser : boost::spirit::qi::grammar<
                    Iterator,
                    std::string(std::string),
                    encoding::space_type
                    >
{
    rule<Iterator, std::string(std::string), encoding::space_type> start;
    rule<Iterator, std::string(std::string), encoding::space_type> sym_list;

    cparser() :
        cparser::base_type(start)
    {
        sym_list         = encoding::string(boost::spirit::qi::_r1);
        start            = sym_list(boost::spirit::qi::_r1);
    }

};

#endif

Dieser Parser wird in main () mit instanziiertcparser<std::string::const_iterator> parser.

Ich glaube, dieser Parser sollte eine std :: string als geerbtes Attribut akzeptieren, eine mit dieser Zeichenfolge übereinstimmende Eingabe analysieren und die Zeichenfolge dann als synthetisiertes Attribut zurückgeben. Dieser Beispielcode wird nicht kompiliert, und ich kann nicht herausfinden, warum. Ich habe mit GCC und Clang mit C ++ 11 kompiliert. Die Ausgabe von beiden Compilern ist riesig (ca. 1000 Zeilen) und ich kann keinen Sinn daraus machen. Gibt es ein Problem bei der Verwendung vonboost::spirit::qi::_r1? Ein Problem mitstd::string(std::string) in den Regelerklärungen?

Vielen Dank im Voraus für Ihre Hilfe.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage