Chris@16: /*============================================================================= Chris@16: Copyright (c) 2001-2003 Joel de Guzman Chris@16: Copyright (c) 2002-2003 Hartmut Kaiser Chris@16: http://spirit.sourceforge.net/ Chris@16: Chris@16: Distributed under the Boost Software License, Version 1.0. (See accompanying Chris@16: file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) Chris@16: =============================================================================*/ Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP) Chris@16: #define BOOST_SPIRIT_DEBUG_MAIN_HPP Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: #if defined(BOOST_SPIRIT_DEBUG) Chris@16: Chris@16: #include Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // Spirit.Debug includes and defines Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////////// Chris@16: Chris@16: #include Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // The BOOST_SPIRIT_DEBUG_OUT defines the stream object, which should be used Chris@16: // for debug diagnostics. This defaults to std::cout. Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_OUT) Chris@16: #define BOOST_SPIRIT_DEBUG_OUT std::cout Chris@16: #endif Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // The BOOST_SPIRIT_DEBUG_PRINT_SOME constant defines the number of characters Chris@16: // from the stream to be printed for diagnosis. This defaults to the first Chris@16: // 20 characters. Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_PRINT_SOME) Chris@16: #define BOOST_SPIRIT_DEBUG_PRINT_SOME 20 Chris@16: #endif Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // Additional BOOST_SPIRIT_DEBUG_FLAGS control the level of diagnostics printed Chris@16: // Basic constants are defined in debug/minimal.hpp. Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: #define BOOST_SPIRIT_DEBUG_FLAGS_NODES 0x0001 // node diagnostics Chris@16: #define BOOST_SPIRIT_DEBUG_FLAGS_ESCAPE_CHAR 0x0002 // escape_char_parse diagnostics Chris@16: #define BOOST_SPIRIT_DEBUG_FLAGS_TREES 0x0004 // parse tree/ast diagnostics Chris@16: #define BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES 0x0008 // closure diagnostics Chris@16: #define BOOST_SPIRIT_DEBUG_FLAGS_SLEX 0x8000 // slex diagnostics Chris@16: Chris@16: #define BOOST_SPIRIT_DEBUG_FLAGS_MAX 0xFFFF // print maximal diagnostics Chris@16: Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_FLAGS) Chris@16: #define BOOST_SPIRIT_DEBUG_FLAGS BOOST_SPIRIT_DEBUG_FLAGS_MAX Chris@16: #endif Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // By default all nodes are traced (even those, not registered with Chris@16: // BOOST_SPIRIT_DEBUG_RULE et.al. - see below). The following constant may be Chris@16: // used to redefine this default. Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_TRACENODE) Chris@16: #define BOOST_SPIRIT_DEBUG_TRACENODE (true) Chris@16: #endif // !defined(BOOST_SPIRIT_DEBUG_TRACENODE) Chris@16: Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: // Chris@16: // Helper macros for giving rules and subrules a name accessible through Chris@16: // parser_name() functions (see parser_names.hpp). Chris@16: // Chris@16: // Additionally, the macros BOOST_SPIRIT_DEBUG_RULE, SPIRIT_DEBUG_NODE and Chris@16: // BOOST_SPIRIT_DEBUG_GRAMMAR enable/disable the tracing of the Chris@16: // correspondingnode accordingly to the PP constant Chris@16: // BOOST_SPIRIT_DEBUG_TRACENODE. Chris@16: // Chris@16: // The macros BOOST_SPIRIT_DEBUG_TRACE_RULE, BOOST_SPIRIT_DEBUG_TRACE_NODE Chris@16: // and BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR allow to specify a flag to define, Chris@16: // whether the corresponding node is to be traced or not. Chris@16: // Chris@16: /////////////////////////////////////////////////////////////////////////// Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_RULE) Chris@16: #define BOOST_SPIRIT_DEBUG_RULE(r) \ Chris@16: ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \ Chris@16: register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE) Chris@16: #endif // !defined(BOOST_SPIRIT_DEBUG_RULE) Chris@16: Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_NODE) Chris@16: #define BOOST_SPIRIT_DEBUG_NODE(r) \ Chris@16: ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \ Chris@16: register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE) Chris@16: #endif // !defined(BOOST_SPIRIT_DEBUG_NODE) Chris@16: Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_GRAMMAR) Chris@16: #define BOOST_SPIRIT_DEBUG_GRAMMAR(r) \ Chris@16: ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \ Chris@16: register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE) Chris@16: #endif // !defined(BOOST_SPIRIT_DEBUG_GRAMMAR) Chris@16: Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE) Chris@16: #define BOOST_SPIRIT_DEBUG_TRACE_RULE(r, t) \ Chris@16: ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \ Chris@16: register_node(&r, #r, (t)) Chris@16: #endif // !defined(BOOST_SPIRIT_TRACE_RULE) Chris@16: Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE) Chris@16: #define BOOST_SPIRIT_DEBUG_TRACE_NODE(r, t) \ Chris@16: ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \ Chris@16: register_node(&r, #r, (t)) Chris@16: #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE) Chris@16: Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR) Chris@16: #define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR(r, t) \ Chris@16: ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \ Chris@16: register_node(&r, #r, (t)) Chris@16: #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR) Chris@16: Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME) Chris@16: #define BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME(r, n, t) \ Chris@16: ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \ Chris@16: register_node(&r, (n), (t)) Chris@16: #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME) Chris@16: Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME) Chris@16: #define BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME(r, n, t) \ Chris@16: ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \ Chris@16: register_node(&r, (n), (t)) Chris@16: #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME) Chris@16: Chris@16: #if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME) Chris@16: #define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(r, n, t) \ Chris@16: ::BOOST_SPIRIT_CLASSIC_NS::impl::get_node_registry(). \ Chris@16: register_node(&r, (n), (t)) Chris@16: #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME) Chris@16: Chris@16: ////////////////////////////////// Chris@16: #include Chris@16: Chris@16: #else Chris@16: ////////////////////////////////// Chris@16: #include Chris@16: Chris@16: #endif // BOOST_SPIRIT_DEBUG Chris@16: Chris@16: #endif Chris@16: