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 <boost/spirit/home/lex/tokenize_and_parse.hpp></span> 48<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">lex_tokenize_and_parse</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></span> 49</pre> 50<p> 51 For variadic attributes: 52 </p> 53<pre class="programlisting"><span class="comment">// forwards to <boost/spirit/home/lex/tokenize_and_parse_attr.hpp></span> 54<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">lex_tokenize_and_parse_attr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">></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 >> 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"><</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> 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">&</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">&</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"><</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">></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">&</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">&</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"><</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">></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">&</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">&</span> <span class="identifier">lex</span> 180 <span class="special">,</span> <span class="identifier">ParserExpr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span><span class="special">)</span> 181 182<span class="keyword">template</span> <span class="special"><</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">></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">&</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">&</span> <span class="identifier">lex</span> 189 <span class="special">,</span> <span class="identifier">ParserExpr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> 190 <span class="special">,</span> <span class="identifier">Attr1</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">attr1</span><span class="special">,</span> <span class="identifier">Attr2</span> <span class="keyword">const</span><span class="special">&</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">&</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"><</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">></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">&</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">&</span> <span class="identifier">lex</span> 212 <span class="special">,</span> <span class="identifier">ParserExpr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> 213 <span class="special">,</span> <span class="identifier">Skipper</span> <span class="keyword">const</span><span class="special">&</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"><</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">></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">&</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">&</span> <span class="identifier">lex</span> 223 <span class="special">,</span> <span class="identifier">ParserExpr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> 224 <span class="special">,</span> <span class="identifier">Skipper</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">skipper</span> 225 <span class="special">,</span> <span class="identifier">Attribute</span><span class="special">&</span> <span class="identifier">attr</span><span class="special">);</span> 226 227<span class="keyword">template</span> <span class="special"><</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">></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">&</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">&</span> <span class="identifier">lex</span> 234 <span class="special">,</span> <span class="identifier">ParserExpr</span> <span class="keyword">const</span><span class="special">&</span> <span class="identifier">expr</span> 235 <span class="special">,</span> <span class="identifier">Skipper</span> <span class="keyword">const</span><span class="special">&</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">&</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