Imported existing code
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
/*=============================================================================
|
||||
Copyright (c) 2001-2009 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(BOOST_SPIRIT_SIMPLE_DEBUG_NOV_12_2007_1155AM)
|
||||
#define BOOST_SPIRIT_SIMPLE_DEBUG_NOV_12_2007_1155AM
|
||||
|
||||
#include <boost/spirit/home/qi/debug/detail/debug_handler.hpp>
|
||||
#include <boost/spirit/home/qi/debug/detail/print_node_info.hpp>
|
||||
#include <boost/spirit/home/qi/nonterminal/rule.hpp>
|
||||
#include <string>
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////////
|
||||
namespace boost { namespace spirit { namespace qi { namespace debug
|
||||
{
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Simple pre-parse hook allowing to print the context before a rule is
|
||||
// parsed.
|
||||
template <typename Subject, typename Iterator>
|
||||
inline bool
|
||||
simple_pre_parse(std::string const& name, Subject subject,
|
||||
unsigned level, Iterator first, Iterator const& last)
|
||||
{
|
||||
detail::print_node_info(false, level, false, name, first, last);
|
||||
return true;
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
// Simple post-parse hook allowing to print the context after a rule is
|
||||
// parsed.
|
||||
template <typename Subject, typename Iterator>
|
||||
inline void
|
||||
simple_post_parse(bool hit, std::string const& name, Subject subject,
|
||||
unsigned level, Iterator first, Iterator const& last)
|
||||
{
|
||||
detail::print_node_info(hit, level, true, name, first, last);
|
||||
}
|
||||
|
||||
///////////////////////////////////////////////////////////////////////////
|
||||
template <typename Nonterminal>
|
||||
inline void
|
||||
enable_simple_debug_support(Nonterminal& r, bool trace)
|
||||
{
|
||||
typedef typename Nonterminal::iterator_type iterator_type;
|
||||
typedef typename Nonterminal::pointer_type pointer_type;
|
||||
|
||||
typedef bool (*pre_parse_functor_type)(std::string const&,
|
||||
pointer_type, unsigned, iterator_type, iterator_type const&);
|
||||
typedef void (*post_parse_functor_type)(bool, std::string const&,
|
||||
pointer_type, unsigned, iterator_type, iterator_type const&);
|
||||
|
||||
typedef
|
||||
detail::debug_handler<
|
||||
iterator_type,
|
||||
typename Nonterminal::base_type::context_type,
|
||||
typename Nonterminal::skipper_type,
|
||||
pre_parse_functor_type,
|
||||
post_parse_functor_type>
|
||||
simple_debug_handler;
|
||||
|
||||
pre_parse_functor_type pre =
|
||||
&simple_pre_parse<pointer_type, iterator_type>;
|
||||
post_parse_functor_type post =
|
||||
&simple_post_parse<pointer_type, iterator_type>;
|
||||
decorate<simple_debug_handler>(r, r.name(), trace, pre, post);
|
||||
}
|
||||
|
||||
}}}}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user