• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Lexer API</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="lex_basics.html" title="Basics">
10<link rel="next" href="primitives.html" title="Token definition Primitives">
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="lex_basics.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="primitives.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.lex.reference.lexer_api"></a><a class="link" href="lexer_api.html" title="Lexer API">Lexer API</a>
28</h4></div></div></div>
29<h6>
30<a name="spirit.lex.reference.lexer_api.h0"></a>
31          <span class="phrase"><a name="spirit.lex.reference.lexer_api.description"></a></span><a class="link" href="lexer_api.html#spirit.lex.reference.lexer_api.description">Description</a>
32        </h6>
33<p>
34          The library provides a couple of free functions to make using the lexer
35          a snap. These functions have three forms. The first form, <code class="computeroutput"><span class="identifier">tokenize</span></code>, simplifies the usage of a stand
36          alone lexer (without parsing). The second form, <code class="computeroutput"><span class="identifier">tokenize_and_parse</span></code>,
37          combines a lexer step with parsing on the token level (without a skipper).
38          The third, <code class="computeroutput"><span class="identifier">tokenize_and_phrase_parse</span></code>,
39          works on the token level as well, but additionally employs a skip parser.
40          The latter two versions can take in attributes by reference that will hold
41          the parsed values on a successful parse.
42        </p>
43<h6>
44<a name="spirit.lex.reference.lexer_api.h1"></a>
45          <span class="phrase"><a name="spirit.lex.reference.lexer_api.header"></a></span><a class="link" href="lexer_api.html#spirit.lex.reference.lexer_api.header">Header</a>
46        </h6>
47<pre class="programlisting"><span class="comment">// forwards to &lt;boost/spirit/home/lex/tokenize_and_parse.hpp&gt;</span>
48<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">lex_tokenize_and_parse</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
49</pre>
50<p>
51          For variadic attributes:
52        </p>
53<pre class="programlisting"><span class="comment">// forwards to &lt;boost/spirit/home/lex/tokenize_and_parse_attr.hpp&gt;</span>
54<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">lex_tokenize_and_parse_attr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
55</pre>
56<p>
57          The variadic attributes version of the API allows one or more attributes
58          to be passed into the API functions. The functions taking two or more attributes
59          are usable when the parser expression is a <a class="link" href="../../qi/reference/operator/sequence.html" title="Sequence Parser (a &gt;&gt; b)">Sequence</a>
60          only. In this case each of the attributes passed have to match the corresponding
61          part of the sequence.
62        </p>
63<p>
64          Also, see <a class="link" href="../../structure/include.html" title="Include">Include Structure</a>.
65        </p>
66<h6>
67<a name="spirit.lex.reference.lexer_api.h2"></a>
68          <span class="phrase"><a name="spirit.lex.reference.lexer_api.namespace"></a></span><a class="link" href="lexer_api.html#spirit.lex.reference.lexer_api.namespace">Namespace</a>
69        </h6>
70<div class="informaltable"><table class="table">
71<colgroup><col></colgroup>
72<thead><tr><th>
73                  <p>
74                    Name
75                  </p>
76                </th></tr></thead>
77<tbody>
78<tr><td>
79                  <p>
80                    <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lex</span><span class="special">::</span><span class="identifier">tokenize</span></code>
81                  </p>
82                </td></tr>
83<tr><td>
84                  <p>
85                    <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lex</span><span class="special">::</span><span class="identifier">tokenize_and_parse</span></code>
86                  </p>
87                </td></tr>
88<tr><td>
89                  <p>
90                    <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lex</span><span class="special">::</span><span class="identifier">tokenize_and_phrase_parse</span></code>
91                  </p>
92                </td></tr>
93<tr><td>
94                  <p>
95                    <code class="computeroutput"><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">skip_flag</span><span class="special">::</span><span class="identifier">postskip</span></code>
96                  </p>
97                </td></tr>
98<tr><td>
99                  <p>
100                    <code class="computeroutput"><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">skip_flag</span><span class="special">::</span><span class="identifier">dont_postskip</span></code>
101                  </p>
102                </td></tr>
103</tbody>
104</table></div>
105<h6>
106<a name="spirit.lex.reference.lexer_api.h3"></a>
107          <span class="phrase"><a name="spirit.lex.reference.lexer_api.synopsis"></a></span><a class="link" href="lexer_api.html#spirit.lex.reference.lexer_api.synopsis">Synopsis</a>
108        </h6>
109<p>
110          The <code class="computeroutput"><span class="identifier">tokenize</span></code> function is
111          one of the main lexer API functions. It simplifies using a lexer to tokenize
112          a given input sequence. It's main purpose is to use the lexer to tokenize
113          all the input.
114        </p>
115<p>
116          Both functions take a pair of iterators spanning the underlying input stream
117          to scan, the lexer object (built from the token definitions), and an (optional)
118          functor being called for each of the generated tokens. If no function object
119          <code class="computeroutput"><span class="identifier">f</span></code> is given, the generated
120          tokens will be discarded.
121        </p>
122<p>
123          The functions return <code class="computeroutput"><span class="keyword">true</span></code>
124          if the scanning of the input succeeded (the given input sequence has been
125          successfully matched by the given token definitions).
126        </p>
127<p>
128          The argument <code class="computeroutput"><span class="identifier">f</span></code> is expected
129          to be a function (callable) object taking a single argument of the token
130          type and returning a bool, indicating whether the tokenization should be
131          canceled. If it returns <code class="computeroutput"><span class="keyword">false</span></code>
132          the function <code class="computeroutput"><span class="identifier">tokenize</span></code> will
133          return <code class="computeroutput"><span class="keyword">false</span></code> as well.
134        </p>
135<p>
136          The <code class="computeroutput"><span class="identifier">initial_state</span></code> argument
137          forces lexing to start with the given lexer state. If this is omitted lexing
138          starts in the <code class="computeroutput"><span class="string">"INITIAL"</span></code>
139          state.
140        </p>
141<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">&gt;</span>
142<span class="keyword">inline</span> <span class="keyword">bool</span>
143<span class="identifier">tokenize</span><span class="special">(</span>
144    <span class="identifier">Iterator</span><span class="special">&amp;</span> <span class="identifier">first</span>
145  <span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">last</span>
146  <span class="special">,</span> <span class="identifier">Lexer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lex</span>
147  <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">::</span><span class="identifier">char_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">initial_state</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>
148
149<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">F</span><span class="special">&gt;</span>
150<span class="keyword">inline</span> <span class="keyword">bool</span>
151<span class="identifier">tokenize</span><span class="special">(</span>
152    <span class="identifier">Iterator</span><span class="special">&amp;</span> <span class="identifier">first</span>
153  <span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">last</span>
154  <span class="special">,</span> <span class="identifier">Lexer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lex</span>
155  <span class="special">,</span> <span class="identifier">F</span> <span class="identifier">f</span>
156  <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">::</span><span class="identifier">char_type</span> <span class="keyword">const</span><span class="special">*</span> <span class="identifier">initial_state</span> <span class="special">=</span> <span class="number">0</span><span class="special">);</span>
157</pre>
158<p>
159          The <code class="computeroutput"><span class="identifier">tokenize_and_parse</span></code>
160          function is one of the main lexer API functions. It simplifies using a
161          lexer as the underlying token source while parsing a given input sequence.
162        </p>
163<p>
164          The functions take a pair of iterators spanning the underlying input stream
165          to parse, the lexer object (built from the token definitions) and a parser
166          object (built from the parser grammar definition). Additionally they may
167          take the attributes for the parser step.
168        </p>
169<p>
170          The function returns <code class="computeroutput"><span class="keyword">true</span></code>
171          if the parsing succeeded (the given input sequence has been successfully
172          matched by the given grammar).
173        </p>
174<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ParserExpr</span><span class="special">&gt;</span>
175<span class="keyword">inline</span> <span class="keyword">bool</span>
176<span class="identifier">tokenize_and_parse</span><span class="special">(</span>
177    <span class="identifier">Iterator</span><span class="special">&amp;</span> <span class="identifier">first</span>
178  <span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">last</span>
179  <span class="special">,</span> <span class="identifier">Lexer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lex</span>
180  <span class="special">,</span> <span class="identifier">ParserExpr</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">expr</span><span class="special">)</span>
181
182<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ParserExpr</span>
183  <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr1</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="keyword">typename</span> <span class="identifier">AttrN</span><span class="special">&gt;</span>
184<span class="keyword">inline</span> <span class="keyword">bool</span>
185<span class="identifier">tokenize_and_parse</span><span class="special">(</span>
186    <span class="identifier">Iterator</span><span class="special">&amp;</span> <span class="identifier">first</span>
187  <span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">last</span>
188  <span class="special">,</span> <span class="identifier">Lexer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lex</span>
189  <span class="special">,</span> <span class="identifier">ParserExpr</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">expr</span>
190  <span class="special">,</span> <span class="identifier">Attr1</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">attr1</span><span class="special">,</span> <span class="identifier">Attr2</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">attr2</span><span class="special">,</span> <span class="special">...,</span> <span class="identifier">AttrN</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">attrN</span><span class="special">);</span>
191</pre>
192<p>
193          The functions <code class="computeroutput"><span class="identifier">tokenize_and_phrase_parse</span></code>
194          take a pair of iterators spanning the underlying input stream to parse,
195          the lexer object (built from the token definitions) and a parser object
196          (built from the parser grammar definition). The additional skipper parameter
197          will be used as the skip parser during the parsing process. Additionally
198          they may take the attributes for the parser step.
199        </p>
200<p>
201          The function returns <code class="computeroutput"><span class="keyword">true</span></code>
202          if the parsing succeeded (the given input sequence has been successfully
203          matched by the given grammar).
204        </p>
205<pre class="programlisting"><span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ParserExpr</span>
206  <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Skipper</span><span class="special">&gt;</span>
207<span class="keyword">inline</span> <span class="keyword">bool</span>
208<span class="identifier">tokenize_and_phrase_parse</span><span class="special">(</span>
209    <span class="identifier">Iterator</span><span class="special">&amp;</span> <span class="identifier">first</span>
210  <span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">last</span>
211  <span class="special">,</span> <span class="identifier">Lexer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lex</span>
212  <span class="special">,</span> <span class="identifier">ParserExpr</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">expr</span>
213  <span class="special">,</span> <span class="identifier">Skipper</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">skipper</span>
214  <span class="special">,</span> <span class="identifier">BOOST_SCOPED_ENUM</span><span class="special">(</span><span class="identifier">skip_flag</span><span class="special">)</span> <span class="identifier">post_skip</span> <span class="special">=</span> <span class="identifier">skip_flag</span><span class="special">::</span><span class="identifier">postskip</span><span class="special">);</span>
215
216<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ParserExpr</span>
217  <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Skipper</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attribute</span><span class="special">&gt;</span>
218<span class="keyword">inline</span> <span class="keyword">bool</span>
219<span class="identifier">tokenize_and_phrase_parse</span><span class="special">(</span>
220    <span class="identifier">Iterator</span><span class="special">&amp;</span> <span class="identifier">first</span>
221  <span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">last</span>
222  <span class="special">,</span> <span class="identifier">Lexer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lex</span>
223  <span class="special">,</span> <span class="identifier">ParserExpr</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">expr</span>
224  <span class="special">,</span> <span class="identifier">Skipper</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">skipper</span>
225  <span class="special">,</span> <span class="identifier">Attribute</span><span class="special">&amp;</span> <span class="identifier">attr</span><span class="special">);</span>
226
227<span class="keyword">template</span> <span class="special">&lt;</span><span class="keyword">typename</span> <span class="identifier">Iterator</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Lexer</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">ParserExpr</span>
228  <span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Skipper</span><span class="special">,</span> <span class="keyword">typename</span> <span class="identifier">Attribute</span><span class="special">&gt;</span>
229<span class="keyword">inline</span> <span class="keyword">bool</span>
230<span class="identifier">tokenize_and_phrase_parse</span><span class="special">(</span>
231    <span class="identifier">Iterator</span><span class="special">&amp;</span> <span class="identifier">first</span>
232  <span class="special">,</span> <span class="identifier">Iterator</span> <span class="identifier">last</span>
233  <span class="special">,</span> <span class="identifier">Lexer</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">lex</span>
234  <span class="special">,</span> <span class="identifier">ParserExpr</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">expr</span>
235  <span class="special">,</span> <span class="identifier">Skipper</span> <span class="keyword">const</span><span class="special">&amp;</span> <span class="identifier">skipper</span>
236  <span class="special">,</span> <span class="identifier">BOOST_SCOPED_ENUM</span><span class="special">(</span><span class="identifier">skip_flag</span><span class="special">)</span> <span class="identifier">post_skip</span><span class="special">,</span> <span class="identifier">Attribute</span><span class="special">&amp;</span> <span class="identifier">attr</span><span class="special">);</span>
237</pre>
238<p>
239          The maximum number of supported arguments is limited by the preprocessor
240          constant <code class="computeroutput"><span class="identifier">SPIRIT_ARGUMENTS_LIMIT</span></code>.
241          This constant defaults to the value defined by the preprocessor constant
242          <code class="computeroutput"><span class="identifier">PHOENIX_LIMIT</span></code> (which in
243          turn defaults to <code class="computeroutput"><span class="number">10</span></code>).
244        </p>
245<div class="note"><table border="0" summary="Note">
246<tr>
247<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../images/note.png"></td>
248<th align="left">Note</th>
249</tr>
250<tr><td align="left" valign="top"><p>
251            The variadic function with two or more attributes internally combine
252            references to all passed attributes into a <code class="computeroutput"><span class="identifier">fusion</span><span class="special">::</span><span class="identifier">vector</span></code>
253            and forward this as a combined attribute to the corresponding one attribute
254            function.
255          </p></td></tr>
256</table></div>
257<p>
258          The <code class="computeroutput"><span class="identifier">tokenize_and_phrase_parse</span></code>
259          functions not taking an explicit <code class="computeroutput"><span class="identifier">skip_flag</span></code>
260          as one of their arguments invoke the passed skipper after a successful
261          match of the parser expression. This can be inhibited by using the other
262          versions of that function while passing <code class="computeroutput"><span class="identifier">skip_flag</span><span class="special">::</span><span class="identifier">dont_postskip</span></code>
263          to the corresponding argument.
264        </p>
265<h6>
266<a name="spirit.lex.reference.lexer_api.h4"></a>
267          <span class="phrase"><a name="spirit.lex.reference.lexer_api.template_parameters"></a></span><a class="link" href="lexer_api.html#spirit.lex.reference.lexer_api.template_parameters">Template parameters</a>
268        </h6>
269<div class="informaltable"><table class="table">
270<colgroup>
271<col>
272<col>
273</colgroup>
274<thead><tr>
275<th>
276                  <p>
277                    Parameter
278                  </p>
279                </th>
280<th>
281                  <p>
282                    Description
283                  </p>
284                </th>
285</tr></thead>
286<tbody>
287<tr>
288<td>
289                  <p>
290                    <code class="computeroutput"><span class="identifier">Iterator</span></code>
291                  </p>
292                </td>
293<td>
294                  <p>
295                    <a href="http://en.cppreference.com/w/cpp/named_req/ForwardIterator" target="_top"><code class="computeroutput"><span class="identifier">ForwardIterator</span></code></a> pointing
296                    to the underlying input sequence to parse.
297                  </p>
298                </td>
299</tr>
300<tr>
301<td>
302                  <p>
303                    <code class="computeroutput"><span class="identifier">Lexer</span></code>
304                  </p>
305                </td>
306<td>
307                  <p>
308                    A lexer (token definition) object.
309                  </p>
310                </td>
311</tr>
312<tr>
313<td>
314                  <p>
315                    <code class="computeroutput"><span class="identifier">F</span></code>
316                  </p>
317                </td>
318<td>
319                  <p>
320                    A function object called for each generated token.
321                  </p>
322                </td>
323</tr>
324<tr>
325<td>
326                  <p>
327                    <code class="computeroutput"><span class="identifier">ParserExpr</span></code>
328                  </p>
329                </td>
330<td>
331                  <p>
332                    An expression that can be converted to a Qi parser.
333                  </p>
334                </td>
335</tr>
336<tr>
337<td>
338                  <p>
339                    <code class="computeroutput"><span class="identifier">Skipper</span></code>
340                  </p>
341                </td>
342<td>
343                  <p>
344                    Parser used to skip white spaces.
345                  </p>
346                </td>
347</tr>
348<tr>
349<td>
350                  <p>
351                    <code class="computeroutput"><span class="identifier">Attr1</span></code>, <code class="computeroutput"><span class="identifier">Attr2</span></code>, ..., <code class="computeroutput"><span class="identifier">AttrN</span></code>
352                  </p>
353                </td>
354<td>
355                  <p>
356                    One or more attributes.
357                  </p>
358                </td>
359</tr>
360</tbody>
361</table></div>
362</div>
363<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
364<td align="left"></td>
365<td align="right"><div class="copyright-footer">Copyright © 2001-2011 Joel de Guzman, Hartmut Kaiser<p>
366        Distributed under the Boost Software License, Version 1.0. (See accompanying
367        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>)
368      </p>
369</div></td>
370</tr></table>
371<hr>
372<div class="spirit-nav">
373<a accesskey="p" href="lex_basics.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="primitives.html"><img src="../../../../../../../doc/src/images/next.png" alt="Next"></a>
374</div>
375</body>
376</html>
377