Scanning, Parsing, and Rewriting Kit

John Aycock
Department of Computer Science
University of Calgary


SPARK stands for the Scanning, Parsing, and Rewriting Kit. It formerly had no name, and was referred to as the "little language framework." The first version (circa 1998) was described in the paper Compiling Little Languages in Python at the 7th International Python Conference.

SPARK is written in 100% pure Python, and is made available as open source.



Currently, the documentation is in two parts. The distribution contains a copy of both parts.


Problems uncompressing? Some people have downloaded one of the .gz files above, only to have it be un-unzippable. Seems that some browsers do you the favor of automagically uncompressing the file for you, but neglect to rename it! So if GNU Zip complains about the file, check to see if it's already uncompressed.

Projects Using SPARK

These are some projects I know of which have used SPARK, in no particular order. Please let me know of any that I've missed! I've used it for a compiler for Guide, compiling a subset of Java, an experimental type inferencer for Python, and probably a few other things I've forgotten.


People who have helped me out by sending suggestions, patches, and/or large sums of money in small unmarked bills:

Early work on SPARK was supported in part by development of Guide.


SPARK is not affiliated in any manner with any other project or product which uses the name "SPARK", including but not limited to: