• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1<html>
2<head>
3<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
4<title>Character Parser (char_, lit)</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="../char.html" title="Character Parsers">
9<link rel="prev" href="../char.html" title="Character Parsers">
10<link rel="next" href="char_class.html" title="Character Classification Parsers (alnum, digit, etc.)">
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="../char.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../char.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="char_class.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
24</div>
25<div class="section">
26<div class="titlepage"><div><div><h5 class="title">
27<a name="spirit.qi.reference.char.char"></a><a class="link" href="char.html" title="Character Parser (char_, lit)">Character Parser (<code class="computeroutput"><span class="identifier">char_</span></code>, <code class="computeroutput"><span class="identifier">lit</span></code>)</a>
28</h5></div></div></div>
29<h6>
30<a name="spirit.qi.reference.char.char.h0"></a>
31            <span class="phrase"><a name="spirit.qi.reference.char.char.description"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.description">Description</a>
32          </h6>
33<p>
34            The <code class="computeroutput"><span class="identifier">char_</span></code> parser matches
35            single characters. The <code class="computeroutput"><span class="identifier">char_</span></code>
36            parser has an associated <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
37            Encoding Namespace</a>. This is needed when doing basic operations
38            such as inhibiting case sensitivity and dealing with character ranges.
39          </p>
40<p>
41            There are various forms of <code class="computeroutput"><span class="identifier">char_</span></code>.
42          </p>
43<h6>
44<a name="spirit.qi.reference.char.char.h1"></a>
45            <span class="phrase"><a name="spirit.qi.reference.char.char.char_"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.char_">char_</a>
46          </h6>
47<p>
48            The no argument form of <code class="computeroutput"><span class="identifier">char_</span></code>
49            matches any character in the associated <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
50            Encoding Namespace</a>.
51          </p>
52<pre class="programlisting"><span class="identifier">char_</span>               <span class="comment">// matches any character</span>
53</pre>
54<h6>
55<a name="spirit.qi.reference.char.char.h2"></a>
56            <span class="phrase"><a name="spirit.qi.reference.char.char.char__ch_"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.char__ch_">char_(ch)</a>
57          </h6>
58<p>
59            The single argument form of <code class="computeroutput"><span class="identifier">char_</span></code>
60            (with a character argument) matches the supplied character.
61          </p>
62<pre class="programlisting"><span class="identifier">char_</span><span class="special">(</span><span class="char">'x'</span><span class="special">)</span>          <span class="comment">// matches 'x'</span>
63<span class="identifier">char_</span><span class="special">(</span><span class="identifier">L</span><span class="char">'x'</span><span class="special">)</span>         <span class="comment">// matches L'x'</span>
64<span class="identifier">char_</span><span class="special">(</span><span class="identifier">x</span><span class="special">)</span>            <span class="comment">// matches x (a char)</span>
65</pre>
66<h6>
67<a name="spirit.qi.reference.char.char.h3"></a>
68            <span class="phrase"><a name="spirit.qi.reference.char.char.char__first__last_"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.char__first__last_">char_(first,
69            last)</a>
70          </h6>
71<p>
72            <code class="computeroutput"><span class="identifier">char_</span></code> with two arguments,
73            matches a range of characters.
74          </p>
75<pre class="programlisting"><span class="identifier">char_</span><span class="special">(</span><span class="char">'a'</span><span class="special">,</span><span class="char">'z'</span><span class="special">)</span>      <span class="comment">// alphabetic characters</span>
76<span class="identifier">char_</span><span class="special">(</span><span class="identifier">L</span><span class="char">'0'</span><span class="special">,</span><span class="identifier">L</span><span class="char">'9'</span><span class="special">)</span>    <span class="comment">// digits</span>
77</pre>
78<p>
79            A range of characters is created from a low-high character pair. Such
80            a parser matches a single character that is in the range, including both
81            endpoints. Note, the first character must be <span class="emphasis"><em>before</em></span>
82            the second, according to the underlying <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
83            Encoding Namespace</a>.
84          </p>
85<p>
86            Character mapping is inherently platform dependent. It is not guaranteed
87            in the standard for example that <code class="computeroutput"><span class="char">'A'</span>
88            <span class="special">&lt;</span> <span class="char">'Z'</span></code>,
89            that is why in Spirit2, we purposely attach a specific <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
90            Encoding Namespace</a> (such as ASCII, ISO-8859-1) to the <code class="computeroutput"><span class="identifier">char_</span></code> parser to eliminate such ambiguities.
91          </p>
92<div class="note"><table border="0" summary="Note">
93<tr>
94<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td>
95<th align="left">Note</th>
96</tr>
97<tr><td align="left" valign="top">
98<p>
99              <span class="bold"><strong>Sparse bit vectors</strong></span>
100            </p>
101<p>
102              To accommodate 16/32 and 64 bit characters, the char-set statically
103              switches from a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">bitset</span></code>
104              implementation when the character type is not greater than 8 bits,
105              to a sparse bit/boolean set which uses a sorted vector of disjoint
106              ranges (<code class="computeroutput"><span class="identifier">range_run</span></code>).
107              The set is constructed from ranges such that adjacent or overlapping
108              ranges are coalesced.
109            </p>
110<p>
111              <code class="computeroutput"><span class="identifier">range_runs</span></code> are very
112              space-economical in situations where there are lots of ranges and a
113              few individual disjoint values. Searching is O(log n) where n is the
114              number of ranges.
115            </p>
116</td></tr>
117</table></div>
118<h6>
119<a name="spirit.qi.reference.char.char.h4"></a>
120            <span class="phrase"><a name="spirit.qi.reference.char.char.char__def_"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.char__def_">char_(def)</a>
121          </h6>
122<p>
123            Lastly, when given a string (a plain C string, a <code class="computeroutput"><span class="identifier">std</span><span class="special">::</span><span class="identifier">basic_string</span></code>,
124            etc.), the string is regarded as a char-set definition string following
125            a syntax that resembles posix style regular expression character sets
126            (except that double quotes delimit the set elements instead of square
127            brackets and there is no special negation ^ character). Examples:
128          </p>
129<pre class="programlisting"><span class="identifier">char_</span><span class="special">(</span><span class="string">"a-zA-Z"</span><span class="special">)</span>     <span class="comment">// alphabetic characters</span>
130<span class="identifier">char_</span><span class="special">(</span><span class="string">"0-9a-fA-F"</span><span class="special">)</span>  <span class="comment">// hexadecimal characters</span>
131<span class="identifier">char_</span><span class="special">(</span><span class="string">"actgACTG"</span><span class="special">)</span>   <span class="comment">// DNA identifiers</span>
132<span class="identifier">char_</span><span class="special">(</span><span class="string">"\x7f\x7e"</span><span class="special">)</span>   <span class="comment">// Hexadecimal 0x7F and 0x7E</span>
133</pre>
134<h6>
135<a name="spirit.qi.reference.char.char.h5"></a>
136            <span class="phrase"><a name="spirit.qi.reference.char.char.lit_ch_"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.lit_ch_">lit(ch)</a>
137          </h6>
138<p>
139            <code class="computeroutput"><span class="identifier">lit</span></code>, when passed a single
140            character, behaves like the single argument <code class="computeroutput"><span class="identifier">char_</span></code>
141            except that <code class="computeroutput"><span class="identifier">lit</span></code> does
142            not synthesize an attribute. A plain <code class="computeroutput"><span class="keyword">char</span></code>
143            or <code class="computeroutput"><span class="keyword">wchar_t</span></code> is equivalent
144            to a <code class="computeroutput"><span class="identifier">lit</span></code>.
145          </p>
146<div class="note"><table border="0" summary="Note">
147<tr>
148<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td>
149<th align="left">Note</th>
150</tr>
151<tr><td align="left" valign="top"><p>
152              <code class="computeroutput"><span class="identifier">lit</span></code> is reused by both
153              the <a class="link" href="../string/string.html" title="String Parsers (string, lit)">string parsers</a>
154              and the char parsers. In general, a char parser is created when you
155              pass in a character and a string parser is created when you pass in
156              a string. The exception is when you pass a single element literal string,
157              e.g. <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="string">"x"</span><span class="special">)</span></code>.
158              In this case, we optimize this to create a char parser instead of a
159              string parser.
160            </p></td></tr>
161</table></div>
162<p>
163            Examples:
164          </p>
165<pre class="programlisting"><span class="char">'x'</span>
166<span class="identifier">lit</span><span class="special">(</span><span class="char">'x'</span><span class="special">)</span>
167<span class="identifier">lit</span><span class="special">(</span><span class="identifier">L</span><span class="char">'x'</span><span class="special">)</span>
168<span class="identifier">lit</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span> <span class="comment">// c is a char</span>
169</pre>
170<h6>
171<a name="spirit.qi.reference.char.char.h6"></a>
172            <span class="phrase"><a name="spirit.qi.reference.char.char.header"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.header">Header</a>
173          </h6>
174<pre class="programlisting"><span class="comment">// forwards to &lt;boost/spirit/home/qi/char/char.hpp&gt;</span>
175<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_char_</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
176</pre>
177<p>
178            Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>.
179          </p>
180<h6>
181<a name="spirit.qi.reference.char.char.h7"></a>
182            <span class="phrase"><a name="spirit.qi.reference.char.char.namespace"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.namespace">Namespace</a>
183          </h6>
184<div class="informaltable"><table class="table">
185<colgroup><col></colgroup>
186<thead><tr><th>
187                    <p>
188                      Name
189                    </p>
190                  </th></tr></thead>
191<tbody>
192<tr><td>
193                    <p>
194                      <code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">lit</span> <span class="comment">// alias:
195                      boost::spirit::qi::lit</span></code>
196                    </p>
197                  </td></tr>
198<tr><td>
199                    <p>
200                      <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span></code>
201                    </p>
202                  </td></tr>
203</tbody>
204</table></div>
205<p>
206            In the table above, <code class="computeroutput"><span class="identifier">ns</span></code>
207            represents a <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
208            Encoding Namespace</a>.
209          </p>
210<h6>
211<a name="spirit.qi.reference.char.char.h8"></a>
212            <span class="phrase"><a name="spirit.qi.reference.char.char.model_of"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.model_of">Model
213            of</a>
214          </h6>
215<div class="blockquote"><blockquote class="blockquote"><p>
216              <a class="link" href="../parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</span></code></a>
217            </p></blockquote></div>
218<div class="variablelist">
219<p class="title"><b>Notation</b></p>
220<dl class="variablelist">
221<dt><span class="term"><code class="computeroutput"><span class="identifier">c</span></code>, <code class="computeroutput"><span class="identifier">f</span></code>, <code class="computeroutput"><span class="identifier">l</span></code></span></dt>
222<dd><p>
223                  A literal char, e.g. <code class="computeroutput"><span class="char">'x'</span></code>,
224                  <code class="computeroutput"><span class="identifier">L</span><span class="char">'x'</span></code>
225                  or anything that can be converted to a <code class="computeroutput"><span class="keyword">char</span></code>
226                  or <code class="computeroutput"><span class="keyword">wchar_t</span></code>, or a
227                  <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy Argument</a>
228                  that evaluates to anything that can be converted to a <code class="computeroutput"><span class="keyword">char</span></code> or <code class="computeroutput"><span class="keyword">wchar_t</span></code>.
229                </p></dd>
230<dt><span class="term"><code class="computeroutput"><span class="identifier">ns</span></code></span></dt>
231<dd><p>
232                  A <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
233                  Encoding Namespace</a>.
234                </p></dd>
235<dt><span class="term"><code class="computeroutput"><span class="identifier">cs</span></code></span></dt>
236<dd><p>
237                  A <a class="link" href="../basics.html#spirit.qi.reference.basics.string">String</a>
238                  or a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy
239                  Argument</a> that evaluates to a <a class="link" href="../basics.html#spirit.qi.reference.basics.string">String</a>
240                  that specifies a char-set definition string following a syntax
241                  that resembles posix style regular expression character sets (except
242                  the square brackets and the negation <code class="computeroutput"><span class="special">^</span></code>
243                  character).
244                </p></dd>
245<dt><span class="term"><code class="computeroutput"><span class="identifier">cp</span></code></span></dt>
246<dd><p>
247                  A char parser, a char range parser or a char set parser.
248                </p></dd>
249</dl>
250</div>
251<h6>
252<a name="spirit.qi.reference.char.char.h9"></a>
253            <span class="phrase"><a name="spirit.qi.reference.char.char.expression_semantics"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.expression_semantics">Expression
254            Semantics</a>
255          </h6>
256<p>
257            Semantics of an expression is defined only where it differs from, or
258            is not defined in <a class="link" href="../parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</span></code></a>.
259          </p>
260<div class="informaltable"><table class="table">
261<colgroup>
262<col>
263<col>
264</colgroup>
265<thead><tr>
266<th>
267                    <p>
268                      Expression
269                    </p>
270                  </th>
271<th>
272                    <p>
273                      Semantics
274                    </p>
275                  </th>
276</tr></thead>
277<tbody>
278<tr>
279<td>
280                    <p>
281                      <code class="computeroutput"><span class="identifier">c</span></code>
282                    </p>
283                  </td>
284<td>
285                    <p>
286                      Create char parser from a char, <code class="computeroutput"><span class="identifier">c</span></code>.
287                    </p>
288                  </td>
289</tr>
290<tr>
291<td>
292                    <p>
293                      <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code>
294                    </p>
295                  </td>
296<td>
297                    <p>
298                      Create a char parser from a char, <code class="computeroutput"><span class="identifier">c</span></code>.
299                    </p>
300                  </td>
301</tr>
302<tr>
303<td>
304                    <p>
305                      <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span></code>
306                    </p>
307                  </td>
308<td>
309                    <p>
310                      Create a char parser that matches any character in the <code class="computeroutput"><span class="identifier">ns</span></code> encoding.
311                    </p>
312                  </td>
313</tr>
314<tr>
315<td>
316                    <p>
317                      <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code>
318                    </p>
319                  </td>
320<td>
321                    <p>
322                      Create a char parser with <code class="computeroutput"><span class="identifier">ns</span></code>
323                      encoding from a char, <code class="computeroutput"><span class="identifier">c</span></code>.
324                    </p>
325                  </td>
326</tr>
327<tr>
328<td>
329                    <p>
330                      <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span>
331                      <span class="identifier">l</span><span class="special">)</span></code>
332                    </p>
333                  </td>
334<td>
335                    <p>
336                      Create a char-range parser that matches characters from range
337                      (<code class="computeroutput"><span class="identifier">f</span></code> to <code class="computeroutput"><span class="identifier">l</span></code>, inclusive) with <code class="computeroutput"><span class="identifier">ns</span></code> encoding.
338                    </p>
339                  </td>
340</tr>
341<tr>
342<td>
343                    <p>
344                      <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">cs</span><span class="special">)</span></code>
345                    </p>
346                  </td>
347<td>
348                    <p>
349                      Create a char-set parser with <code class="computeroutput"><span class="identifier">ns</span></code>
350                      encoding from a char-set definition string, <code class="computeroutput"><span class="identifier">cs</span></code>.
351                    </p>
352                  </td>
353</tr>
354<tr>
355<td>
356                    <p>
357                      <code class="computeroutput"><span class="special">~</span><span class="identifier">cp</span></code>
358                    </p>
359                  </td>
360<td>
361                    <p>
362                      Negate <code class="computeroutput"><span class="identifier">cp</span></code>.
363                      The result is a negated char parser that matches any character
364                      in the <code class="computeroutput"><span class="identifier">ns</span></code> encoding
365                      except the characters matched by <code class="computeroutput"><span class="identifier">cp</span></code>.
366                    </p>
367                  </td>
368</tr>
369</tbody>
370</table></div>
371<h6>
372<a name="spirit.qi.reference.char.char.h10"></a>
373            <span class="phrase"><a name="spirit.qi.reference.char.char.attributes"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.attributes">Attributes</a>
374          </h6>
375<div class="informaltable"><table class="table">
376<colgroup>
377<col>
378<col>
379</colgroup>
380<thead><tr>
381<th>
382                    <p>
383                      Expression
384                    </p>
385                  </th>
386<th>
387                    <p>
388                      Attribute
389                    </p>
390                  </th>
391</tr></thead>
392<tbody>
393<tr>
394<td>
395                    <p>
396                      <code class="computeroutput"><span class="identifier">c</span></code>
397                    </p>
398                  </td>
399<td>
400                    <p>
401                      <code class="computeroutput"><span class="identifier">unused</span></code> or if
402                      <code class="computeroutput"><span class="identifier">c</span></code> is a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy Argument</a>,
403                      the character type returned by invoking it.
404                    </p>
405                  </td>
406</tr>
407<tr>
408<td>
409                    <p>
410                      <code class="computeroutput"><span class="identifier">lit</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code>
411                    </p>
412                  </td>
413<td>
414                    <p>
415                      <code class="computeroutput"><span class="identifier">unused</span></code> or if
416                      <code class="computeroutput"><span class="identifier">c</span></code> is a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy Argument</a>,
417                      the character type returned by invoking it.
418                    </p>
419                  </td>
420</tr>
421<tr>
422<td>
423                    <p>
424                      <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span></code>
425                    </p>
426                  </td>
427<td>
428                    <p>
429                      The character type of the <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
430                      Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>.
431                    </p>
432                  </td>
433</tr>
434<tr>
435<td>
436                    <p>
437                      <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">c</span><span class="special">)</span></code>
438                    </p>
439                  </td>
440<td>
441                    <p>
442                      The character type of the <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
443                      Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>.
444                    </p>
445                  </td>
446</tr>
447<tr>
448<td>
449                    <p>
450                      <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">f</span><span class="special">,</span>
451                      <span class="identifier">l</span><span class="special">)</span></code>
452                    </p>
453                  </td>
454<td>
455                    <p>
456                      The character type of the <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
457                      Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>.
458                    </p>
459                  </td>
460</tr>
461<tr>
462<td>
463                    <p>
464                      <code class="computeroutput"><span class="identifier">ns</span><span class="special">::</span><span class="identifier">char_</span><span class="special">(</span><span class="identifier">cs</span><span class="special">)</span></code>
465                    </p>
466                  </td>
467<td>
468                    <p>
469                      The character type of the <a class="link" href="../basics.html#spirit.qi.reference.basics.character_encoding_namespace">Character
470                      Encoding Namespace</a>, <code class="computeroutput"><span class="identifier">ns</span></code>.
471                    </p>
472                  </td>
473</tr>
474<tr>
475<td>
476                    <p>
477                      <code class="computeroutput"><span class="special">~</span><span class="identifier">cp</span></code>
478                    </p>
479                  </td>
480<td>
481                    <p>
482                      The attribute of <code class="computeroutput"><span class="identifier">cp</span></code>.
483                    </p>
484                  </td>
485</tr>
486</tbody>
487</table></div>
488<h6>
489<a name="spirit.qi.reference.char.char.h11"></a>
490            <span class="phrase"><a name="spirit.qi.reference.char.char.complexity"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.complexity">Complexity</a>
491          </h6>
492<div class="blockquote"><blockquote class="blockquote"><p>
493              <span class="bold"><strong>O(N)</strong></span>, except for char-sets with 16-bit
494              (or more) characters (e.g. <code class="computeroutput"><span class="keyword">wchar_t</span></code>).
495              These have <span class="bold"><strong>O(log N)</strong></span> complexity, where
496              N is the number of distinct character ranges in the set.
497            </p></blockquote></div>
498<h6>
499<a name="spirit.qi.reference.char.char.h12"></a>
500            <span class="phrase"><a name="spirit.qi.reference.char.char.example"></a></span><a class="link" href="char.html#spirit.qi.reference.char.char.example">Example</a>
501          </h6>
502<div class="note"><table border="0" summary="Note">
503<tr>
504<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td>
505<th align="left">Note</th>
506</tr>
507<tr><td align="left" valign="top"><p>
508              The test harness for the example(s) below is presented in the <a class="link" href="../basics.html#spirit.qi.reference.basics.examples">Basics Examples</a>
509              section.
510            </p></td></tr>
511</table></div>
512<p>
513            Some using declarations:
514          </p>
515<p>
516</p>
517<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">lit</span><span class="special">;</span>
518<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">ascii</span><span class="special">::</span><span class="identifier">char_</span><span class="special">;</span>
519</pre>
520<p>
521          </p>
522<p>
523            Basic literals:
524          </p>
525<p>
526</p>
527<pre class="programlisting"><span class="identifier">test_parser</span><span class="special">(</span><span class="string">"x"</span><span class="special">,</span> <span class="char">'x'</span><span class="special">);</span>                      <span class="comment">// plain literal</span>
528<span class="identifier">test_parser</span><span class="special">(</span><span class="string">"x"</span><span class="special">,</span> <span class="identifier">lit</span><span class="special">(</span><span class="char">'x'</span><span class="special">));</span>                 <span class="comment">// explicit literal</span>
529<span class="identifier">test_parser</span><span class="special">(</span><span class="string">"x"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="char">'x'</span><span class="special">));</span>               <span class="comment">// ascii::char_</span>
530</pre>
531<p>
532          </p>
533<p>
534            Range:
535          </p>
536<p>
537</p>
538<pre class="programlisting"><span class="keyword">char</span> <span class="identifier">ch</span><span class="special">;</span>
539<span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"5"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="char">'0'</span><span class="special">,</span><span class="char">'9'</span><span class="special">),</span> <span class="identifier">ch</span><span class="special">);</span>  <span class="comment">// ascii::char_ range</span>
540<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">ch</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 '5'</span>
541</pre>
542<p>
543          </p>
544<p>
545            Character set:
546          </p>
547<p>
548</p>
549<pre class="programlisting"><span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">"5"</span><span class="special">,</span> <span class="identifier">char_</span><span class="special">(</span><span class="string">"0-9"</span><span class="special">),</span> <span class="identifier">ch</span><span class="special">);</span>    <span class="comment">// ascii::char_ set</span>
550<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">ch</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 '5'</span>
551</pre>
552<p>
553          </p>
554<p>
555            Lazy char_ using <a href="../../../../../../../../libs/phoenix/doc/html/index.html" target="_top">Boost.Phoenix</a>
556          </p>
557<p>
558</p>
559<pre class="programlisting"><span class="keyword">namespace</span> <span class="identifier">phx</span> <span class="special">=</span> <span class="identifier">boost</span><span class="special">::</span><span class="identifier">phoenix</span><span class="special">;</span>
560<span class="identifier">test_parser</span><span class="special">(</span><span class="string">"x"</span><span class="special">,</span> <span class="identifier">phx</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="char">'x'</span><span class="special">));</span>            <span class="comment">// direct</span>
561<span class="identifier">test_parser</span><span class="special">(</span><span class="string">"5"</span><span class="special">,</span>
562    <span class="identifier">char_</span><span class="special">(</span><span class="identifier">phx</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="char">'0'</span><span class="special">),</span><span class="identifier">phx</span><span class="special">::</span><span class="identifier">val</span><span class="special">(</span><span class="char">'9'</span><span class="special">)));</span>    <span class="comment">// ascii::char_ range</span>
563</pre>
564<p>
565          </p>
566</div>
567<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
568<td align="left"></td>
569<td align="right"><div class="copyright-footer">Copyright © 2001-2011 Joel de Guzman, Hartmut Kaiser<p>
570        Distributed under the Boost Software License, Version 1.0. (See accompanying
571        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>)
572      </p>
573</div></td>
574</tr></table>
575<hr>
576<div class="spirit-nav">
577<a accesskey="p" href="../char.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../char.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="char_class.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
578</div>
579</body>
580</html>
581