blob: a262d102d83fa5e7fbd43f20bc7fff3ab4439ca3 [file] [log] [blame]
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=US-ASCII">
<title>Attribute (attr)</title>
<link rel="stylesheet" href="../../../../../../../../doc/src/boostbook.css" type="text/css">
<meta name="generator" content="DocBook XSL Stylesheets V1.75.0">
<link rel="home" href="../../../../index.html" title="Spirit 2.4.1">
<link rel="up" href="../auxiliary.html" title="Auxiliary">
<link rel="prev" href="../auxiliary.html" title="Auxiliary">
<link rel="next" href="attr_cast.html" title="Attribute Transformation Pseudo Generator (attr_cast)">
</head>
<body bgcolor="white" text="black" link="#0000FF" vlink="#840084" alink="#0000FF">
<table cellpadding="2" width="100%"><tr>
<td valign="top"><img alt="Boost C++ Libraries" width="277" height="86" src="../../../../../../../../boost.png"></td>
<td align="center"><a href="../../../../../../../../index.html">Home</a></td>
<td align="center"><a href="../../../../../../../../libs/libraries.htm">Libraries</a></td>
<td align="center"><a href="http://www.boost.org/users/people.html">People</a></td>
<td align="center"><a href="http://www.boost.org/users/faq.html">FAQ</a></td>
<td align="center"><a href="../../../../../../../../more/index.htm">More</a></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../auxiliary.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../auxiliary.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="attr_cast.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
<div class="section">
<div class="titlepage"><div><div><h5 class="title">
<a name="spirit.qi.reference.auxiliary.attr"></a><a class="link" href="attr.html" title="Attribute (attr)">Attribute (<code class="computeroutput"><span class="identifier">attr</span></code>)</a>
</h5></div></div></div>
<a name="spirit.qi.reference.auxiliary.attr.description"></a><h6>
<a name="id861507"></a>
<a class="link" href="attr.html#spirit.qi.reference.auxiliary.attr.description">Description</a>
</h6>
<p>
The Attribute parser does not consume any input, for this reason it always
matches an empty string and always succeeds. It's purpose is to expose
its specified parameter as an attribute.
</p>
<a name="spirit.qi.reference.auxiliary.attr.header"></a><h6>
<a name="id861524"></a>
<a class="link" href="attr.html#spirit.qi.reference.auxiliary.attr.header">Header</a>
</h6>
<pre class="programlisting"><span class="comment">// forwards to &lt;boost/spirit/home/qi/auxiliary/attr.hpp&gt;
</span><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_attr</span><span class="special">.</span><span class="identifier">hpp</span><span class="special">&gt;</span>
</pre>
<p>
Also, see <a class="link" href="../../../structure/include.html" title="Include">Include Structure</a>.
</p>
<a name="spirit.qi.reference.auxiliary.attr.namespace"></a><h6>
<a name="id861598"></a>
<a class="link" href="attr.html#spirit.qi.reference.auxiliary.attr.namespace">Namespace</a>
</h6>
<div class="informaltable"><table class="table">
<colgroup><col></colgroup>
<thead><tr><th>
<p>
Name
</p>
</th></tr></thead>
<tbody><tr><td>
<p>
<code class="computeroutput"><span class="identifier">boost</span><span class="special">::</span><span class="identifier">spirit</span><span class="special">::</span><span class="identifier">attr</span> <span class="comment">// alias:
boost::spirit::qi::attr</span></code>
</p>
</td></tr></tbody>
</table></div>
<a name="spirit.qi.reference.auxiliary.attr.model_of"></a><h6>
<a name="id861676"></a>
<a class="link" href="attr.html#spirit.qi.reference.auxiliary.attr.model_of">Model of</a>
</h6>
<div class="blockquote"><blockquote class="blockquote"><p>
<a class="link" href="../parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</span></code></a>
</p></blockquote></div>
<div class="variablelist">
<p class="title"><b>Notation</b></p>
<dl>
<dt><span class="term"><code class="computeroutput"><span class="identifier">a</span></code></span></dt>
<dd><p>
A arbitrary typed constant value, e.g. 0.0, "Hello",
or a variable of arbitrary type or a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy
Argument</a> that evaluates to an arbitrary type.
</p></dd>
<dt><span class="term"><code class="computeroutput"><span class="identifier">A</span></code></span></dt>
<dd><p>
The type of <code class="computeroutput"><span class="identifier">a</span></code> or
if it is a <a class="link" href="../basics.html#spirit.qi.reference.basics.lazy_argument">Lazy
Argument</a>, its return type.
</p></dd>
</dl>
</div>
<a name="spirit.qi.reference.auxiliary.attr.expression_semantics"></a><h6>
<a name="id861769"></a>
<a class="link" href="attr.html#spirit.qi.reference.auxiliary.attr.expression_semantics">Expression
Semantics</a>
</h6>
<p>
Semantics of an expression is defined only where it differs from, or
is not defined in <a class="link" href="../parser_concepts/primitiveparser.html" title="PrimitiveParser"><code class="computeroutput"><span class="identifier">PrimitiveParser</span></code></a>.
</p>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Expression
</p>
</th>
<th>
<p>
Semantics
</p>
</th>
</tr></thead>
<tbody><tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">attr</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>
</p>
</td>
<td>
<p>
Create a pseudo parser exposing the current value of <code class="computeroutput"><span class="identifier">a</span></code> as its attribute without
consuming any input at parse time.
</p>
</td>
</tr></tbody>
</table></div>
<a name="spirit.qi.reference.auxiliary.attr.attributes"></a><h6>
<a name="id861873"></a>
<a class="link" href="attr.html#spirit.qi.reference.auxiliary.attr.attributes">Attributes</a>
</h6>
<div class="informaltable"><table class="table">
<colgroup>
<col>
<col>
</colgroup>
<thead><tr>
<th>
<p>
Expression
</p>
</th>
<th>
<p>
Attribute
</p>
</th>
</tr></thead>
<tbody><tr>
<td>
<p>
<code class="computeroutput"><span class="identifier">attr</span><span class="special">(</span><span class="identifier">a</span><span class="special">)</span></code>
</p>
</td>
<td>
<p>
<code class="computeroutput"><span class="identifier">A</span></code>
</p>
</td>
</tr></tbody>
</table></div>
<a name="spirit.qi.reference.auxiliary.attr.complexity"></a><h6>
<a name="id861964"></a>
<a class="link" href="attr.html#spirit.qi.reference.auxiliary.attr.complexity">Complexity</a>
</h6>
<div class="blockquote"><blockquote class="blockquote"><p>
O(1)
</p></blockquote></div>
<p>
The complexity is constant as no input is consumed and no matching is
done.
</p>
<a name="spirit.qi.reference.auxiliary.attr.example"></a><h6>
<a name="id861988"></a>
<a class="link" href="attr.html#spirit.qi.reference.auxiliary.attr.example">Example</a>
</h6>
<div class="note"><table border="0" summary="Note">
<tr>
<td rowspan="2" align="center" valign="top" width="25"><img alt="[Note]" src="../../../../images/note.png"></td>
<th align="left">Note</th>
</tr>
<tr><td align="left" valign="top"><p>
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>
section.
</p></td></tr>
</table></div>
<p>
Some using declarations:
</p>
<p>
</p>
<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>
<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">attr</span><span class="special">;</span>
</pre>
<p>
</p>
<p>
Using <code class="computeroutput"><span class="identifier">attr</span></code> with literals:
</p>
<p>
</p>
<pre class="programlisting"><span class="identifier">std</span><span class="special">::</span><span class="identifier">string</span> <span class="identifier">str</span><span class="special">;</span>
<span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">attr</span><span class="special">(</span><span class="string">"boost"</span><span class="special">),</span> <span class="identifier">str</span><span class="special">);</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">str</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">// will print 'boost'
</span>
<span class="keyword">double</span> <span class="identifier">d</span><span class="special">;</span>
<span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">attr</span><span class="special">(</span><span class="number">1.0</span><span class="special">),</span> <span class="identifier">d</span><span class="special">);</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">d</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">// will print '1.0'
</span></pre>
<p>
</p>
<p>
Using <code class="computeroutput"><span class="identifier">attr</span></code> with <a href="../../../../../../phoenix/doc/html/index.html" target="_top">Phoenix</a> function objects:
</p>
<p>
</p>
<pre class="programlisting"><span class="identifier">d</span> <span class="special">=</span> <span class="number">0.0</span><span class="special">;</span>
<span class="keyword">double</span> <span class="identifier">d1</span> <span class="special">=</span> <span class="number">1.2</span><span class="special">;</span>
<span class="identifier">test_parser_attr</span><span class="special">(</span><span class="string">""</span><span class="special">,</span> <span class="identifier">attr</span><span class="special">(</span><span class="identifier">phx</span><span class="special">::</span><span class="identifier">ref</span><span class="special">(</span><span class="identifier">d1</span><span class="special">)),</span> <span class="identifier">d</span><span class="special">);</span>
<span class="identifier">std</span><span class="special">::</span><span class="identifier">cout</span> <span class="special">&lt;&lt;</span> <span class="identifier">d</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">// will print '1.2'
</span></pre>
<p>
</p>
</div>
<table xmlns:rev="http://www.cs.rpi.edu/~gregod/boost/tools/doc/revision" width="100%"><tr>
<td align="left"></td>
<td align="right"><div class="copyright-footer">Copyright &#169; 2001-2010 Joel de Guzman, Hartmut Kaiser<p>
Distributed under the Boost Software License, Version 1.0. (See accompanying
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>)
</p>
</div></td>
</tr></table>
<hr>
<div class="spirit-nav">
<a accesskey="p" href="../auxiliary.html"><img src="../../../../../../../../doc/src/images/prev.png" alt="Prev"></a><a accesskey="u" href="../auxiliary.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="attr_cast.html"><img src="../../../../../../../../doc/src/images/next.png" alt="Next"></a>
</div>
</body>
</html>