aboutsummaryrefslogtreecommitdiffstats
path: root/src/parse/regex/dfa.rs
diff options
context:
space:
mode:
authorJonas Maier <jonas@x77.dev>2026-06-02 21:44:30 +0200
committerJonas Maier <jonas@x77.dev>2026-06-02 21:44:30 +0200
commitdbca276ac60af603209f62dcc2e0e1fcfbebae11 (patch)
tree7a7f368a1d8caf1d041bbf8327c5ef362115489f /src/parse/regex/dfa.rs
parent5647a7645739fa2aa2dea4fe059b4efe84a278bc (diff)
downloadpish-dbca276ac60af603209f62dcc2e0e1fcfbebae11.tar.gz
better case_match command
Diffstat (limited to 'src/parse/regex/dfa.rs')
-rw-r--r--src/parse/regex/dfa.rs16
1 files changed, 11 insertions, 5 deletions
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<ENFA> 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<ENFA> for DFA {
}
}
- Self {
+ let mut this = Self {
start: multi_to_dfa[&nfa.start_multi_state()],
states,
- }
+ };
+ this.simplify();
+ this
}
}