os/ossrv/ossrv_pub/boost_apis/boost/spirit/debug.hpp
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 /*=============================================================================
     2     Copyright (c) 2001-2003 Joel de Guzman
     3     Copyright (c) 2002-2003 Hartmut Kaiser
     4     http://spirit.sourceforge.net/
     5 
     6     Use, modification and distribution is subject to the Boost Software
     7     License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
     8     http://www.boost.org/LICENSE_1_0.txt)
     9 =============================================================================*/
    10 #if !defined(BOOST_SPIRIT_DEBUG_MAIN_HPP)
    11 #define BOOST_SPIRIT_DEBUG_MAIN_HPP
    12 
    13 ///////////////////////////////////////////////////////////////////////////
    14 #if defined(BOOST_SPIRIT_DEBUG)
    15 
    16 #include <boost/spirit/version.hpp>
    17 
    18 ///////////////////////////////////////////////////////////////////////////////
    19 //
    20 //  Spirit.Debug includes and defines
    21 //
    22 ///////////////////////////////////////////////////////////////////////////////
    23 
    24     #include <iostream>
    25 
    26     ///////////////////////////////////////////////////////////////////////////
    27     //
    28     //  The BOOST_SPIRIT_DEBUG_OUT defines the stream object, which should be used
    29     //  for debug diagnostics. This defaults to std::cout.
    30     //
    31     ///////////////////////////////////////////////////////////////////////////
    32     #if !defined(BOOST_SPIRIT_DEBUG_OUT)
    33     #define BOOST_SPIRIT_DEBUG_OUT std::cout
    34     #endif
    35 
    36     ///////////////////////////////////////////////////////////////////////////
    37     //
    38     //  The BOOST_SPIRIT_DEBUG_PRINT_SOME constant defines the number of characters
    39     //  from the stream to be printed for diagnosis. This defaults to the first
    40     //  20 characters.
    41     //
    42     ///////////////////////////////////////////////////////////////////////////
    43     #if !defined(BOOST_SPIRIT_DEBUG_PRINT_SOME)
    44     #define BOOST_SPIRIT_DEBUG_PRINT_SOME 20
    45     #endif
    46 
    47     ///////////////////////////////////////////////////////////////////////////
    48     //
    49     //  Additional BOOST_SPIRIT_DEBUG_FLAGS control the level of diagnostics printed
    50     //  Basic constants are defined in debug/minimal.hpp.
    51     //
    52     ///////////////////////////////////////////////////////////////////////////
    53     #define BOOST_SPIRIT_DEBUG_FLAGS_NODES        0x0001  // node diagnostics
    54     #define BOOST_SPIRIT_DEBUG_FLAGS_ESCAPE_CHAR  0x0002  // escape_char_parse diagnostics
    55     #define BOOST_SPIRIT_DEBUG_FLAGS_TREES        0x0004  // parse tree/ast diagnostics
    56     #define BOOST_SPIRIT_DEBUG_FLAGS_CLOSURES     0x0008  // closure diagnostics
    57     #define BOOST_SPIRIT_DEBUG_FLAGS_SLEX         0x8000  // slex diagnostics
    58 
    59     #define BOOST_SPIRIT_DEBUG_FLAGS_MAX          0xFFFF  // print maximal diagnostics
    60 
    61     #if !defined(BOOST_SPIRIT_DEBUG_FLAGS)
    62     #define BOOST_SPIRIT_DEBUG_FLAGS BOOST_SPIRIT_DEBUG_FLAGS_MAX
    63     #endif
    64 
    65     ///////////////////////////////////////////////////////////////////////////
    66     //
    67     //  By default all nodes are traced (even those, not registered with
    68     //  BOOST_SPIRIT_DEBUG_RULE et.al. - see below). The following constant may be
    69     //  used to redefine this default.
    70     //
    71     ///////////////////////////////////////////////////////////////////////////
    72     #if !defined(BOOST_SPIRIT_DEBUG_TRACENODE)
    73     #define BOOST_SPIRIT_DEBUG_TRACENODE          (true)
    74     #endif // !defined(BOOST_SPIRIT_DEBUG_TRACENODE)
    75 
    76     ///////////////////////////////////////////////////////////////////////////
    77     //
    78     //  Helper macros for giving rules and subrules a name accessible through
    79     //  parser_name() functions (see parser_names.hpp).
    80     //
    81     //  Additionally, the macros BOOST_SPIRIT_DEBUG_RULE, SPIRIT_DEBUG_NODE and
    82     //  BOOST_SPIRIT_DEBUG_GRAMMAR enable/disable the tracing of the 
    83     //  correspondingnode accordingly to the PP constant 
    84     //  BOOST_SPIRIT_DEBUG_TRACENODE.
    85     //
    86     //  The macros BOOST_SPIRIT_DEBUG_TRACE_RULE, BOOST_SPIRIT_DEBUG_TRACE_NODE 
    87     //  and BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR allow to specify a flag to define, 
    88     //  whether the corresponding node is to be traced or not.
    89     //
    90     ///////////////////////////////////////////////////////////////////////////
    91     #if !defined(BOOST_SPIRIT_DEBUG_RULE)
    92     #define BOOST_SPIRIT_DEBUG_RULE(r)    \
    93         ::boost::spirit::impl::get_node_registry().register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
    94     #endif // !defined(BOOST_SPIRIT_DEBUG_RULE)
    95 
    96     #if !defined(BOOST_SPIRIT_DEBUG_NODE)
    97     #define BOOST_SPIRIT_DEBUG_NODE(r)    \
    98         ::boost::spirit::impl::get_node_registry().register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
    99     #endif // !defined(BOOST_SPIRIT_DEBUG_NODE)
   100 
   101     #if !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
   102     #define BOOST_SPIRIT_DEBUG_GRAMMAR(r)    \
   103         ::boost::spirit::impl::get_node_registry().register_node(&r, #r, BOOST_SPIRIT_DEBUG_TRACENODE)
   104     #endif // !defined(BOOST_SPIRIT_DEBUG_GRAMMAR)
   105 
   106     #if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE)
   107     #define BOOST_SPIRIT_DEBUG_TRACE_RULE(r, t)    \
   108         ::boost::spirit::impl::get_node_registry().register_node(&r, #r, (t))
   109     #endif // !defined(BOOST_SPIRIT_TRACE_RULE)
   110 
   111     #if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
   112     #define BOOST_SPIRIT_DEBUG_TRACE_NODE(r, t)    \
   113         ::boost::spirit::impl::get_node_registry().register_node(&r, #r, (t))
   114     #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE)
   115 
   116     #if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
   117     #define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR(r, t)    \
   118         ::boost::spirit::impl::get_node_registry().register_node(&r, #r, (t))
   119     #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR)
   120 
   121     #if !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
   122     #define BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME(r, n, t)    \
   123         ::boost::spirit::impl::get_node_registry().register_node(&r, (n), (t))
   124     #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_RULE_NAME)
   125 
   126     #if !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
   127     #define BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME(r, n, t)    \
   128         ::boost::spirit::impl::get_node_registry().register_node(&r, (n), (t))
   129     #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_NODE_NAME)
   130 
   131     #if !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
   132     #define BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME(r, n, t)    \
   133         ::boost::spirit::impl::get_node_registry().register_node(&r, (n), (t))
   134     #endif // !defined(BOOST_SPIRIT_DEBUG_TRACE_GRAMMAR_NAME)
   135 
   136     //////////////////////////////////
   137     #include <boost/spirit/debug/debug_node.hpp>
   138 
   139 #else
   140     //////////////////////////////////
   141     #include <boost/spirit/debug/minimal.hpp>
   142 
   143 #endif // BOOST_SPIRIT_DEBUG
   144 
   145 #endif
   146