The class hierarchy underneath SrcOp is pretty deep but makes sense that,
for example LL1StarBlock is a kind of LL1Loop which is a kind of Choice.
The problem is it's impossible to figure
out how to construct one of these deeply nested objects because of the
long super constructor call chain. Instead, I decided to in-line all of
this and then look for opportunities to re-factor code into functions.
It makes sense to use a class hierarchy to share data fields, but I don't
think it makes sense to factor code using super constructors because
it has too much work to do.