diff options
| author | omagdy7 <omar.professional8777@gmail.com> | 2023-11-30 17:45:12 +0200 |
|---|---|---|
| committer | omagdy7 <omar.professional8777@gmail.com> | 2023-11-30 17:45:12 +0200 |
| commit | 99da88542e40325925aa22df1b08abc3fded46ee (patch) | |
| tree | 3a54e1f3843ea77c259a0b45cd14464a0a1b4266 /src | |
| parent | 1e3ce70c5c0d757cd2abaef809a211a3430cdd26 (diff) | |
| download | rex-99da88542e40325925aa22df1b08abc3fded46ee.tar.xz rex-99da88542e40325925aa22df1b08abc3fded46ee.zip | |
Added Symbol nfa creation
Diffstat (limited to 'src')
| -rw-r--r-- | src/nfa.rs | 17 |
1 files changed, 12 insertions, 5 deletions
@@ -1,11 +1,16 @@ +use crate::regex::RegexToken; use std::collections::HashMap; -use crate::regex::RegexToken; +#[derive(Debug, Clone, PartialEq)] +pub enum Trans { + Symbol(char), + Epsilon, +} #[derive(Debug, Clone, PartialEq)] struct State { id: usize, - transitions: Vec<(usize, char)>, + transitions: Vec<(usize, Trans)>, } impl State { @@ -42,11 +47,13 @@ impl NFA { id } - pub fn regex_to_nfa(&mut self, input: RegexToken) { + pub fn regex_to_nfa_helper(&mut self, input: RegexToken) -> (usize, usize) { match input { RegexToken::Symbol(ch) => { - let state_1 = self.add_state(); - self.add_transition(state_1, state_1 + 1, ch); + let first = self.add_state(); + let last = self.add_state(); + self.add_transition(first, last, Trans::Symbol(ch)); + (first, last) } RegexToken::Concat((left, right)) => { self.regex_to_nfa(*left); |
