85 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
		
		
			
		
	
	
			85 lines
		
	
	
		
			3.0 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
|   | /*============================================================================= | ||
|  |     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 <boost/spirit/home/classic/namespace.hpp> | ||
|  | #include <boost/spirit/home/classic/core/parser.hpp> | ||
|  | #include <boost/spirit/home/classic/core/non_terminal/parser_context.hpp> | ||
|  | #include <boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp> | ||
|  | 
 | ||
|  | /////////////////////////////////////////////////////////////////////////////// | ||
|  | namespace boost { namespace spirit { | ||
|  | 
 | ||
|  | BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN | ||
|  | 
 | ||
|  | /////////////////////////////////////////////////////////////////////////////// | ||
|  | // | ||
|  | //  grammar class | ||
|  | // | ||
|  | /////////////////////////////////////////////////////////////////////////////// | ||
|  | template <typename DerivedT, typename ContextT = parser_context<> > | ||
|  | struct grammar | ||
|  |     : public parser<DerivedT> | ||
|  |     , public ContextT::base_t | ||
|  |     , public context_aux<ContextT, DerivedT> | ||
|  |     BOOST_SPIRIT_GRAMMAR_ID | ||
|  | { | ||
|  |     typedef grammar<DerivedT, ContextT>         self_t; | ||
|  |     typedef DerivedT const&                     embed_t; | ||
|  |     typedef typename ContextT::context_linker_t context_t; | ||
|  |     typedef typename context_t::attr_t          attr_t; | ||
|  | 
 | ||
|  |     template <typename ScannerT> | ||
|  |     struct result | ||
|  |     { | ||
|  |         typedef typename match_result<ScannerT, attr_t>::type type; | ||
|  |     }; | ||
|  | 
 | ||
|  |     grammar() {} | ||
|  |     ~grammar() { impl::grammar_destruct(this); } | ||
|  | 
 | ||
|  |     template <typename ScannerT> | ||
|  |     typename parser_result<self_t, ScannerT>::type | ||
|  |     parse_main(ScannerT const& scan) const | ||
|  |     { return impl::grammar_parser_parse<0>(this, scan); } | ||
|  | 
 | ||
|  |     template <typename ScannerT> | ||
|  |     typename parser_result<self_t, ScannerT>::type | ||
|  |     parse(ScannerT const& scan) const | ||
|  |     { | ||
|  |         typedef typename parser_result<self_t, ScannerT>::type result_t; | ||
|  |         typedef parser_scanner_linker<ScannerT> scanner_t; | ||
|  |         BOOST_SPIRIT_CONTEXT_PARSE(scan, *this, scanner_t, context_t, result_t) | ||
|  |     } | ||
|  | 
 | ||
|  |     template <int N> | ||
|  |     impl::entry_grammar<DerivedT, N, ContextT> | ||
|  |     use_parser() const | ||
|  |     { return impl::entry_grammar<DerivedT, N, ContextT>( 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_STATE | ||
|  | #endif | ||
|  | 
 |