It was measured without warm-up. Subsequent runs on the same file are indeed faster, something like 5 times, so my parser becomes only ~10 times faster. It's for rather small files, around 5 kB, with some real-life code. When I tested much larger files with repeated instructions, the performance difference was 10-15 times in the first run and it wouldn't improve after warming up.
However, a compiler needs to parse a file only once, so the warm-up isn't of much help in this case. And even if we assume the ratio of 10 for large files, it's still significant enough -- consider e.g. parsing a 500 kB library in 1 second vs 10 seconds. Though, of course, Python is not the best tool for parsing files of this size. Anyway, what annoyed me was a 5 kB file taking 0.5 seconds to parse ;-)
> The primary goals of ANTLR are ease of use (left recursion is far from trivial to implement manually [...]
The second article that I've linked to (about Pratt parsers) shows that it's actually surprisingly easy to parse expressions with correct precedence and associativity without any left recursion elimination.