Sparse is a semantic parser of source files. It's neither a compiler (although it could be used as a front-end for one) nor a preprocessor (although it contains a preprocessing phase). It is meant to be a small, simple, easy to use library. Its function is to create a semantic parse tree for some arbitrary user for further analysis. It's not a tokenizer, nor is it a generic context-free parser. Context (semantics) is what it's all about: figuring out not just what the grouping of tokens are, but what the types are that the grouping implies.