Abstract: Smooth integration of domain-specific languages into a general purpose
host language requires absorbing of domain code written in arbitrary
syntax. The integration should cause minimal syntactical and semantic
overhead and introduce minimal dependency on external tools.
In this paper we discuss a DSL integration technique for the C++ programming
language. The solution is based on compile-time parsing of the DSL code.
The parser generator is a C++ template metaprogram reimplementation of a
runtime Haskell parser generator library. The full parsing phase is executed
when the host program is compiled. The library uses only standard C++
language features, thus our solution is highly portable. As a demonstration
of the power of this approach, we present a highly efficient and type-safe
version of printf and the way it can be constructed using our library.
Despite the well known syntactical difficulties of C++ template metaprograms,
building embedded languages using our library leads to self-documenting C++
source code.