PrintContext is produced by the LHS parser and printer, and

consumed by the RHS parser and printer
When parsing/printing a RHS, the PrintContext (which again probably wants to be called ReplacementContext or whatever) has to come from the outside. There's no way Parser can know this stuff ahead of time. See this line of code for example:

https://github.com/regehr/souper/blob/printcontext/lib/Extractor/Solver.cpp#L138