Changeset 54680


Ignore:
Timestamp:
Jul 5, 2009, 7:00:57 PM (9 years ago)
Author:
Hartmut Kaiser
Message:

Spirit: Added support for accessing the token value from a lexer semantic action

Location:
trunk/boost/spirit/home/lex/lexer/lexertl
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/boost/spirit/home/lex/lexer/lexertl/static_functor_data.hpp

    r54225 r54680  
    3838
    3939        ///////////////////////////////////////////////////////////////////////
    40         template <typename Iterator, typename HasActors, typename HasState>
     40        template <typename Iterator, typename HasActors, typename HasState
     41          , typename TokenValue>
    4142        struct static_data;    // no default specialization
    4243
    4344        ///////////////////////////////////////////////////////////////////////
    4445        //  doesn't support no state and no actors
    45         template <typename Iterator>
    46         struct static_data<Iterator, mpl::false_, mpl::false_>
     46        template <typename Iterator, typename TokenValue>
     47        struct static_data<Iterator, mpl::false_, mpl::false_, TokenValue>
    4748        {
    4849        protected:
     
    5354        public:
    5455            typedef Iterator base_iterator_type;
     56            typedef unused_type token_value_type;
    5557            typedef std::size_t state_type;
    5658            typedef char_type const* state_name_type;
     
    165167            Iterator const& get_last() const { return last_; }
    166168
     169            unused_type value() const { return unused; }
     170
    167171        protected:
    168172            Iterator& first_;
     
    175179        ///////////////////////////////////////////////////////////////////////
    176180        //  doesn't support no actors
    177         template <typename Iterator>
    178         struct static_data<Iterator, mpl::false_, mpl::true_>
    179           : static_data<Iterator, mpl::false_, mpl::false_>
     181        template <typename Iterator, typename TokenValue>
     182        struct static_data<Iterator, mpl::false_, mpl::true_, TokenValue>
     183          : static_data<Iterator, mpl::false_, mpl::false_, TokenValue>
    180184        {
    181185        protected:
    182             typedef static_data<Iterator, mpl::false_, mpl::false_> base_type;
     186            typedef static_data<Iterator, mpl::false_, mpl::false_, TokenValue> base_type;
    183187            typedef typename base_type::char_type char_type;
    184188
    185189        public:
    186190            typedef Iterator base_iterator_type;
     191            typedef unused_type token_value_type;
    187192            typedef typename base_type::state_type state_type;
    188193            typedef typename base_type::state_name_type state_name_type;
     
    243248        ///////////////////////////////////////////////////////////////////////
    244249        //  does support actors, but may have no state
    245         template <typename Iterator, typename HasState>
    246         struct static_data<Iterator, mpl::true_, HasState>
    247           : static_data<Iterator, mpl::false_, HasState>
     250        template <typename Iterator, typename HasState, typename TokenValue>
     251        struct static_data<Iterator, mpl::true_, HasState, TokenValue>
     252          : static_data<Iterator, mpl::false_, HasState, TokenValue>
    248253        {
    249254        public:
     
    252257
    253258        protected:
    254             typedef static_data<Iterator, mpl::false_, HasState> base_type;
     259            typedef static_data<Iterator, mpl::false_, HasState, TokenValue> base_type;
    255260            typedef typename base_type::char_type char_type;
    256261            typedef typename semantic_actions_type::functor_wrapper_type
     
    259264        public:
    260265            typedef Iterator base_iterator_type;
     266            typedef TokenValue token_value_type;
    261267            typedef typename base_type::state_type state_type;
    262268            typedef typename base_type::state_name_type state_name_type;
     
    333339            }
    334340
     341            TokenValue const& value() const
     342            {
     343                return value_;
     344            }
     345            TokenValue& value()
     346            {
     347                return value_;
     348            }
     349            template <typename Value>
     350            void set_value(Value const& val)
     351            {
     352                value_ = val;
     353            }
     354
    335355        protected:
    336356            semantic_actions_type const& actions_;
    337357            Iterator hold_;     // iterator needed to support lex::more()
    338358            bool has_hold_;     // 'true' if hold_ is valid
     359            TokenValue value_;
    339360        };
    340361    }
  • trunk/boost/spirit/home/lex/lexer/lexertl/static_lexer.hpp

    r53791 r54680  
    168168      , typename LexerTables = static_::lexer
    169169      , typename Iterator = typename Token::iterator_type
    170       , typename Functor
    171           = functor<Token, detail::static_data, Iterator, mpl::false_>
     170      , typename Functor = functor<Token, detail::static_data, Iterator>
    172171      , typename TokenSet
    173172          = lex::token_set<static_token_set<Token, LexerTables, Iterator> > >
Note: See TracChangeset for help on using the changeset viewer.