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.
72 lines
2.3 KiB
72 lines
2.3 KiB
// Copyright (c) 2001-2011 Hartmut Kaiser |
|
// |
|
// 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(SPIRIT_LEX_SEQUENCE_MAR_28_2007_0610PM) |
|
#define SPIRIT_LEX_SEQUENCE_MAR_28_2007_0610PM |
|
|
|
#if defined(_MSC_VER) |
|
#pragma once |
|
#endif |
|
|
|
#include <boost/spirit/home/lex/domain.hpp> |
|
#include <boost/spirit/home/lex/lexer_type.hpp> |
|
#include <boost/spirit/home/lex/meta_compiler.hpp> |
|
#include <boost/spirit/home/lex/detail/sequence_function.hpp> |
|
#include <boost/fusion/include/any.hpp> |
|
|
|
namespace boost { namespace spirit |
|
{ |
|
/////////////////////////////////////////////////////////////////////////// |
|
// Enablers |
|
/////////////////////////////////////////////////////////////////////////// |
|
template <> |
|
struct use_operator<lex::domain, proto::tag::bitwise_or> // enables | |
|
: mpl::true_ {}; |
|
|
|
template <> |
|
struct flatten_tree<lex::domain, proto::tag::bitwise_or> // flattens | |
|
: mpl::true_ {}; |
|
|
|
}} |
|
|
|
namespace boost { namespace spirit { namespace lex |
|
{ |
|
template <typename Elements> |
|
struct sequence : nary_lexer<sequence<Elements> > |
|
{ |
|
sequence(Elements const& elements) |
|
: elements(elements) {} |
|
|
|
template <typename LexerDef, typename String> |
|
void collect(LexerDef& lexdef, String const& state |
|
, String const& targetstate) const |
|
{ |
|
typedef detail::sequence_collect_function<LexerDef, String> |
|
collect_function_type; |
|
collect_function_type f (lexdef, state, targetstate); |
|
fusion::any(elements, f); |
|
} |
|
|
|
template <typename LexerDef> |
|
void add_actions(LexerDef& lexdef) const |
|
{ |
|
detail::sequence_add_actions_function<LexerDef> f (lexdef); |
|
fusion::any(elements, f); |
|
} |
|
|
|
Elements elements; |
|
}; |
|
|
|
/////////////////////////////////////////////////////////////////////////// |
|
// Lexer generator: make_xxx function (objects) |
|
/////////////////////////////////////////////////////////////////////////// |
|
template <typename Elements, typename Modifiers> |
|
struct make_composite<proto::tag::bitwise_or, Elements, Modifiers> |
|
: make_nary_composite<Elements, sequence> |
|
{}; |
|
|
|
}}} // namespace boost::spirit::lex |
|
|
|
#endif
|
|
|