Improved submatch tracking by storing all group indices as a part of the state, which is viewed as a 'thread'

This commit is contained in:
2024-12-11 00:16:24 -05:00
parent 00902944f6
commit 437ca2ee57
2 changed files with 49 additions and 44 deletions

3
nfa.go
View File

@@ -33,10 +33,11 @@ type State struct {
except []rune // Only valid if allChars is true - match all characters _except_ the ones in this block. Useful for inverting character classes.
lookaroundRegex string // Only for lookaround states - Contents of the regex that the lookaround state holds
lookaroundNFA *State // Holds the NFA of the lookaroundRegex - if it exists
lookaroundNumCaptureGroups int // Number of capturing groups if current node is a lookaround
lookaroundNumCaptureGroups int // Number of capturing groups in lookaround regex if current node is a lookaround
groupBegin bool // Whether or not the node starts a capturing group
groupEnd bool // Whether or not the node ends a capturing group
groupNum int // Which capturing group the node starts / ends
threadGroups []Group // Assuming that a state is part of a 'thread' in the matching process, this array stores the indices of capturing groups in the current thread. As matches are found for this state, its groups will be copied over.
}
// Clones the NFA starting from the given state.