From 8dbff3c028ed9a441e90b39dfe59ad4124cf6195 Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Tue, 2 Jun 2026 22:05:15 +0200 Subject: negative lookahead seems to work too ?! --- src/parse/regex/enfa.rs | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'src/parse/regex/enfa.rs') diff --git a/src/parse/regex/enfa.rs b/src/parse/regex/enfa.rs index fea2976..b0588ab 100644 --- a/src/parse/regex/enfa.rs +++ b/src/parse/regex/enfa.rs @@ -233,13 +233,12 @@ impl Thread { .into_iter() .map(|t| t.step(enfa, input)) .collect(); - let negatives = self + let negatives: Vec<_> = self .negatives .into_iter() - .map(|t| t.step(enfa, input)) + .flat_map(|t| t.step(enfa, input)) .collect(); let positives = cartesian_product(positives); - let negatives = cartesian_product(negatives); let next_states: Vec = enfa.states[self.state] .trans .iter() @@ -258,15 +257,13 @@ impl Thread { for s in next_states { for p in positives.clone() { - for n in negatives.clone() { - if let Some(thread) = Self::new(enfa, s, p.clone(), n) { - thread.step_epsilon0( - enfa, - ret, - &mut vec![false; enfa.states.len()], - Vec::new(), - ); - } + if let Some(thread) = Self::new(enfa, s, p.clone(), negatives.clone()) { + thread.step_epsilon0( + enfa, + ret, + &mut vec![false; enfa.states.len()], + Vec::new(), + ); } } } -- cgit v1.2.3