• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Auto Parser</title>
5<link rel="stylesheet" href="../../../../../../../doc/src/boostbook.css" type="text/css">
6<meta name="generator" content="DocBook XSL Stylesheets V1.79.1">
7<link rel="home" href="../../../index.html" title="Spirit 2.5.8">
8<link rel="up" href="../reference.html" title="Reference">
9<link rel="prev" href="action.html" title="Semantic Actions with Parsers">
10<link rel="next" href="auxiliary.html" title="Auxiliary Parsers">
11</head>
12<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
13<table cellpadding="2" width="100%"><tr>
14<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../boost.png"></td>
15<td align="center"><a href="../../../../../../../index.html">Home</a></td>
16<td align="center"><a href="../../../../../../../libs/libraries.htm">Libraries</a></td>
17<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
18<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
19<td align="center"><a href="../../../../../../../more/index.htm">More</a></td>
20</tr></table>
21<hr>
22<div class="spirit-nav">
23<a accesskey="p" href="action.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="auxiliary.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h4 class="title">
27<a name="spirit.qi.reference.auto"></a><a class="link" href="auto.html" title="Auto Parser">Auto Parser</a>
28</h4></div></div></div>
29<h6>
30<a name="spirit.qi.reference.auto.h0"></a>
31          <span class="phrase"><a name="spirit.qi.reference.auto.description"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.description">Description</a>
32        </h6>
33<p>
34          This module includes the description of the <code class="computeroutput"><span class="identifier">auto_</span></code>
35          parser. This parser can be used to automatically create a parser based
36          on the supplied attribute type.
37        </p>
38<h6>
39<a name="spirit.qi.reference.auto.h1"></a>
40          <span class="phrase"><a name="spirit.qi.reference.auto.header"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.header">Header</a>
41        </h6>
42<pre class="programlisting"><span class="comment">// forwards to &lt;boost/spirit/home/qi/auto.hpp&gt;</span>
43<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">qi_auto</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
44</pre>
45<p>
46          Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</a>.
47        </p>
48<h6>
49<a name="spirit.qi.reference.auto.h2"></a>
50          <span class="phrase"><a name="spirit.qi.reference.auto.namespace"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.namespace">Namespace</a>
51        </h6>
52<div class="informaltable"><table class="table">
53<colgroup><col></colgroup>
54<thead><tr><th>
55                  <p>
56                    Name
57                  </p>
58                </th></tr></thead>
59<tbody><tr><td>
60                  <p>
61                    <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">auto_</span> <span class="comment">// alias:
62                    boost::spirit::qi::auto_</span></code>
63                  </p>
64                </td></tr></tbody>
65</table></div>
66<h6>
67<a name="spirit.qi.reference.auto.h3"></a>
68          <span class="phrase"><a name="spirit.qi.reference.auto.model_of"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.model_of">Model
69          of</a>
70        </h6>
71<div class="blockquote"><blockquote class="blockquote"><p>
72            <a class="link" href="parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</span></code></a>
73          </p></blockquote></div>
74<h6>
75<a name="spirit.qi.reference.auto.h4"></a>
76          <span class="phrase"><a name="spirit.qi.reference.auto.expression_semantics"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.expression_semantics">Expression
77          Semantics</a>
78        </h6>
79<p>
80          Semantics of an expression is defined only where it differs from, or is
81          not defined in <a class="link" href="../../karma/reference/generator_concepts/primitivegenerator.html" title="PrimitiveGenerator"><code class="computeroutput"><span class="identifier">PrimitiveGenerator</span></code></a>.
82        </p>
83<div class="informaltable"><table class="table">
84<colgroup>
85<col>
86<col>
87</colgroup>
88<thead><tr>
89<th>
90                  <p>
91                    Expression
92                  </p>
93                </th>
94<th>
95                  <p>
96                    Description
97                  </p>
98                </th>
99</tr></thead>
100<tbody><tr>
101<td>
102                  <p>
103                    <code class="computeroutput"><span class="identifier">auto_</span></code>
104                  </p>
105                </td>
106<td>
107                  <p>
108                    Create a parser instance compatible with the supplied attribute
109                    type and use it for input matching.
110                  </p>
111                </td>
112</tr></tbody>
113</table></div>
114<h6>
115<a name="spirit.qi.reference.auto.h5"></a>
116          <span class="phrase"><a name="spirit.qi.reference.auto.additional_requirements"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.additional_requirements">Additional
117          Requirements</a>
118        </h6>
119<p>
120          The <code class="computeroutput"><span class="identifier">auto_</span></code> parsers can be
121          used to match input for any data type for which a mapping to a parser type
122          is defined (the meta function <code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">create_parser_exists</span></code>
123          returns <code class="computeroutput"><span class="identifier">mpl</span><span class="special">::</span><span class="identifier">true_</span></code>). The following table outlines
124          the predefined mapping rules from the attribute type to the parser type.
125          These rules are applied recursively to create the parser type which can
126          be used to match input for the given attribute type.
127        </p>
128<div class="informaltable"><table class="table">
129<colgroup>
130<col>
131<col>
132</colgroup>
133<thead><tr>
134<th>
135                  <p>
136                    Attribute type
137                  </p>
138                </th>
139<th>
140                  <p>
141                    Parser type
142                  </p>
143                </th>
144</tr></thead>
145<tbody>
146<tr>
147<td>
148                  <p>
149                    <code class="computeroutput"><span class="keyword">char</span></code>, <code class="computeroutput"><span class="keyword">wchar_t</span></code>
150                  </p>
151                </td>
152<td>
153                  <p>
154                    <code class="computeroutput"><span class="identifier">standard</span><span class="special">::</span><span class="identifier">char_</span></code>, <code class="computeroutput"><span class="identifier">standard_wide</span><span class="special">::</span><span class="identifier">char_</span></code>
155                  </p>
156                </td>
157</tr>
158<tr>
159<td>
160                  <p>
161                    <code class="computeroutput"><span class="keyword">short</span></code>, <code class="computeroutput"><span class="keyword">int</span></code>, <code class="computeroutput"><span class="keyword">long</span></code>
162                  </p>
163                </td>
164<td>
165                  <p>
166                    <code class="computeroutput"><span class="identifier">short_</span></code>, <code class="computeroutput"><span class="identifier">int_</span></code>, <code class="computeroutput"><span class="identifier">long_</span></code>
167                  </p>
168                </td>
169</tr>
170<tr>
171<td>
172                  <p>
173                    <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">short</span></code>,
174                    <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">int</span></code>,
175                    <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span></code>
176                  </p>
177                </td>
178<td>
179                  <p>
180                    <code class="computeroutput"><span class="identifier">ushort_</span></code>, <code class="computeroutput"><span class="identifier">uint_</span></code>, <code class="computeroutput"><span class="identifier">ulong_</span></code>
181                  </p>
182                </td>
183</tr>
184<tr>
185<td>
186                  <p>
187                    <code class="computeroutput"><span class="keyword">float</span></code>, <code class="computeroutput"><span class="keyword">double</span></code>, <code class="computeroutput"><span class="keyword">long</span>
188                    <span class="keyword">double</span></code>
189                  </p>
190                </td>
191<td>
192                  <p>
193                    <code class="computeroutput"><span class="identifier">float_</span></code>, <code class="computeroutput"><span class="identifier">double_</span></code>, <code class="computeroutput"><span class="identifier">long_double</span></code>
194                  </p>
195                </td>
196</tr>
197<tr>
198<td>
199                  <p>
200                    <code class="computeroutput"><span class="keyword">long</span> <span class="keyword">long</span></code>,
201                    <code class="computeroutput"><span class="keyword">unsigned</span> <span class="keyword">long</span>
202                    <span class="keyword">long</span></code>
203                  </p>
204                </td>
205<td>
206                  <p>
207                    <code class="computeroutput"><span class="identifier">long_long</span></code>, <code class="computeroutput"><span class="identifier">ulong_long</span></code>
208                  </p>
209                </td>
210</tr>
211<tr>
212<td>
213                  <p>
214                    <code class="computeroutput"><span class="keyword">bool</span></code>
215                  </p>
216                </td>
217<td>
218                  <p>
219                    <code class="computeroutput"><span class="identifier">bool_</span></code>
220                  </p>
221                </td>
222</tr>
223<tr>
224<td>
225                  <p>
226                    Any (STL) container
227                  </p>
228                </td>
229<td>
230                  <p>
231                    Kleene Star (unary <code class="computeroutput"><span class="char">'*'</span></code>)
232                  </p>
233                </td>
234</tr>
235<tr>
236<td>
237                  <p>
238                    Any Fusion sequence
239                  </p>
240                </td>
241<td>
242                  <p>
243                    Sequence operator (<code class="computeroutput"><span class="char">'&gt;&gt;'</span></code>)
244                  </p>
245                </td>
246</tr>
247<tr>
248<td>
249                  <p>
250                    <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">optional</span><span class="special">&lt;&gt;</span></code>
251                  </p>
252                </td>
253<td>
254                  <p>
255                    Optional operator (unary <code class="computeroutput"><span class="char">'-'</span></code>)
256                  </p>
257                </td>
258</tr>
259<tr>
260<td>
261                  <p>
262                    <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">variant</span><span class="special">&lt;&gt;</span></code>
263                  </p>
264                </td>
265<td>
266                  <p>
267                    Alternative operator (<code class="computeroutput"><span class="char">'|'</span></code>)
268                  </p>
269                </td>
270</tr>
271</tbody>
272</table></div>
273<p>
274          It is possible to add support for any custom data type by implementing
275          a specialization of the customization point <a class="link" href="../../advanced/customize/auto/create_parser.html" title="Define a Custom Attribute Mapping for a Parser"><code class="computeroutput"><span class="identifier">traits</span><span class="special">::</span><span class="identifier">create_parser</span></code></a>. This customization
276          can be used also to redefined any of the predefined mappings.
277        </p>
278<h6>
279<a name="spirit.qi.reference.auto.h6"></a>
280          <span class="phrase"><a name="spirit.qi.reference.auto.attributes"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.attributes">Attributes</a>
281        </h6>
282<div class="informaltable"><table class="table">
283<colgroup>
284<col>
285<col>
286</colgroup>
287<thead><tr>
288<th>
289                  <p>
290                    Expression
291                  </p>
292                </th>
293<th>
294                  <p>
295                    Attribute
296                  </p>
297                </th>
298</tr></thead>
299<tbody><tr>
300<td>
301                  <p>
302                    <code class="computeroutput"><span class="identifier">auto_</span></code>
303                  </p>
304                </td>
305<td>
306                  <p>
307                    <code class="computeroutput"><span class="identifier">hold_any</span></code>
308                  </p>
309                </td>
310</tr></tbody>
311</table></div>
312<div class="important"><table border="0" summary="Important">
313<tr>
314<td rowspan="2" align="center" valign="top" width="25"><img alt="[Important]" src="../../../images/important.png"></td>
315<th align="left">Important</th>
316</tr>
317<tr><td align="left" valign="top"><p>
318            The attribute type <code class="computeroutput"><span class="identifier">hold_any</span></code>
319            exposed by the <code class="computeroutput"><span class="identifier">auto_</span></code>
320            parser is semantically and syntactically equivalent to the type implemented
321            by <a href="../../../../../../../libs/any/index.html" target="_top">Boost.Any</a>. It has
322            been added to <span class="emphasis"><em>Spirit</em></span> as it has better a performance
323            and a smaller footprint if compared to <a href="../../../../../../../libs/any/index.html" target="_top">Boost.Any</a>.
324          </p></td></tr>
325</table></div>
326<h6>
327<a name="spirit.qi.reference.auto.h7"></a>
328          <span class="phrase"><a name="spirit.qi.reference.auto.complexity"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.complexity">Complexity</a>
329        </h6>
330<div class="blockquote"><blockquote class="blockquote"><p>
331            The complexity of the <code class="computeroutput"><span class="identifier">auto_</span></code>
332            parser depends on the supplied attribute type. Each attribute type results
333            in a different parser type to be instantiated which defines the overall
334            complexity.
335          </p></blockquote></div>
336<h6>
337<a name="spirit.qi.reference.auto.h8"></a>
338          <span class="phrase"><a name="spirit.qi.reference.auto.example"></a></span><a class="link" href="auto.html#spirit.qi.reference.auto.example">Example</a>
339        </h6>
340<div class="note"><table border="0" summary="Note">
341<tr>
342<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../images/note.png"></td>
343<th align="left">Note</th>
344</tr>
345<tr><td align="left" valign="top"><p>
346            The test harness for the example(s) below is presented in the <a class="link" href="basics.html#spirit.qi.reference.basics.examples">Basics
347            Examples</a> section.
348          </p></td></tr>
349</table></div>
350<p>
351          Some includes:
352        </p>
353<p>
354</p>
355<pre class="programlisting"><span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">support_utree</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
356<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">qi</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
357<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_core</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
358<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">spirit</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">phoenix_operator</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
359<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">fusion</span><span class="special">/</span><span class="identifier">include</span><span class="special">/</span><span class="identifier">adapt_struct</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
360<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">assert</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
361<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">boost</span><span class="special">/</span><span class="identifier">predef</span><span class="special">/</span><span class="identifier">other</span><span class="special">/</span><span class="identifier">endian</span><span class="special">.</span><span class="identifier">h</span><span class="special">&gt;</span>
362<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">iostream</span><span class="special">&gt;</span>
363<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">string</span><span class="special">&gt;</span>
364<span class="preprocessor">#include</span> <span class="special">&lt;</span><span class="identifier">cstdlib</span><span class="special">&gt;</span>
365</pre>
366<p>
367        </p>
368<p>
369          Some using declarations:
370        </p>
371<p>
372</p>
373<pre class="programlisting"><span class="keyword">using</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">qi</span><span class="special">::</span><span class="identifier">auto_</span><span class="special">;</span>
374</pre>
375<p>
376        </p>
377<p>
378          And a class definition used in the examples:
379        </p>
380<p>
381</p>
382<pre class="programlisting"><span class="comment">// a simple complex number representation z = a + bi</span>
383<span class="keyword">struct</span> <span class="identifier">complex</span>
384<span class="special">{</span>
385    <span class="identifier">complex</span> <span class="special">(</span><span class="keyword">double</span> <span class="identifier">a</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">,</span> <span class="keyword">double</span> <span class="identifier">b</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">)</span>
386      <span class="special">:</span> <span class="identifier">a</span><span class="special">(</span><span class="identifier">a</span><span class="special">),</span> <span class="identifier">b</span><span class="special">(</span><span class="identifier">b</span><span class="special">)</span>
387    <span class="special">{}</span>
388
389    <span class="keyword">double</span> <span class="identifier">a</span><span class="special">;</span>
390    <span class="keyword">double</span> <span class="identifier">b</span><span class="special">;</span>
391<span class="special">};</span>
392</pre>
393<p>
394        </p>
395<p>
396          The following construct is required to allow the <code class="computeroutput"><span class="identifier">complex</span></code>
397          data structure to be utilized as a <a href="../../../../../../../libs/fusion/doc/html/index.html" target="_top">Boost.Fusion</a>
398          sequence. This is required as we will emit output for this data structure
399          with a <span class="emphasis"><em>Spirit.Qi</em></span> sequence: <code class="computeroutput"><span class="char">'{'</span>
400          <span class="special">&gt;&gt;</span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">&gt;&gt;</span> <span class="char">','</span> <span class="special">&gt;&gt;</span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">&gt;&gt;</span> <span class="char">'}'</span></code>.
401        </p>
402<p>
403</p>
404<pre class="programlisting"><span class="identifier">BOOST_FUSION_ADAPT_STRUCT</span><span class="special">(</span>
405    <span class="identifier">complex</span><span class="special">,</span>
406    <span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">a</span><span class="special">)</span>
407    <span class="special">(</span><span class="keyword">double</span><span class="special">,</span> <span class="identifier">b</span><span class="special">)</span>
408<span class="special">)</span>
409</pre>
410<p>
411        </p>
412<p>
413          We add a specialization for the create_parser customization point defining
414          a custom output format for the complex type. Generally, any specialization
415          for create_parser is expected to return the proto expression to be used
416          to match input for the type the customization point has been specialized
417          for.
418        </p>
419<p>
420          We need to utilize <code class="computeroutput"><span class="identifier">proto</span><span class="special">::</span><span class="identifier">deep_copy</span></code>
421          as the expression contains literals (the <code class="computeroutput"><span class="char">'{'</span></code>,
422          <code class="computeroutput"><span class="char">','</span></code>, and <code class="computeroutput"><span class="char">'}'</span></code>)
423          which normally get embedded in the proto expression by reference only.
424          The deep copy converts the proto tree to hold this by value. The deep copy
425          operation can be left out for simpler proto expressions (not containing
426          references to temporaries). Alternatively you could use the <code class="computeroutput"><span class="identifier">proto</span><span class="special">::</span><span class="identifier">make_expr</span></code> facility to build the required
427          proto expression.
428        </p>
429<p>
430</p>
431<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">boost</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">spirit</span> <span class="special">{</span> <span class="keyword">namespace</span> <span class="identifier">traits</span>
432<span class="special">{</span>
433    <span class="keyword">template</span> <span class="special">&lt;&gt;</span>
434    <span class="keyword">struct</span> <span class="identifier">create_parser</span><span class="special">&lt;</span><span class="identifier">complex</span><span class="special">&gt;</span>
435    <span class="special">{</span>
436        <span class="keyword">typedef</span> <span class="identifier">proto</span><span class="special">::</span><span class="identifier">result_of</span><span class="special">::</span><span class="identifier">deep_copy</span><span class="special">&lt;</span>
437            <span class="identifier">BOOST_TYPEOF</span><span class="special">(</span><span class="char">'{'</span> <span class="special">&gt;&gt;</span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">&gt;&gt;</span> <span class="char">','</span> <span class="special">&gt;&gt;</span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">&gt;&gt;</span> <span class="char">'}'</span><span class="special">)</span>
438        <span class="special">&gt;::</span><span class="identifier">type</span> <span class="identifier">type</span><span class="special">;</span>
439
440        <span class="keyword">static</span> <span class="identifier">type</span> <span class="identifier">call</span><span class="special">()</span>
441        <span class="special">{</span>
442            <span class="keyword">return</span> <span class="identifier">proto</span><span class="special">::</span><span class="identifier">deep_copy</span><span class="special">(</span>
443                <span class="char">'{'</span> <span class="special">&gt;&gt;</span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">&gt;&gt;</span> <span class="char">','</span> <span class="special">&gt;&gt;</span> <span class="identifier">qi</span><span class="special">::</span><span class="identifier">double_</span> <span class="special">&gt;&gt;</span> <span class="char">'}'</span><span class="special">);</span>
444        <span class="special">}</span>
445    <span class="special">};</span>
446<span class="special">}}}</span>
447</pre>
448<p>
449        </p>
450<p>
451          Some usage examples of <code class="computeroutput"><span class="identifier">auto_</span></code>
452          parsers:
453        </p>
454<p>
455          Parse a simple integer using the generated parser component <code class="computeroutput"><span class="identifier">int_</span></code>:
456        </p>
457<p>
458</p>
459<pre class="programlisting"><span class="keyword">int</span> <span class="identifier">i</span> <span class="special">=</span> <span class="number">0</span><span class="special">;</span>
460<span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"123"</span><span class="special">,</span> <span class="identifier">auto_</span><span class="special">,</span> <span class="identifier">i</span><span class="special">);</span>
461<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">i</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>                    <span class="comment">// prints: 123</span>
462</pre>
463<p>
464        </p>
465<p>
466          Parse an instance of the <code class="computeroutput"><span class="identifier">complex</span></code>
467          data type as defined above using the parser as generated by the defined
468          customization point:
469        </p>
470<p>
471</p>
472<pre class="programlisting"><span class="identifier">complex</span> <span class="identifier">c</span><span class="special">;</span>
473<span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"{1.2,2.4}"</span><span class="special">,</span> <span class="identifier">auto_</span><span class="special">,</span> <span class="identifier">c</span><span class="special">);</span>
474<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">a</span> <span class="special">&lt;&lt;</span> <span class="string">","</span> <span class="special">&lt;&lt;</span> <span class="identifier">c</span><span class="special">.</span><span class="identifier">b</span> <span class="special">&lt;&lt;</span> <span class="identifier">std</span><span class="special">::</span><span class="identifier">endl</span><span class="special">;</span>    <span class="comment">// prints: 1.2,2.4</span>
475</pre>
476<p>
477        </p>
478</div>
479<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
480<td align="left"></td>
481<td align="right"><div class="copyright-footer">Copyright © 2001-2011 Joel de Guzman, Hartmut Kaiser<p>
482        Distributed under the Boost Software License, Version 1.0. (See accompanying
483        file LICENSE_1_0.txt or copy at <a href="http://www.boost.org/LICENSE_1_0.txt" target="_top">http://www.boost.org/LICENSE_1_0.txt</a>)
484      </p>
485</div></td>
486</tr></table>
487<hr>
488<div class="spirit-nav">
489<a accesskey="p" href="action.html"><img src="../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../reference.html"><img src="../../../../../../../doc/src/images/up.png" alt="Up"></a><a accesskey="h" href="../../../index.html"><img src="../../../../../../../doc/src/images/home.png" alt="Home"></a><a accesskey="n" href="auxiliary.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
490</div>
491</body>
492</html>
493