parser: Update error-recovery mode implemented in gocc #77
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
The following steps are performed when an invalid input symbol is
encountered -
In case the input reaches an invalid symbol, we save its error
attribute and keep discarding all the immediately following error
symbols until a valid symbol is found.
If the action corresponding to the found valid symbol is reduce, it is
performed. In case it is a shift, it is deferred until the saved error
attribute is pushed on the stack.
Once the saved error attribute is pushed on stack, parsing can
resume normally.
It should be noted that the current model cannot report multiple
errors for invalid symbols occurring one after the other. If such a
case arises, the error for only the first invalid symbol is
reported. This is also the case with the currently implemented
error recovery model in gocc.
Demo for error-recovery example
It should be noted that there might be scope of further refactoring the code in this PR. I'll defer doing it until the proposed heuristic has been verified.