I used Antlr v3 to create a NLP parser for calendar events for iOS and Android. It took longer than expected. iOS + C runtime was opaque, so had to write a tool for debugging. Android + Java runtime overran memory, so had to break into separate grammars. Of course, NLP is not a natural fit. Don't know what problems are fixed by v4.<p>> The most obvious is the lack of recursion: you can’t find a (regular) expression inside another one ...<p>PCRE has some recursion. Here is an example for parsing anything between { }, with counting of inner brackets:<p>'(?>\{(?:[^{}]<i>|(?R))</i>\})|\w+'<p>A C++11 constexpr can make hand coded parsers a lot more readible, allowing token names in case statements. For example , search on "str2int" in the following island parser: <a href="https://github.com/musesum/par" rel="nofollow">https://github.com/musesum/par</a>