// Copyright (c) 2001-2008 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) #if !defined(BOOST_SPIRIT_KARMA_META_GRAMMAR_MARCH_26_2007_1230PM) #define BOOST_SPIRIT_KARMA_META_GRAMMAR_MARCH_26_2007_1230PM #include #include #include #include namespace boost { namespace spirit { template struct functor_holder; }} namespace boost { namespace spirit { namespace karma { /////////////////////////////////////////////////////////////////////////// // forwards /////////////////////////////////////////////////////////////////////////// struct none; struct eps_generator; struct eol_generator; struct semantic_predicate; struct lazy_generator; struct functor_director; template struct is_valid_expr; template struct expr_transform; /////////////////////////////////////////////////////////////////////////// // auxiliary generators meta-grammar /////////////////////////////////////////////////////////////////////////// // none, and lazy struct auxiliary_meta_grammar : proto::or_< meta_grammar::empty_terminal_rule< karma::domain, tag::none, none>, meta_grammar::empty_terminal_rule< karma::domain, tag::eps, eps_generator>, meta_grammar::empty_terminal_rule< karma::domain, tag::eol, eol_generator>, meta_grammar::function1_rule< karma::domain, tag::eps, semantic_predicate>, meta_grammar::function1_rule< karma::domain, tag::lazy, lazy_generator>, meta_grammar::terminal_rule< karma::domain, functor_holder, functor_director > > { }; /////////////////////////////////////////////////////////////////////////// // These specializations non-intrusively hooks into the Karma meta-grammar. // (see karma/meta_grammar.hpp) /////////////////////////////////////////////////////////////////////////// template struct is_valid_expr< Expr, typename enable_if< proto::matches >::type > : mpl::true_ { }; template struct expr_transform< Expr, typename enable_if< proto::matches >::type > : mpl::identity { }; }}} #endif