Years ago I worked on an SML parser that used LR tables, on errors (ie. with no valid transition) it would try to find a symbol to insert&#x2F;delete&#x2F;modify that would allow parsing to continue. It dealt reasonably well with simple errors, though ML syntax is a bit flexible - function application is juxtaposition and it has user-defined infix operators (to deal with them, the parser would resolve reduce-reduce and reduce-shift conflicts dynamically by calling a function at runtime).<p>Code is here, in fact:<p><a href="https:&#x2F;&#x2F;github.com&#x2F;Ravenbrook&#x2F;mlworks&#x2F;blob&#x2F;master&#x2F;src&#x2F;parser&#x2F;_LRparser.sml" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;Ravenbrook&#x2F;mlworks&#x2F;blob&#x2F;master&#x2F;src&#x2F;parser...</a>