Accompanying the framework are a couple of test programs that follow up what we have started. There are a few sample and test programs that demonstrate the use and capabilities of the Spirit framework.
calc1.cpp A simple calculator (expression parser only) test (note) calc2.cpp A simple working calculator calc3.cpp Compiler to byte-code and interpreted by a virtual machine calc4.cpp Calculator with variables (using the symbol table) char_actions.cpp Extracting characters demo char_param.cpp Character parametric parser demo chset.cpp Character sets demo (note) calc_debug.cpp The calculator in debugging mode exception_test.cpp Exceptions demo iter_param.cpp Iteration parametric parser demo micro.cpp Numeric parser demo numeric_actions.cpp Numeric semantic actions demo string_extract.cpp Extracting strings demo string_param.cpp String parametric parser demo symbols.cpp Symbol table demo and test Pascal
sg_pascal.cpp A Pascal parser Pascal test files Pascal programs (some have explicit syntax errors) XML
simplexml.cpp A simple XML parser test (note) filexml.cpp XML parser demonstrating the multi_pass iterator xml.cpp A full Unicode capable XML parser XML test files Various (good) XML test files regres1.cpp For stress testing the framework (note) note: these test files include a corresponding *.txt output file. The outputs of the compiled program may be checked against these to ensure that the framework is working as expected.
The framework itself is small. Thse are all header files. There are no external libraries to link to. The <spirit.hpp> file is the master header file that includes all the necessary headers in the framework. The framework does not rely on any code or library except the standard C++ libraries.
I believe there are a couple of new innovations introduced in the Spirit framework worth looking into. The modeling of parsers as hierarchical composite objects coupled with the notion of composition of simple objects to create more complex objects as applied to parsers is one of the first of its kind. Another innovation is the application of template meta-programming techniques, expression templates in particular, to parsing. The abundance of oparators such as parser intersection &, difference -, and xor ^ proves to be quite powerful. Now, we have seen in this version of Spirit the power of dynamic parsing. This is a powerful concept that opens up unique solutions to otherwise difficult parsing problems.
So far we have just scratched the surface of what we can do with the Spirit parser compiler. The framework is continually evolving as more experience is gained and more research is done. We shall see more dynamic parsers. We shall also see more deterministic static parsers. There are still avenues to explore that ultimately lead towards this new frontier. I invite you now to trek this exciting journey with me. We will push C++ to its limits. Have fun!