Use cache for recursion in grammar.py
to avoid unnecessary retraversal.
#162
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.
I threw a large bnf at
scripts/GE_LR_parser.py
and it failed to complete in a timely manner (8 hours and counting).I investigated a tad and found that it was seemly stalling on the
check_recursion
subfunction.In its preexisting form it did not check if a node/symbol had been traversed, opting to traverse it every time it was encountered.
(I also took a look at teh depth and found it was "stuck" around layer 120+, considering that I am not sure if the original implementation would finish my bnf in my lifetime)
Adding a cache to store and fetch a symbols result allows for each subtree to be traversed only once.
Runtime is near instant now.