Deriving parsers from declarative grammars is neat, but tools tend to be so inexpressive you end up writing hideous grammars to compensate
Parsing expression grammars are wonderful… but now you end up re-testing for every keyword before an identifier https://github.com/harc/ohm/blob/master/examples/ecmascript/es5.ohm#L63
In general, context-free grammars seem to be a hammer that we're awkwardly applying everywhere because we don't have a more appropriate tool