File indexing completed on 2025-12-16 10:09:00
0001
0002
0003
0004
0005
0006
0007
0008 #if !defined(BOOST_SPIRIT_RULE_ALIAS_HPP)
0009 #define BOOST_SPIRIT_RULE_ALIAS_HPP
0010
0011 #include <boost/spirit/home/classic/namespace.hpp>
0012 #include <boost/spirit/home/classic/core/parser.hpp>
0013
0014 namespace boost { namespace spirit {
0015
0016 BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN
0017
0018
0019
0020
0021
0022
0023 template <typename ParserT>
0024 class rule_alias :
0025 public parser<rule_alias<ParserT> >
0026 {
0027 public:
0028
0029 typedef rule_alias<ParserT> self_t;
0030
0031 template <typename ScannerT>
0032 struct result
0033 {
0034 typedef typename parser_result<ParserT, ScannerT>::type type;
0035 };
0036
0037 rule_alias()
0038 : ptr(0) {}
0039
0040 rule_alias(ParserT const& p)
0041 : ptr(&p) {}
0042
0043 rule_alias&
0044 operator=(ParserT const& p)
0045 {
0046 ptr = &p;
0047 return *this;
0048 }
0049
0050 template <typename ScannerT>
0051 typename parser_result<ParserT, ScannerT>::type
0052 parse(ScannerT const& scan) const
0053 {
0054 if (ptr)
0055 return ptr->parse(scan);
0056 else
0057 return scan.no_match();
0058 }
0059
0060 ParserT const&
0061 get() const
0062 {
0063 BOOST_ASSERT(ptr != 0);
0064 return *ptr;
0065 }
0066
0067 private:
0068
0069 ParserT const* ptr;
0070 };
0071
0072 BOOST_SPIRIT_CLASSIC_NAMESPACE_END
0073
0074 }}
0075
0076 #endif