Boost logo

Boost :

From: Eric Niebler (eric_at_[hidden])
Date: 2007-04-04 03:18:11

As discussed here recently, Boost.Proto is an expression template (ET)
framework for building domain-specific embedded languages (DSEL). The
purpose of this preliminary submission is to solicit feedback prior to a
full submission (and to buy myself a little time to polish the
docs/tests/examples :-).

<< Marketing Blurb >>

Boost.Proto eases the development of domain-specific embedded languages
(DSELs). Use Proto to define the primitives of your mini-language and
let Proto handle the operator overloading and the construction of the
expression parse tree. Immediately evaluate the expression tree by
passing it a function object. Or transform the expression tree by
defining the meta-grammar of your mini-language, decorated with an
assortment of tree transforms provided by Proto or defined by you. Then
use the meta-grammar to give your users short and readable syntax errors
for invalid expressions! An expression template library developed with
Proto is declarative and readable.

In short, Proto is a DSEL for defining DSELs.

<< Hello, World >>

Here's the required hello world example in proto. It builds an
expression template and evaluates it. (The docs have more interesting

     #include <iostream>
     #include <boost/xpressive/proto/proto.hpp>
     #include <boost/xpressive/proto/context.hpp>
     #include <boost/typeof/std/ostream.hpp>
     using namespace boost;

     proto::terminal< std::ostream & >::type cout_ = { std::cout };

     template< typename Expr >
     void evaluate( Expr const & expr )
         proto::default_context ctx;
         proto::eval(expr, ctx);

     int main()
         evaluate( cout_ << "hello" << ',' << " world" );
         return 0;

<< Documentation (such as it is) >>

<< Download >> at

<< Requirements >>

Tested with Boost RC 1.34 and HEAD.

Feedback is most welcome.

Eric Niebler
Boost Consulting

Boost list run by bdawes at, gregod at, cpdaniel at, john at