
Larry Evans wrote:
On 04/04/2007 02:18 AM, Eric Niebler wrote:
As discussed here recently, Boost.Proto is an expression template (ET) framework for building domain-specific embedded languages (DSEL). The
[snip]
Feedback is most welcome.
proto/libs/xpressive/proto/doc/html/boost_proto/user_s_guide/calculator.html
contains:
The expr<> template makes up the nodes in expression trees. The first template parameter is the node type; in this case, proto::tag::terminal. That means that _1 is a leaf-node in the expression tree. The second template parameter is a list of children types. Terminals will always have only one type in the type list. The last parameter is the number of types in the list. It is deduced from the type list, so you won't need to worry about it.
which suggests a leaf-node can have children. I thought leaf-nodes had no children. What am I missing? OOPS. Maybe a leaf-node, as you're defining it can have no other proto-expressions as children but it can have other types of children. Is that right?
That's right, expr<tag::terminal, ...> is special in that it is the only node type that is allowed to have a non-expr<> as a child. Even though leaf nodes in a tree are special, it simplifies much code to reuse the expr<> type this way, rather than to define a separate terminal<> template. -- Eric Niebler Boost Consulting www.boost-consulting.com