Boost::Spirit einfache Grammatik Beispiel

Werde ich durch die Boost-Spirit (und Boost-Fusion) tutorials (version 1.48.0). Ich habe das Spiel mit dem Spielzeug, Mitarbeiter Beispiel. Der link zur Quelle ist hier:

http://www.boost.org/doc/libs/1_48_0/libs/spirit/example/qi/employee.cpp

Hier ist der Beispiel-Grammatik:

employee_parser() : employee_parser::base_type(start)
    {
        using qi::int_;
        using qi::lit;
        using qi::double_;
        using qi::lexeme;
        using ascii::char_;

        quoted_string %= lexeme['"' >> +(char_ - '"') >> '"'];

        start %=
            lit("employee")
            >> '{'
            >>  int_ >> ','
            >>  quoted_string >> ','
            >>  quoted_string >> ','
            >>  double_
            >>  '}'
            ;
    }

    qi::rule<Iterator, std::string(), ascii::space_type> quoted_string;
    qi::rule<Iterator, employee(), ascii::space_type> start;

Und meine Modifikationen entfernen, die Behandlung der Anführungszeichen und genau analysiert, alle Zeichen zwischen den Trennzeichen und ordnet, dass die Struktur der parser zugeordnet ist.

        //quoted_string %= lexeme['"' >> +(char_ - '"') >> '"'];
        start %=
            lit("employee")
            >> '{'
            >>  int_ >> ','
            >>  +(char_) >> ','
            >>  +(char_) >> ','
            >>  double_
            >>  '}'
            ;

Meine Vermutung ist, dass char_ umfasst alle Zeichen bis zu einem Komma erreicht ist. Jedoch, kompilieren und ausführen mit dem folgenden string gibt einen Fehler zu analysieren.

./employee
employee{10,my,name,20.0}
-------------------------
Parsing failed
-------------------------

Bin ich auch versucht zu schreiben, eine ähnliche parser automatisch eine Umwandlung in die entsprechenden Typen der meine struct-Typ. Ich bin sicher, ich bin fehlt etwas grundlegend falsch, so weit, wie die Definition der richtigen Grammatik für ein input-string wie oben, so jede Hilfe wird sehr geschätzt!

Dank!

InformationsquelleAutor Paul Rigor | 2012-02-07
Schreibe einen Kommentar