]> git.proxmox.com Git - ceph.git/blame - ceph/src/boost/libs/spirit/include/boost/spirit/home/classic/core/non_terminal/grammar.hpp
bump version to 12.2.2-pve1
[ceph.git] / ceph / src / boost / libs / spirit / include / boost / spirit / home / classic / core / non_terminal / grammar.hpp
CommitLineData
7c673cae
FG
1/*=============================================================================
2 Copyright (c) 2001-2003 Joel de Guzman
3 Copyright (c) 2002-2003 Martin Wille
4 Copyright (c) 2003 Hartmut Kaiser
5 http://spirit.sourceforge.net/
6
7 Distributed under the Boost Software License, Version 1.0. (See accompanying
8 file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9=============================================================================*/
10#if !defined(BOOST_SPIRIT_GRAMMAR_HPP)
11#define BOOST_SPIRIT_GRAMMAR_HPP
12
13///////////////////////////////////////////////////////////////////////////////
14#if defined(BOOST_SPIRIT_THREADSAFE) && defined(BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE)
15#undef BOOST_SPIRIT_SINGLE_GRAMMAR_INSTANCE
16#endif
17
18#include <boost/spirit/home/classic/namespace.hpp>
19#include <boost/spirit/home/classic/core/parser.hpp>
20#include <boost/spirit/home/classic/core/non_terminal/parser_context.hpp>
21#include <boost/spirit/home/classic/core/non_terminal/impl/grammar.ipp>
22
23///////////////////////////////////////////////////////////////////////////////
24namespace boost { namespace spirit {
25
26BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
27
28///////////////////////////////////////////////////////////////////////////////
29//
30// grammar class
31//
32///////////////////////////////////////////////////////////////////////////////
33template <typename DerivedT, typename ContextT = parser_context<> >
34struct grammar
35 : public parser<DerivedT>
36 , public ContextT::base_t
37 , public context_aux<ContextT, DerivedT>
38 BOOST_SPIRIT_GRAMMAR_ID
39{
40 typedef grammar<DerivedT, ContextT> self_t;
41 typedef DerivedT const& embed_t;
42 typedef typename ContextT::context_linker_t context_t;
43 typedef typename context_t::attr_t attr_t;
44
45 template <typename ScannerT>
46 struct result
47 {
48 typedef typename match_result<ScannerT, attr_t>::type type;
49 };
50
51 grammar() {}
52 ~grammar() { impl::grammar_destruct(this); }
53
54 template <typename ScannerT>
55 typename parser_result<self_t, ScannerT>::type
56 parse_main(ScannerT const& scan) const
57 { return impl::grammar_parser_parse<0>(this, scan); }
58
59 template <typename ScannerT>
60 typename parser_result<self_t, ScannerT>::type
61 parse(ScannerT const& scan) const
62 {
63 typedef typename parser_result<self_t, ScannerT>::type result_t;
64 typedef parser_scanner_linker<ScannerT> scanner_t;
65 BOOST_SPIRIT_CONTEXT_PARSE(scan, *this, scanner_t, context_t, result_t)
66 }
67
68 template <int N>
69 impl::entry_grammar<DerivedT, N, ContextT>
70 use_parser() const
71 { return impl::entry_grammar<DerivedT, N, ContextT>( this->derived()); }
72
73 BOOST_SPIRIT_GRAMMAR_STATE
74};
75
76///////////////////////////////////////////////////////////////////////////////
77BOOST_SPIRIT_CLASSIC_NAMESPACE_END
78
79}} // namespace BOOST_SPIRIT_CLASSIC_NS
80
81#undef BOOST_SPIRIT_GRAMMAR_ID
82#undef BOOST_SPIRIT_GRAMMAR_STATE
83#endif
84