1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465 |
- /*=============================================================================
- Copyright (c) 2001-2011 Joel de Guzman
- Distributed under the Boost Software License, Version 1.0. (See accompanying
- file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
- =============================================================================*/
- #if defined(_MSC_VER)
- # pragma warning(disable: 4180) // qualifier applied to function type
- // has no meaning; ignored
- #endif
- // This tests the new behavior allowing attribute compatibility
- // to semantic actions
- #define BOOST_SPIRIT_ACTIONS_ALLOW_ATTR_COMPAT
- #include <boost/detail/lightweight_test.hpp>
- #include <boost/detail/workaround.hpp>
- #include <boost/spirit/include/qi.hpp>
- #include <boost/spirit/include/phoenix_bind.hpp>
- #include <string>
- #include "test.hpp"
- void f(std::string const& s)
- {
- std::cout << "parsing got: " << s << std::endl;
- }
- std::string s;
- void b(char c)
- {
- s += c;
- }
- int main()
- {
- namespace qi = boost::spirit::qi;
- namespace phoenix = boost::phoenix;
- using spirit_test::test_attr;
- using spirit_test::test;
- {
- qi::rule<char const*, std::string()> r;
- r %= (+qi::char_)[phoenix::bind(&f, qi::_1)];
- std::string attr;
- BOOST_TEST(test_attr("abcdef", r, attr));
- BOOST_TEST(attr == "abcdef");
- }
- { // chaining
- using namespace boost::spirit::ascii;
- s = "";
- BOOST_TEST(test("a", char_[b][b]));
- BOOST_TEST(s == "aa");
- }
- return boost::report_errors();
- }
|