From dbca276ac60af603209f62dcc2e0e1fcfbebae11 Mon Sep 17 00:00:00 2001 From: Jonas Maier Date: Tue, 2 Jun 2026 21:44:30 +0200 Subject: better case_match command --- src/parse/regex/dfa.rs | 16 +++++++++++----- src/parse/regex/mod.rs | 4 ++-- 2 files changed, 13 insertions(+), 7 deletions(-) (limited to 'src/parse/regex') diff --git a/src/parse/regex/dfa.rs b/src/parse/regex/dfa.rs index 243176d..0a5c78d 100644 --- a/src/parse/regex/dfa.rs +++ b/src/parse/regex/dfa.rs @@ -34,7 +34,7 @@ impl fmt::Debug for DFA { write!(f, "{chr:?} to {to}, ")?; } - write!(f, "default to {}", s.default_trans)?; + write!(f, "dfl to {}", s.default_trans)?; if s.accept { write!(f, ", accept")?; } @@ -58,14 +58,18 @@ impl DFA { } self.states[state].accept } + + pub fn simplify(&mut self) { + for state in self.states.iter_mut() { + state.trans.retain(|_, to| *to != state.default_trans); + } + } } impl From for DFA { fn from(mut nfa: ENFA) -> Self { nfa.remove_unreachable(); - println!("{nfa:?}"); - let mut multi_states = nfa.all_multi_states(); multi_states.insert(nfa.void_multi_state()); let mut len = 0; @@ -97,9 +101,11 @@ impl From for DFA { } } - Self { + let mut this = Self { start: multi_to_dfa[&nfa.start_multi_state()], states, - } + }; + this.simplify(); + this } } diff --git a/src/parse/regex/mod.rs b/src/parse/regex/mod.rs index 2f7c223..b8dd8ba 100644 --- a/src/parse/regex/mod.rs +++ b/src/parse/regex/mod.rs @@ -3,8 +3,8 @@ use crate::parse::OtherHighlights; use super::{Parse, ParseError, Result}; mod byte_range; -mod dfa; -mod enfa; +pub mod dfa; +pub mod enfa; #[derive(PartialEq, Eq, Debug, Clone, Copy)] pub enum LookDirection { -- cgit v1.2.3