Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Refactor epsilon transitions #129

Merged
merged 9 commits into from
Sep 15, 2023
Merged

Refactor epsilon transitions #129

merged 9 commits into from
Sep 15, 2023

Conversation

nitely
Copy link
Owner

@nitely nitely commented Sep 14, 2023

Remove this. Make NFA a seq[Node] again.

Node.next contains epsilon transitions now, so it becomes @[epsilon_transition_idx, epsilon_transition_idx, matchable_node_idx, epsilon_transition_idx, matchable_node_idx, matchable_node_idx, ...]

It potentially makes better use of CPU cache, or it should not be worse at least, and code is cleaner.

There is a perf regression in regexes like "(\w|\w)(?<=\w+)foo" where prior to this change the lookaround would only get evaluated once (for the first alternation cond) and now it's evaluated for every alternation cond. We could reorder the epsilon transitions to be evaluated after the matchable node like @[matchable_node_idx, epsilon_transition_idx] after. However, regexes where this matter (containing unbounded lookarounds) already run in quadratic time, so meh.

@nitely nitely marked this pull request as draft September 14, 2023 16:27
@nitely nitely marked this pull request as ready for review September 15, 2023 21:17
@nitely nitely merged commit 512cb17 into master Sep 15, 2023
14 checks passed
@nitely nitely deleted the orc_speedup branch September 15, 2023 21:58
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant