Hi,

I want a grammar B which parses a comma-separated list of expressions
matching another grammar A and returning a mpl::vector of expressions
transformed using A. Something like:
(AExpr, AExpr, ...).

I managed to do it this way:

struct A...

template <class T>
struct make_vector
{
    typedef boost::mpl::vector<T> type;
};

struct B
   : proto::or_<
        proto::when <
                    A,
                    make_vector<A(proto::_)>()
        >,
        proto::when <
                    proto::comma<B,A>,
                    boost::mpl::push_back<
                        B(proto::_left),
                        A(proto::_right) >()
        >
   >
{};

This seems to work but shouts for a fold so I tried:

struct B
   : proto::when <
          proto::comma< A,proto::vararg<A> >, // => probably wrong
          proto::fold_tree<
              proto::_
            , ::boost::mpl::vector<>()
            , ::boost::mpl::push_back<proto::_state, A(proto::_) >()
           >
      >
{};


This seems to work in most cases (I suppose by sheer luck) but doesn't
parse correctly if no comma at all: (AExpr)
So I suppose that at least the first part of when is wrong.
Any idea how to make it work?

Thanks,

Christophe
_______________________________________________
proto mailing list
[email protected]
http://lists.boost.org/mailman/listinfo.cgi/proto

Reply via email to