/usr/include/boost/spirit/home/qi/nonterminal
Edit: /usr/include/boost/spirit/home/qi/nonterminal/grammar.hpp (4792B)
/*=============================================================================
Copyright (c) 2001-2011 Joel de Guzman
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_FEBRUARY_19_2007_0236PM)
#define BOOST_SPIRIT_GRAMMAR_FEBRUARY_19_2007_0236PM
#if defined(_MSC_VER)
#pragma once
#endif
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
namespace boost { namespace spirit { namespace qi
{
template <
typename Iterator, typename T1, typename T2, typename T3
, typename T4>
struct grammar
: proto::extends<
typename proto::terminal<
reference const>
>::type
, grammar
>
, parser >
, noncopyable
{
typedef Iterator iterator_type;
typedef rule start_type;
typedef typename start_type::sig_type sig_type;
typedef typename start_type::locals_type locals_type;
typedef typename start_type::skipper_type skipper_type;
typedef typename start_type::encoding_type encoding_type;
typedef grammar base_type;
typedef reference reference_;
typedef typename proto::terminal::type terminal;
static size_t const params_size = start_type::params_size;
template
struct attribute
{
typedef typename start_type::attr_type type;
};
grammar(
start_type const& start
, std::string const& name = "unnamed-grammar")
: proto::extends(terminal::make(reference_(start)))
, name_(name)
{}
// This constructor is used to catch if the start rule is not
// compatible with the grammar.
template
grammar(
rule const&
, std::string const& = "unnamed-grammar")
{
// If you see the assertion below failing then the start rule
// passed to the constructor of the grammar is not compatible with
// the grammar (i.e. it uses different template parameters).
BOOST_SPIRIT_ASSERT_MSG(
(is_same >::value)
, incompatible_start_rule, (rule));
}
std::string name() const
{
return name_;
}
void name(std::string const& str)
{
name_ = str;
}
template
bool parse(Iterator& first, Iterator const& last
, Context& context, Skipper const& skipper
, Attribute& attr_) const
{
return this->proto_base().child0.parse(
first, last, context, skipper, attr_);
}
template
info what(Context&) const
{
return info(name_);
}
// bring in the operator() overloads
start_type const& get_parameterized_subject() const
{ return this->proto_base().child0.ref.get(); }
typedef start_type parameterized_subject_type;
#include
std::string name_;
};
}}}
namespace boost { namespace spirit { namespace traits
{
///////////////////////////////////////////////////////////////////////////
template <
typename IteratorA, typename IteratorB, typename Attribute
, typename Context, typename T1, typename T2, typename T3, typename T4>
struct handles_container<
qi::grammar, Attribute, Context, IteratorB>
: traits::is_container<
typename attribute_of<
qi::grammar, Context, IteratorB
>::type
>
{};
}}}
#endif