Boost Spirit qi: Strings parsen?



  • Aus der Dokumentation und den Beispielen habe ich einfach nicht erschließen können, wie man ganz normale Strings parsen kann. Früher ging das in Spirit über Funktionen, die 2 Iteratoren entgegennehmen, aber mit qi gibt es Unmengen von Compiler-Fehlern (VC++ 08). Das ist der typische Template-Kram, aus dem man eigentlich gar nichts erschließen kann. Es liegt aber an der Zeile, in der der einfache Parser erstellt wird:

    void result(std::string::iterator begin, std::string::iterator end)
    {
    	std::cout << std::string(begin, end) << std::endl;
    }
    
    bool r = phrase_parse(
    	first,                  //string::begin
    	last,                   //string::end
    	(+qi::char_)[&result],  //ohne [&result] geht es
    	ascii::space
    	);
    

    Anscheinend macht man das nicht so, also wie dann?

    EDIT 2: Das + ist schon richtig an der Stelle.



  • Das + in Zeile 9 sieht verdächtig aus. Und was für ein Typ ist denn qi::char_? Und was für Parameter nimmt die Funktion an?



  • Janjan schrieb:

    Das + in Zeile 9 sieht verdächtig aus. Und was für ein Typ ist denn qi::char_? Und was für Parameter nimmt die Funktion an?

    Wenn ich das alles wüsste... Ich brauche jemanden, der sich mit Spirit auskennt und die Frage beantworten kann.



  • Doku lesen und C++ lernen.



  • Nach langem Suchen habe ich tatsächlich etwas gefunden, das ungefähr meinen Vortellungen entspricht: qi::raw .

    Das sieht dann so aus:

    void result(const boost::iterator_range<std::string::iterator> &range)
    	{
    		std::cout << std::string(range.begin(), range.end()) << std::endl;
    	}
    

Anmelden zum Antworten