/*============================================================================= Copyright (c) 2001-2003 Joel de Guzman Copyright (c) 2002-2003 Martin Wille Copyright (c) 2003 Hartmut Kaiser http://spirit.sourceforge.net/ 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_GRAMMAR_HPP) #define BOOST_SPIRIT_GRAMMAR_HPP /////////////////////////////////////////////////////////////////////////////// #if defined(BOOST_SPIRIT_THREADSAFE) && defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE) #undef BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE #endif #include #include #include #include /////////////////////////////////////////////////////////////////////////////// namespace boost { namespace spirit { BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN /////////////////////////////////////////////////////////////////////////////// // // grammar class // /////////////////////////////////////////////////////////////////////////////// template > struct grammar : public parser , public ContextT::base_t , public context_aux BOOST_SPIRIT_GRAMMAR_ID { typedef grammar self_t; typedef DerivedT const& embed_t; typedef typename ContextT::context_linker_t context_t; typedef typename context_t::attr_t attr_t; template struct result { typedef typename match_result::type type; }; grammar() {} ~grammar() { impl::grammar_destruct(this); } template typename parser_result::type parse_main(ScannerT const& scan) const { return impl::grammar_parser_parse<0>(this, scan); } template typename parser_result::type parse(ScannerT const& scan) const { typedef typename parser_result::type result_t; typedef parser_scanner_linker scanner_t; BOOST_SPIRIT_CONTEXT_PARSE(scan, *this, scanner_t, context_t, result_t) } template impl::entry_grammar use_parser() const { return impl::entry_grammar( this->derived()); } BOOST_SPIRIT_GRAMMAR_STATE }; /////////////////////////////////////////////////////////////////////////////// BOOST_SPIRIT_CLASSIC_NAMESPACE_END }} // namespace BOOST_SPIRIT_CLASSIC_NS #undef BOOST_SPIRIT_GRAMMAR_ID #undef BOOST_SPIRIT_GRAMMAR_ACCESS #undef BOOST_SPIRIT_GRAMMAR_STATE #endif