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"><</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 <boost/spirit/home/qi/char/char.hpp></span> 175<span class="preprocessor">#include</span> <span class="special"><</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">></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"><<</span> <span class="identifier">ch</span> <span class="special"><<</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"><<</span> <span class="identifier">ch</span> <span class="special"><<</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