diff options
| author | omagdy7 <omar.professional8777@gmail.com> | 2023-11-30 17:45:58 +0200 |
|---|---|---|
| committer | omagdy7 <omar.professional8777@gmail.com> | 2023-11-30 17:45:58 +0200 |
| commit | 49ea3c72602e9935d785f41d00ed79be32f1c218 (patch) | |
| tree | d169a8bb47cf0fcc5950642e12b652e3cb944c2b /src/nfa.rs | |
| parent | 03ab86649b2ffa00c923d1460fadb906d6d680d5 (diff) | |
| download | rex-49ea3c72602e9935d785f41d00ed79be32f1c218.tar.xz rex-49ea3c72602e9935d785f41d00ed79be32f1c218.zip | |
Added Thompson's union implementation
Diffstat (limited to 'src/nfa.rs')
| -rw-r--r-- | src/nfa.rs | 11 |
1 files changed, 10 insertions, 1 deletions
@@ -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 => { |
