Accompanying the framework are a couple of test programs that follow up what we have started. There are a some 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) C
c_grammar.cpp An ANSI C parser C test files C programs 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, comprising only 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.
The complete package including the framework, documentation and sample files is available for free download from http://spirit.sourceforge.net/. Spirit is continually being developed. The latest source code and documentation can be found in this site. There is also a mailing list for those who want to ask questions, report bugs, contribute to the project or simply communicate with other Spirit users on parsing or C++ related topics.
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!