Slightly altered to protect the guilty, but yes, this is a real example. There are few things more frustrating when converting hand written recursive descent parsers into proper grammars than having to insert arbitrary rules about where newlines can or cannot be. You generally can&#x27;t change the language if there&#x27;s production code out there (and if there isn&#x27;t, why are reverse engineering a grammar?) because changing the semantics will lead to more confusion.<p>You just end up making a grammar with really weird rules about where newlines can or cannot be put, and comments that this should not be changed. Oh, and a BIG test suite.<p>Once you&#x27;ve dealt with the grammar then you&#x27;ll only have bugs in the compiler and runtime semantics to emulate, and language implementations often have an exciting set of those.