Wrap up

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!