// Copyright (c) 2010 Olaf Peter // Copyright (c) 2001-2010 Hartmut Kaiser // // 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) #include #include #include namespace client { namespace karma = boost::spirit::karma; template struct grammar : karma::grammar()> { grammar() : grammar::base_type(start) { using karma::double_; u = double_ << "U"; start = ( !double_ << "NA" ) | u; start.name("start"); u.name("u"); } karma::rule u; karma::rule()> start; }; } int main() { namespace karma = boost::spirit::karma; typedef std::back_insert_iterator sink_type; boost::optional d1, d2; d2 = 1.0; std::string generated1, generated2; client::grammar g; BOOST_TEST(karma::generate(sink_type(generated1), g, d1) && generated1 == "NA"); BOOST_TEST(karma::generate(sink_type(generated2), g, d2) && generated2 == "1.0U"); return boost::report_errors(); }