From 49ea3c72602e9935d785f41d00ed79be32f1c218 Mon Sep 17 00:00:00 2001 From: omagdy7 Date: Thu, 30 Nov 2023 17:45:58 +0200 Subject: Added Thompson's union implementation --- src/nfa.rs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/nfa.rs b/src/nfa.rs index 1474b46..bb0eeaa 100644 --- a/src/nfa.rs +++ b/src/nfa.rs @@ -63,7 +63,16 @@ impl NFA { self.add_transition(l_last, r_first, Trans::Epsilon); (first, r_last) } - RegexToken::Union(_) => todo!(), + RegexToken::Union((left, right)) => { + let first = self.add_state(); + let (l_first, l_last) = self.regex_to_nfa_helper(*left); + let (r_first, r_last) = self.regex_to_nfa_helper(*right); + self.add_transition(first, l_first, Trans::Epsilon); + self.add_transition(first, r_first, Trans::Epsilon); + let last = self.add_state(); + self.add_transition(l_last, last, Trans::Epsilon); + self.add_transition(r_last, last, Trans::Epsilon); + (first, last) RegexToken::Plus(_) => todo!(), RegexToken::Star(_) => todo!(), RegexToken::Dot => { -- cgit v1.2.3