[857] | 1 | /*=============================================================================
|
---|
| 2 | Copyright (c) 2003 Jonathan de Halleux (dehalleux@pelikhan.com)
|
---|
| 3 | http://spirit.sourceforge.net/
|
---|
| 4 |
|
---|
| 5 | Use, modification and distribution is subject to the Boost Software
|
---|
| 6 | License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
|
---|
| 7 | http://www.boost.org/LICENSE_1_0.txt)
|
---|
| 8 | =============================================================================*/
|
---|
| 9 | #ifndef BOOST_SPIRIT_ACTOR_HPP
|
---|
| 10 | #define BOOST_SPIRIT_ACTOR_HPP
|
---|
| 11 |
|
---|
| 12 | #include <boost/spirit/version.hpp>
|
---|
| 13 |
|
---|
| 14 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 15 | //
|
---|
| 16 | // Actors documentation and convention
|
---|
| 17 | //
|
---|
| 18 | // Actors
|
---|
| 19 | //
|
---|
| 20 | // Actors are predefined semantic action functors. They are used to do an
|
---|
| 21 | // action on the parse result if the parser has had a successful match. An
|
---|
| 22 | // example of actor is the append_actor described in the Spirit
|
---|
| 23 | // documentation.
|
---|
| 24 | //
|
---|
| 25 | // The action takes place through a call to the () operator: single argument
|
---|
| 26 | // () operator call for character parsers and two argument (first,last) call
|
---|
| 27 | // for phrase parsers. Actors should implement at least one of the two ()
|
---|
| 28 | // operator.
|
---|
| 29 | //
|
---|
| 30 | // Actor instances are not created direcly since they usually involve a
|
---|
| 31 | // number of template parameters. Instead generator functions ("helper
|
---|
| 32 | // functions") are provided to generate actors according to their arguments.
|
---|
| 33 | // All helper functions have the "_a" suffix. For example, append_actor is
|
---|
| 34 | // created using the append_a function.
|
---|
| 35 | //
|
---|
| 36 | // Policy holder actors and policy actions
|
---|
| 37 | //
|
---|
| 38 | // A lot of actors need to store reference to one or more objects. For
|
---|
| 39 | // example, actions on container need to store a reference to the container.
|
---|
| 40 | // Therefore, this kind of actor have been broken down into
|
---|
| 41 | //
|
---|
| 42 | // - a action policy that does the action (act method),
|
---|
| 43 | // - a policy holder actor that stores the references and feeds the act
|
---|
| 44 | // method.
|
---|
| 45 | //
|
---|
| 46 | // Policy holder actors
|
---|
| 47 | //
|
---|
| 48 | // Policy holder have the following naming convention:
|
---|
| 49 | // <member>_ >> *<member> >> !value >> actor
|
---|
| 50 | // where member are the policy stored member, they can be of type:
|
---|
| 51 | //
|
---|
| 52 | // - ref, a reference,
|
---|
| 53 | // - const_ref, a const reference,
|
---|
| 54 | // - value, by value,
|
---|
| 55 | // - empty, no stored members
|
---|
| 56 | // - !value states if the policy uses the parse result or not.
|
---|
| 57 | //
|
---|
| 58 | // The available policy holder are enumerated below:
|
---|
| 59 | //
|
---|
| 60 | // - empty_actor, nothing stored, feeds parse result
|
---|
| 61 | // - value_actor, 1 object stored by value, feeds value
|
---|
| 62 | // - ref_actor, 1 reference stored, feeds ref
|
---|
| 63 | // - ref_value_actor, 1 reference stored, feeds ref and parse result
|
---|
| 64 | //
|
---|
| 65 | // Doc. convention
|
---|
| 66 | //
|
---|
| 67 | // - ref is a reference to an object stored in a policy holder actor,
|
---|
| 68 | // - value_ref,value1_ref, value2_ref are a const reference stored in a
|
---|
| 69 | // policy holder actor,
|
---|
| 70 | // - value is the parse result in the single argument () operator,
|
---|
| 71 | // - first,last are the parse result in the two argument () operator
|
---|
| 72 | //
|
---|
| 73 | // Actors (generator functions) and quick description
|
---|
| 74 | //
|
---|
| 75 | // - assign_a(ref) assign parse result to ref
|
---|
| 76 | // - assign_a(ref, value_ref) assign value_ref to ref
|
---|
| 77 | // - increment_a(ref) increment ref
|
---|
| 78 | // - decrement_a(ref) decrement ref
|
---|
| 79 | // - push_back_a(ref) push back the parse result in ref
|
---|
| 80 | // - push_back_a(ref, value_ref) push back value_ref in ref
|
---|
| 81 | // - push_front_a(ref) push front the parse result in ref
|
---|
| 82 | // - push_front_a(ref, value_ref) push front value_ref in ref
|
---|
| 83 | // - insert_key_a(ref,value_ref) insert value_ref in ref using the
|
---|
| 84 | // parse result as key
|
---|
| 85 | // - insert_at_a(ref, key_ref) insert the parse result in ref at key_ref
|
---|
| 86 | // - insert_at_a(ref, key_ref insert value_ref in ref at key_ref
|
---|
| 87 | // , value_ref)
|
---|
| 88 | // - assign_key_a(ref, value_ref) assign value_ref in ref using the
|
---|
| 89 | // parse result as key
|
---|
| 90 | // - erase_a(ref, key) erase data at key from ref
|
---|
| 91 | // - clear_a(ref) clears ref
|
---|
| 92 | // - swap_a(aref, bref) swaps aref and bref
|
---|
| 93 | //
|
---|
| 94 | ///////////////////////////////////////////////////////////////////////////////
|
---|
| 95 |
|
---|
| 96 | #include <boost/spirit/actor/ref_actor.hpp>
|
---|
| 97 | #include <boost/spirit/actor/ref_value_actor.hpp>
|
---|
| 98 | #include <boost/spirit/actor/ref_const_ref_actor.hpp>
|
---|
| 99 | #include <boost/spirit/actor/ref_const_ref_value_actor.hpp>
|
---|
| 100 | #include <boost/spirit/actor/ref_const_ref_const_ref_a.hpp>
|
---|
| 101 |
|
---|
| 102 | #include <boost/spirit/actor/assign_actor.hpp>
|
---|
| 103 | #include <boost/spirit/actor/clear_actor.hpp>
|
---|
| 104 | #include <boost/spirit/actor/increment_actor.hpp>
|
---|
| 105 | #include <boost/spirit/actor/decrement_actor.hpp>
|
---|
| 106 | #include <boost/spirit/actor/push_back_actor.hpp>
|
---|
| 107 | #include <boost/spirit/actor/push_front_actor.hpp>
|
---|
| 108 | #include <boost/spirit/actor/erase_actor.hpp>
|
---|
| 109 | #include <boost/spirit/actor/insert_key_actor.hpp>
|
---|
| 110 | #include <boost/spirit/actor/insert_at_actor.hpp>
|
---|
| 111 | #include <boost/spirit/actor/assign_key_actor.hpp>
|
---|
| 112 | #include <boost/spirit/actor/swap_actor.hpp>
|
---|
| 113 |
|
---|
| 114 | #endif
|
---|