/*============================================================================= Copyright (c) 2001-2008 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 #include #include #include /////////////////////////////////////////////////////////////////////////////// namespace boost { namespace spirit { namespace qi { namespace debug { /////////////////////////////////////////////////////////////////////////// // Simple pre-parse hook allowing to print the context before a rule is // parsed. template 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 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 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; post_parse_functor_type post = &simple_post_parse; decorate(r, r.name(), trace, pre, post); } }}}} #endif