Atom Atom feed

A Little C++ To Boost Your Spirit

C++: The Ultimate DSL

Take a look at the following snippet of valid C++ code ...

group = '(' >> expr >> ')';
fact = integer | group;
term = fact >> *( ('*' >> fact) | ('/' >> fact) );
expr = term >> *( ('+' >> term) | ('-' >> term) );

... and tell me C++ is not the perfect language for DSLs! ;=)

Seriously, I copied down the above from Adam Mitz's OCI internal C++ lunch talk about Boost.Spirit yesterday.

Boost.Spirit documentation: Spirit is an object-oriented recursive-descent parser generator framework implemented using template meta-programming techniques. Expression templates allow us to approximate the syntax of Extended Backus-Normal Form (EBNF) completely in C++.

The Spirit framework enables a target grammar to be written exclusively in C++. Inline EBNF grammar specifications can mix freely with other C++ code and, thanks to the generative power of C++ templates, are immediately executable. In retrospect, conventional compiler-compilers or parser-generators have to perform an additional translation step from the source EBNF code to C or C++ code.

As parser generators go, Boost.Spirit is pretty powerful stuff. As an example, Adam redid Mark Volkmann's Math example from the ANTLR 3 talk, ASTs and all.

Geeky as Boost.Spirit may seem, can think of one occasion in past projects where we could have used it instead of coding a recursive descent parser by hand.

Tags :