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>