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.
73 lines
2.3 KiB
73 lines
2.3 KiB
/*============================================================================= |
|
Boost.Wave: A Standard compliant C++ preprocessor library |
|
|
|
Definition of the abstract lexer interface |
|
|
|
http://www.boost.org/ |
|
|
|
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(CPP_LEX_INTERFACE_HPP_E83F52A4_90AC_4FBE_A9A7_B65F7F94C497_INCLUDED) |
|
#define CPP_LEX_INTERFACE_HPP_E83F52A4_90AC_4FBE_A9A7_B65F7F94C497_INCLUDED |
|
|
|
#include <boost/wave/wave_config.hpp> |
|
#include <boost/wave/util/file_position.hpp> |
|
#include <boost/wave/language_support.hpp> |
|
|
|
// this must occur after all of the includes and before any code appears |
|
#ifdef BOOST_HAS_ABI_HEADERS |
|
#include BOOST_ABI_PREFIX |
|
#endif |
|
|
|
// suppress warnings about dependent classes not being exported from the dll |
|
#ifdef BOOST_MSVC |
|
#pragma warning(push) |
|
#pragma warning(disable : 4251 4231 4660) |
|
#endif |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
namespace boost { |
|
namespace wave { |
|
namespace cpplexer { |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
// |
|
// The lex_input_interface decouples the lex_iterator_shim from the actual |
|
// lexer. This is done to allow compile time reduction. |
|
// Thanks to JCAB for having this idea. |
|
// |
|
/////////////////////////////////////////////////////////////////////////////// |
|
|
|
template <typename TokenT> |
|
struct lex_input_interface |
|
{ |
|
typedef typename TokenT::position_type position_type; |
|
|
|
lex_input_interface() {} |
|
virtual ~lex_input_interface() {} |
|
|
|
virtual TokenT& get(TokenT&) = 0; |
|
virtual void set_position(position_type const &pos) = 0; |
|
#if BOOST_WAVE_SUPPORT_PRAGMA_ONCE != 0 |
|
virtual bool has_include_guards(std::string& guard_name) const = 0; |
|
#endif |
|
}; |
|
|
|
/////////////////////////////////////////////////////////////////////////////// |
|
} // namespace cpplexer |
|
} // namespace wave |
|
} // namespace boost |
|
|
|
#ifdef BOOST_MSVC |
|
#pragma warning(pop) |
|
#endif |
|
|
|
// the suffix header occurs after all of the code |
|
#ifdef BOOST_HAS_ABI_HEADERS |
|
#include BOOST_ABI_SUFFIX |
|
#endif |
|
|
|
#endif // !defined(CPP_LEX_INTERFACE_HPP_E83F52A4_90AC_4FBE_A9A7_B65F7F94C497_INCLUDED)
|
|
|