1
ļ»æ<?xml version="1.0" encoding="utf-8"?>
3
Copyright 2012 Eric Niebler
5
Distributed under the Boost
6
Software License, Version 1.0. (See accompanying
7
file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt)
9
<header name="boost/proto/debug.hpp">
10
<para>Utilities for debugging Proto expression trees </para>
11
<namespace name="boost">
12
<namespace name="proto">
13
<namespace name="functional">
15
<!-- proto::functional::display_expr -->
16
<struct name="display_expr">
17
<purpose>Pretty-print a Proto expression tree. </purpose>
20
A <conceptname>PolymorphicFunctionObject</conceptname> which accepts a Proto expression tree and pretty-prints it to an <computeroutput>ostream</computeroutput> for debugging purposes.
24
<typedef name="result_type">
28
<method-group name="public member functions">
29
<method name="operator()" cv="const">
32
<template-type-parameter name="Expr"/>
34
<parameter name="expr">
35
<paramtype>Expr const &</paramtype>
41
<parameter name="sout"><paramtype>std::ostream &</paramtype><default>std::cout</default>
44
The <computeroutput>ostream</computeroutput> to which the expression tree will be written.
48
<parameter name="depth">
49
<paramtype>int</paramtype>
53
The starting indentation depth for this node. Children nodes will be displayed at a starting depth of <computeroutput>depth+4</computeroutput>.
62
<!-- proto::display_expr -->
63
<overloaded-function name="display_expr">
68
<template-type-parameter name="Expr"/>
70
<parameter name="expr">
71
<paramtype>Expr const &</paramtype>
73
<para>The Proto expression tree to pretty-print </para>
76
<parameter name="sout">
77
<paramtype>std::ostream &</paramtype>
80
The <computeroutput>ostream</computeroutput> to which the output should be written. If not specified, defaults to <computeroutput>std::cout</computeroutput>.
89
<template-type-parameter name="Expr"/>
91
<parameter name="expr">
92
<paramtype>Expr const &</paramtype>
95
<purpose>Pretty-print a Proto expression tree. </purpose>
98
Equivalent to <computeroutput><classname alt="boost::proto::functional::display_expr">proto::functional::display_expr</classname>(0, sout)(expr)</computeroutput>.
101
</overloaded-function>
103
<!-- proto::assert_matches -->
104
<function name="assert_matches">
107
<template-type-parameter name="Grammar"/>
108
<template-type-parameter name="Expr"/>
110
<parameter name="expr">
111
<paramtype>Expr const &</paramtype>
113
The Proto expression to check againts <code>Grammar</code>.
117
Assert at compile time that a particular expression
118
matches the specified grammar.
122
Equivalent to <code>BOOST_MPL_ASSERT((<classname alt="proto::matches">proto::matches</classname><Expr, Grammar>))</code>.
127
Use <code>proto::assert_matches()</code> to assert at compile-time that
128
an expression matches a grammar.
131
<emphasis role="bold">Example:</emphasis><programlisting>typedef proto::plus< proto::terminal< int >, proto::terminal< int > > PlusInts;
133
proto::assert_matches<PlusInts>( <functionname>proto::lit</functionname>(1) + 42 );</programlisting>
139
<code><functionname>proto::assert_matches_not</functionname>()</code>
142
<code><macroname>BOOST_PROTO_ASSERT_MATCHES</macroname>()</code>
145
<code><macroname>BOOST_PROTO_ASSERT_MATCHES_NOT</macroname>()</code>
152
<!-- proto::assert_matches_not -->
153
<function name="assert_matches_not">
156
<template-type-parameter name="Grammar"/>
157
<template-type-parameter name="Expr"/>
159
<parameter name="expr">
160
<paramtype>Expr const &</paramtype>
162
The Proto expression to check againts <code>Grammar</code>.
166
Assert at compile time that a particular expression
167
does not match the specified grammar.
171
Equivalent to <code>BOOST_MPL_ASSERT_NOT((<classname alt="proto::matches">proto::matches</classname><Expr, Grammar>))</code>.
176
Use <code>proto::assert_matches_not()</code> to assert at compile-time that
177
an expression does not match a grammar.
180
<emphasis role="bold">Example:</emphasis><programlisting>typedef proto::plus< proto::terminal< int >, proto::terminal< int > > PlusInts;
182
proto::assert_matches_not<PlusInts>( <functionname>proto::lit</functionname>("a string") + 42 );</programlisting>
188
<code><functionname>proto::assert_matches</functionname>()</code>
191
<code><macroname>BOOST_PROTO_ASSERT_MATCHES</macroname>()</code>
194
<code><macroname>BOOST_PROTO_ASSERT_MATCHES_NOT</macroname>()</code>
203
<macro name="BOOST_PROTO_ASSERT_MATCHES" kind="functionlike">
204
<macro-parameter name="expr"/>
205
<macro-parameter name="Grammar"/>
207
Assert at compile time that a particular expression
208
matches the specified grammar.
212
Equivalent to <code><functionname alt="boost::proto::assert_matches">proto::assert_matches</functionname><Grammar>(expr)</code>.
217
Use <code>BOOST_PROTO_ASSERT_MATCHES()</code> to assert at compile-time that
218
an expression matches a grammar.
221
<emphasis role="bold">Example:</emphasis><programlisting>typedef <classname alt="boost::proto::plus">proto::plus</classname>< <classname alt="boost::proto::terminal">proto::terminal</classname>< int >, <classname alt="boost::proto::terminal">proto::terminal</classname>< int > > PlusInts;
223
BOOST_PROTO_ASSERT_MATCHES( <functionname alt="boost::proto::lit">proto::lit</functionname>(1) + 42, PlusInts );</programlisting>
229
<code><functionname alt="boost::proto::assert_matches">proto::assert_matches</functionname>()</code>
232
<code><functionname alt="boost::proto::assert_matches_not">proto::assert_matches_not</functionname>()</code>
235
<code><macroname>BOOST_PROTO_ASSERT_MATCHES_NOT</macroname>()</code>
242
<macro name="BOOST_PROTO_ASSERT_MATCHES_NOT" kind="functionlike">
243
<macro-parameter name="expr"/>
244
<macro-parameter name="Grammar"/>
246
Assert at compile time that a particular expression
247
does not match the specified grammar.
251
Equivalent to <code><functionname alt="boost::proto::assert_matches_not">proto::assert_matches_not</functionname><Grammar>(expr)</code>.
256
Use <code>BOOST_PROTO_ASSERT_MATCHES_NOT()</code> to assert at compile-time that
257
an expression does not match a grammar.
260
<emphasis role="bold">Example:</emphasis><programlisting>typedef <classname alt="boost::proto::plus">proto::plus</classname>< <classname alt="boost::proto::terminal">proto::terminal</classname>< int >, <classname alt="boost::proto::terminal">proto::terminal</classname>< int > > PlusInts;
262
BOOST_PROTO_ASSERT_MATCHES_NOT( <functionname alt="boost::proto::lit">proto::lit</functionname>("a string") + 42, PlusInts );</programlisting>
268
<code><functionname alt="boost::proto::assert_matches">proto::assert_matches</functionname>()</code>
271
<code><functionname alt="boost::proto::assert_matches_not">proto::assert_matches_not</functionname>()</code>
274
<code><macroname>BOOST_PROTO_ASSERT_MATCHES</macroname>()</code>