I’m using Elsa/Elkhound for quite some time now to build interactive visualizations and reverse-engineering tools. I could say this was quite successful (see later in this mail)

We started with Elsa around 2006. At that point, Elsa lacked some features, which we had to implement ourselves:

-integration with a preprocessor
-exact line/column info for all AST nodes
-support for recovery from parse errors
-a query API for the delivered AST
-filtering the output and saving it in a compact binary format
-visualization tools for examining the output

Some of these required us to hack/change Elsa/Elkhound. However, I see that both you (in pork) and others (in oink?) have improved Elsa/Elkhound in complementary, but also overlapping, directions.

My main questions would be:

-how can I _clearly_ get an overview of all that was changed into Elsa/Elkhound since mid 2006?
-how is MCPP integrated with ccparse? I simply cannot get it from the code (downloaded pork today). Is it called as an external process? Is it called as a library? Is it simply not called but ccparse expects to receive a preprocessed file from MCPP? Or..?
-how can I retrieve end-locations for the AST nodes (which API)? Is this done for _all_ AST nodes, or only some?

It’d be really nice if I can get an understanding of what happened on your side and match it with what I did myself, and then come back with a potentially improved version for us all.