Pratt parsing and explicit node elision #4
Merged
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.
Fix for #2.
Node elision for rules is now an explicit operation and no longer determined by certain rule patterns. Left recursive rules are now parsed by a Pratt parser.
Migration Guide
The empty node rename operator
@
is no longer allowed. It was previously used to avoid matching certain rule patterns, which is no longer necessary.Operator Precedence
Use the node elision operator for the non-recursive branches.
Before
After
Unconditional Forwarding
Add the elision operator after the rule name.
Before
stmt: for_stmt | while_stmt | expr_stmt | return_stmt ;
After
stmt^: for_stmt | while_stmt | expr_stmt | return_stmt ;
Conditional Forwarding
Add the elision operator after the rule name and create a node explicitly.
Before
After
Right Recursive Forwarding
Use the node elision operator for the non-recursive branches.
Before
After
Maybe Empty
Add the elision operator after the rule name and create a node explicitly.
Before
After