aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoromagdy7 <omar.professional8777@gmail.com>2023-11-30 17:45:58 +0200
committeromagdy7 <omar.professional8777@gmail.com>2023-11-30 17:45:58 +0200
commit49ea3c72602e9935d785f41d00ed79be32f1c218 (patch)
treed169a8bb47cf0fcc5950642e12b652e3cb944c2b /src
parent03ab86649b2ffa00c923d1460fadb906d6d680d5 (diff)
downloadrex-49ea3c72602e9935d785f41d00ed79be32f1c218.tar.xz
rex-49ea3c72602e9935d785f41d00ed79be32f1c218.zip
Added Thompson's union implementation
Diffstat (limited to 'src')
-rw-r--r--src/nfa.rs11
1 files changed, 10 insertions, 1 deletions
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 => {