>> In theory, it should be >> possible to have any of the following combinations: >> >> impure LALR(1) pull C >> pure LALR(1) pull C >> impure GLR pull C >> pure GLR pull C >> impure LALR(1) push C >> pure LALR(1) push C >> impure GLR push C >> pure GLR push C >> (Now repeat the list for C++.)
In practice, I think nobody cares about impure parsers (i.e., parsers with a single global static state) except for the traditional case (LALR(1) pull C). As far as I'm concerned, we can drop support for impure parsers, except for that special case. Will that help simplify things? I haven't been following the technical details, but as I understand it qthere are the following bits of specialized code. (Let's assume LALR(1) C.) code for push parsers only code for pure pull parsers only code for impure pull parsers only code that's identical in push and pure pull parsers only code that's identical in all three parsers My assumption is that the other cases (e.g., code that's identical in push and impure parsers only) don't occur. If my assumption is right, approximately what percentage of code falls into each category? That will help us design a good way to ifdef our way through this mess.
