aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authoromagdy7 <omar.professional8777@gmail.com>2023-11-30 17:45:12 +0200
committeromagdy7 <omar.professional8777@gmail.com>2023-11-30 17:45:12 +0200
commit99da88542e40325925aa22df1b08abc3fded46ee (patch)
tree3a54e1f3843ea77c259a0b45cd14464a0a1b4266 /src
parent1e3ce70c5c0d757cd2abaef809a211a3430cdd26 (diff)
downloadrex-99da88542e40325925aa22df1b08abc3fded46ee.tar.xz
rex-99da88542e40325925aa22df1b08abc3fded46ee.zip
Added Symbol nfa creation
Diffstat (limited to 'src')
-rw-r--r--src/nfa.rs17
1 files changed, 12 insertions, 5 deletions
diff --git a/src/nfa.rs b/src/nfa.rs
index 6c134fe..685c620 100644
--- a/src/nfa.rs
+++ b/src/nfa.rs
@@ -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);