You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and dots ('.'), can be up to 35 characters long. Letters must be lowercase.
76 lines
2.0 KiB
76 lines
2.0 KiB
/*============================================================================= |
|
Copyright (c) 1998-2003 Joel de Guzman |
|
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_RULE_ALIAS_HPP) |
|
#define BOOST_SPIRIT_RULE_ALIAS_HPP |
|
|
|
#include <boost/spirit/home/classic/namespace.hpp> |
|
#include <boost/spirit/home/classic/core/parser.hpp> |
|
|
|
namespace boost { namespace spirit { |
|
|
|
BOOST_SPIRIT_CLASSIC_NAMESPACE_BEGIN |
|
|
|
/////////////////////////////////////////////////////////////////////////// |
|
// |
|
// rule_alias class |
|
// |
|
/////////////////////////////////////////////////////////////////////////// |
|
template <typename ParserT> |
|
class rule_alias : |
|
public parser<rule_alias<ParserT> > |
|
{ |
|
public: |
|
|
|
typedef rule_alias<ParserT> self_t; |
|
|
|
template <typename ScannerT> |
|
struct result |
|
{ |
|
typedef typename parser_result<ParserT, ScannerT>::type type; |
|
}; |
|
|
|
rule_alias() |
|
: ptr(0) {} |
|
|
|
rule_alias(ParserT const& p) |
|
: ptr(&p) {} |
|
|
|
rule_alias& |
|
operator=(ParserT const& p) |
|
{ |
|
ptr = &p; |
|
return *this; |
|
} |
|
|
|
template <typename ScannerT> |
|
typename parser_result<ParserT, ScannerT>::type |
|
parse(ScannerT const& scan) const |
|
{ |
|
if (ptr) |
|
return ptr->parse(scan); |
|
else |
|
return scan.no_match(); |
|
} |
|
|
|
ParserT const& |
|
get() const |
|
{ |
|
BOOST_ASSERT(ptr != 0); |
|
return *ptr; |
|
} |
|
|
|
private: |
|
|
|
ParserT const* ptr; // hold it by pointer |
|
}; |
|
|
|
BOOST_SPIRIT_CLASSIC_NAMESPACE_END |
|
|
|
}} // namespace BOOST_SPIRIT_CLASSIC_NS |
|
|
|
#endif
|
|
|