Bison currently uses M4 to process parser skeletons before outputting
them. Formerly this processing was done by hand in C code, in Bison,
but this was painful to maintain as we added more functionality. M4
is slow, and scales poorly, but we didn't think efficiency during
parser generation was all that important,
Is GNU M4 slower than it ought to be?
Should we look for people to make it faster?
and we didn't think people
would be generating parsers with millions of states.
Do people really do that? I am surprised. Why?