
Hi, I used the classic spirit in the past. Now I want to migrate to Spirit 2.4 but I don't get the things together.Reading the different docus in the web did not help. What I want to do at first is to parse a simple string into a QString: My pseudo code looks like: QString t; qi::rule<string::iterator, QString()> r1 = (+qi::char_)(qi::_val = qi::_1); qi::rule<string::iterator , void()> r = r1[ref(t) = _1]; std::string temp("Hallo"); phrase_parse(temp.begin(), temp.end(), r, qi::space); But the compiler does no like this. Can anybody help me? Hella Aglaia Mobile Vision GmbH Steffen Roeber Firmware & Tools Treskowstr. 14, D-13089 Berlin Amtsgericht Berlin-Charlottenburg HRB 66976 B Geschäftsführer: Kay Talmi Fon: +49 30 200 04 29? 412 Fax: +49 30 200 04 29? 109 Mail: Steffen.Roeber@hella.com URL: www.aglaia-gmbh.de URL: www.mobilevision.de Dieses Dokument ist vertraulich zu behandeln. Die Weitergabe sowie Vervielfältigung, Verwertung und Mitteilung seines Inhalts ist nur mit unserer ausdrücklichen Genehmigung gestattet. Alle Rechte vorbehalten, insbesondere für den Fall der Schutzrechtsanmeldung. This document has to be treated confidentially. Its contents are not to be passed on, duplicated, exploited or disclosed without our express permission. All rights reserved, especially the right to apply for protective rights.

Steffen.Roeber@hella.com wrote:
I used the classic spirit in the past. Now I want to migrate to Spirit 2.4 but I don't get the things together.
[snip]
Can anybody help me?
As you will find at http://www.boost.org/community/groups.html#spirit, you want to send such requests to the Spirit-general ML. You'll also find a lot of help on the #boost IRC channel. More specific information is available at http://boost-spirit.com/home/feedback-and-support/. _____ Rob Stewart robert.stewart@sig.com Software Engineer, Core Software using std::disclaimer; Susquehanna International Group, LLP http://www.sig.com IMPORTANT: The information contained in this email and/or its attachments is confidential. If you are not the intended recipient, please notify the sender immediately by reply and immediately delete this message and all its attachments. Any review, use, reproduction, disclosure or dissemination of this message or any attachment by an unintended recipient is strictly prohibited. Neither this message nor any attachment is intended as or should be construed as an offer, solicitation or recommendation to buy or sell any security or other financial instrument. Neither the sender, his or her employer nor any of their respective affiliates makes any warranties as to the completeness or accuracy of any of the information contained herein or that this message or any of its attachments is free of viruses.

I used the classic spirit in the past. Now I want to migrate to Spirit 2.4 but I don't get the things together.Reading the different docus in the web did not help. What I want to do at first is to parse a simple string into a QString: My pseudo code looks like:
QString t; qi::rule<string::iterator, QString()> r1 = (+qi::char_)(qi::_val = qi::_1); qi::rule<string::iterator , void()> r = r1[ref(t) = _1]; std::string temp("Hallo"); phrase_parse(temp.begin(), temp.end(), r, qi::space);
But the compiler does no like this. Can anybody help me?
Please note, I don't know anything about QString. But in order to be usable in places where Spirit expects to see a container, any data type needs to conform to certain concepts. In particular the type is expected to expose a STL compatible insert() function, expose the embedded types 'value_type', 'iterator', 'size_type', and 'reference'. IOW, it needs to be a STL compatible container. If the required interfaces are not exposed, you'll need to specialize Spirit's customization points for your data type (see the docs and examples for that, for instance: http://www.boost.org/doc/libs/1_44_0/libs/spirit/doc/html/spirit/advanced/cu stomize/is_container.html). If you write such customization points for QString we would love to get them back and having it added to the Spirit repository. Regards Hartmut --------------- Meet me at BoostCon www.boostcon.com

