I have a recursive ascent code generator with a bunch of optimisations that I wrote about [1,2]; it's a linear-time parser for LR(1) with reduced overhead. I have an RNGLR implementation (a polynomial-time parser for any context-free grammar), that's still a table-based interpreter like more LR-based parsers out there. I've extended that implementation with special code to handle cycles more efficiently. Some day, I'll take some time to write a paper on that and publish it. Currently, I'm trying to combine the two ideas and create a generalised recursive ascent code generator. If I succeed I'll write another blog post again, it's been a year since the last one...
[1]: https://blog.jeffsmits.net/optimising-recursive-ascent/ [2]: https://blog.jeffsmits.net/optimising-recursive-ascent-part-...