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.