I used the classic spirit in the past. Now I want to migrate to Spirit 2.4 but I don't get the things together.Reading the different docus in the web did not help. What I want to do at first is to parse a simple string into a QString: My pseudo code looks like:
QString t; qi::rule<string::iterator, QString()> r1 = (+qi::char_)(qi::_val = qi::_1); qi::rule<string::iterator , void()> r = r1[ref(t) = _1]; std::string temp("Hallo"); phrase_parse(temp.begin(), temp.end(), r, qi::space);
But the compiler does no like this. Can anybody help me?
Please note, I don't know anything about QString. But in order to be usable in places where Spirit expects to see a container, any data type needs to conform to certain concepts. In particular the type is expected to expose a STL compatible insert() function, expose the embedded types 'value_type', 'iterator', 'size_type', and 'reference'. IOW, it needs to be a STL compatible container.
If the required interfaces are not exposed, you'll need to specialize Spirit's customization points for your data type (see the docs and examples for that, for instance: http://www.boost.org/doc/libs/1_44_0/libs/spirit/doc/html/spirit/advanced/ customize/is_container.html).
If you write such customization points for QString we would love to get them back and having it added to the Spirit repository.
For the sake of it I added an example to Spirit ($BOOST_ROOT/libs/spirit/example/qi/custom_string.cpp) showing how to parse directly into a QString. HTH Regards Hartmut --------------- Meet me at BoostCon www.boostcon.com

Thanks your for your answer. It works great. But to complete the example, is it also possible to replace the std::string::iterator with QString.:Iterator. The following code: QString t2 = "Hallo"; QString s2; qi::rule<QString::iterator, QString()> rule = (+qi::char_); qi::rule<QString::iterator> rule2 = rule[phoenix::ref(s2) = qi::_1]; qi::phrase_parse(t2.begin(), t2.end(), rule2, qi::ascii::space); does not compile: 1>------ Build started: Project: Spirit 2, Configuration: Debug Win32 ------ 1>Compiling... 1>main.cpp 1>using native typeof 1>D:\Devel10\Base\Libraries\boost_1_44_0\boost/spirit/home/support/char_class.hpp(783) : error C2440: '<function-style-cast>' : cannot convert from 'const QChar' to 'int' 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 1> D:\Devel10\Base\Libraries\boost_1_44_0\boost/spirit/home/support/char_class.hpp(782) : while compiling class template member function 'bool boost::spirit::traits::ischar<CharParam,CharEncoding>::call(const CharParam &)' 1> with 1> [ 1> CharParam=QChar, 1> CharEncoding=boost::spirit::char_encoding::ascii 1> ] 1> D:\Devel10\Base\Libraries\boost_1_44_0\boost/spirit/home/qi/char/char_class.hpp(68) : see reference to class template instantiation 'boost::spirit::traits::ischar<CharParam,CharEncoding>' being compiled 1> with 1> [ 1> CharParam=QChar, 1> CharEncoding=boost::spirit::char_encoding::ascii 1> ] 1> D:\Devel10\Base\Libraries\boost_1_44_0\boost/spirit/home/qi/char/char_parser.hpp(68) : see reference to function template instantiation 'bool boost::spirit::qi::char_class<Tag>::test<QChar,Context>(CharParam,Context &) const' being compiled 1> with 1> [ 1> Tag=boost::spirit::tag::char_code<boost::spirit::tag::space,boost::spirit::char_encoding::ascii>, 1> Context=const boost::fusion::unused_type, 1> CharParam=QChar 1> ] 1> D:\Devel10\Base\Libraries\boost_1_44_0\boost/spirit/home/qi/skip_over.hpp(27) : see reference to function template instantiation 'bool boost::spirit::qi::char_parser<Derived,Char>::parse<Iterator,const boost::fusion::unused_type,boost::fusion::unused_type,const boost::fusion::unused_type>(Iterator &,const Iterator &,Context &,const Skipper &,Attribute &) const' being compiled 1> with 1> [ 1> Derived=boost::spirit::qi::char_class<boost::spirit::tag::char_code<boost::spirit::tag::space,boost::spirit::char_encoding::ascii>>, 1> Char=boost::spirit::char_encoding::ascii::char_type, 1> Iterator=QString::iterator, 1> Context=const boost::fusion::unused_type, 1> Skipper=boost::fusion::unused_type, 1> Attribute=const boost::fusion::unused_type 1> ] 1> D:\Devel10\Base\Libraries\boost_1_44_0\boost/spirit/home/qi/detail/parse.hpp(89) : see reference to function template instantiation 'void boost::spirit::qi::skip_over<Iterator,skipper_type>(Iterator &,const Iterator &,const T &)' being compiled 1> with 1> [ 1> Iterator=QString::iterator, 1> T=skipper_type 1> ] 1> D:\Devel10\Base\Libraries\boost_1_44_0\boost/spirit/home/qi/parse.hpp(100) : see reference to function template instantiation 'bool boost::spirit::qi::detail::phrase_parse_impl<Expr>::call<Iterator,Skipper>(Iterator &,Iterator,const Expr &,const Skipper &,boost::spirit::qi::skip_flag::enum_type)' being compiled 1> with 1> [ 1> Expr=boost::spirit::qi::rule<QString::iterator>, 1> Iterator=QString::iterator, 1> Skipper=boost::spirit::ascii::space_type 1> ] 1> D:\Devel10\Base\Libraries\boost_1_44_0\boost/spirit/home/qi/parse.hpp(113) : see reference to function template instantiation 'bool boost::spirit::qi::phrase_parse<QString::iterator,boost::spirit::qi::rule<Iterator>,boost::spirit::ascii::space_type>(Iterator &,Iterator,const Expr &,const Skipper &,boost::spirit::qi::skip_flag::enum_type)' being compiled 1> with 1> [ 1> Iterator=QString::iterator, 1> Expr=boost::spirit::qi::rule<QString::iterator>, 1> Skipper=boost::spirit::ascii::space_type 1> ] 1> .\main.cpp(48) : see reference to function template instantiation 'bool boost::spirit::qi::phrase_parse<QString::iterator,boost::spirit::qi::rule<Iterator>,boost::spirit::ascii::space_type>(const Iterator &,Iterator,const Expr &,const Skipper &,boost::spirit::qi::skip_flag::enum_type)' being compiled 1> with 1> [ 1> Iterator=QString::iterator, 1> Expr=boost::spirit::qi::rule<QString::iterator>, 1> Skipper=boost::spirit::ascii::space_type 1> ] 1>Build Time 0:07 1>Build log was saved at "file://c:\Dokumente und Einstellungen\str\Eigene Dateien\Visual Studio 2005\Projects\Spirit 2.0 Test\Spirit 2.0 Test\Debug\BuildLog.htm" 1>Spirit 2 - 1 error(s), 0 warning(s) ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ========== It seems that spirit tries to convert a QChar into a int. Is there any template I have to specialize? Hella Aglaia Mobile Vision GmbH Steffen Roeber Firmware & Tools Treskowstr. 14, D-13089 Berlin Amtsgericht Berlin-Charlottenburg HRB 66976 B Geschäftsführer: Kay Talmi Fon: +49 30 200 04 29? 412 Fax: +49 30 200 04 29? 109 Mail: Steffen.Roeber@hella.com URL: www.aglaia-gmbh.de URL: www.mobilevision.de Dieses Dokument ist vertraulich zu behandeln. Die Weitergabe sowie Vervielfältigung, Verwertung und Mitteilung seines Inhalts ist nur mit unserer ausdrücklichen Genehmigung gestattet. Alle Rechte vorbehalten, insbesondere für den Fall der Schutzrechtsanmeldung. This document has to be treated confidentially. Its contents are not to be passed on, duplicated, exploited or disclosed without our express permission. All rights reserved, especially the right to apply for protective rights. "Hartmut Kaiser"/ ( Gesendet von: boost-bounces@lists.boost.org 27.08.2010 20:03 Bitte antworten an boost@lists.boost.org An <boost@lists.boost.org> Kopie Thema Re: [boost] Attibutes and Qi
I used the classic spirit in the past. Now I want to migrate to Spirit 2.4 but I don't get the things together.Reading the different docus in the web did not help. What I want to do at first is to parse a simple string into a QString: My pseudo code looks like:
QString t; qi::rule<string::iterator, QString()> r1 = (+qi::char_)(qi::_val = qi::_1); qi::rule<string::iterator , void()> r = r1[ref(t) = _1]; std::string temp("Hallo"); phrase_parse(temp.begin(), temp.end(), r, qi::space);
But the compiler does no like this. Can anybody help me?
Please note, I don't know anything about QString. But in order to be usable in places where Spirit expects to see a container, any data type needs to conform to certain concepts. In particular the type is expected to expose a STL compatible insert() function, expose the embedded types 'value_type', 'iterator', 'size_type', and 'reference'. IOW, it needs to be a STL compatible container.
If the required interfaces are not exposed, you'll need to specialize Spirit's customization points for your data type (see the docs and examples for that, for instance:
http://www.boost.org/doc/libs/1_44_0/libs/spirit/doc/html/spirit/advanced/
customize/is_container.html).
If you write such customization points for QString we would love to get them back and having it added to the Spirit repository.
For the sake of it I added an example to Spirit ($BOOST_ROOT/libs/spirit/example/qi/custom_string.cpp) showing how to parse directly into a QString. HTH Regards Hartmut --------------- Meet me at BoostCon www.boostcon.com _______________________________________________ Unsubscribe & other changes: http://lists.boost.org/mailman/listinfo.cgi/boost
participants (3)
-
Hartmut Kaiser
-
Steffen.Roeber@hella.com
-
Stewart, Robert