From 93a7ccabdf85ab2733b2b67810750a97bf3509cb Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Tue, 2 Jun 2026 15:52:36 +0200 Subject: refactor enfa for better type safety --- src/parse/regex/dfa.rs | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'src/parse/regex/dfa.rs') diff --git a/src/parse/regex/dfa.rs b/src/parse/regex/dfa.rs index 2fd1935..78888a2 100644 --- a/src/parse/regex/dfa.rs +++ b/src/parse/regex/dfa.rs @@ -3,7 +3,7 @@ use std::collections::HashMap; use super::{ byte_range::ByteRange, - enfa::{ENFA, MultiState}, + enfa::{ENFA, Epsilon, MultiState, Resolved}, }; pub type StateId = usize; @@ -60,17 +60,9 @@ impl DFA { } } -impl From for DFA { - fn from(mut nfa: ENFA) -> Self { - nfa.simplify(); - - for s in nfa.states.iter() { - if s.trans.iter().any(|t| t.is_epsilon()) { - panic!( - "NFA simplification did not remove epsilon transitions - cannot proceed with powerset construction." - ); - } - } +impl From> for DFA { + fn from(mut nfa: ENFA) -> Self { + nfa.remove_unreachable(); let mut multi_states = nfa.all_multi_states(); multi_states.insert(nfa.void_multi_state()); @@ -109,3 +101,9 @@ impl From for DFA { } } } + +impl From> for DFA { + fn from(value: ENFA) -> Self { + Self::from(value.resolve_epsilon()) + } +} -- cgit v1.2.3