diff --git a/src/com/imegumii/Main.java b/src/com/imegumii/Main.java index f67e1c9..d1b5549 100644 --- a/src/com/imegumii/Main.java +++ b/src/com/imegumii/Main.java @@ -99,9 +99,7 @@ public class Main { } - - public static void Thompson() - { + public static void Thompson() { RegExp expr1 = new RegExp("a"); RegExp expr2 = new RegExp("b"); RegExp expr3 = new RegExp("c"); @@ -116,6 +114,29 @@ public class Main { test.printTransitions(); } + public static void Practicum4() { + Character [] characters = {'a', 'b'}; + NDFA myAutomata = new NDFA(characters); + + myAutomata.addTransition(new Transition("0", 'a', "1")); + myAutomata.addTransition(new Transition("0", 'a', "2")); + myAutomata.addTransition(new Transition("1", 'a', "1")); + myAutomata.addTransition(new Transition("1", 'a', "2")); + myAutomata.addTransition(new Transition("2", 'b', "1")); + myAutomata.addTransition(new Transition("2", 'b', "3")); + myAutomata.addTransition(new Transition("3", 'a', "2")); + myAutomata.addTransition(new Transition("3", 'a', "1")); + + myAutomata.defineAsStartState("0"); + myAutomata.defineAsEndState("1"); + System.out.println("De NDFA is "); + myAutomata.printTransitions(); + + System.out.println("DFA is dan "); + myAutomata.toDFA().printTransitions(); + + } + public static void main(String[] args) { // System.out.println("Here my code be"); // com.imegumii.codevandocent.Automata t1 = TestAutomata.getExampleSlide8Lesson2(); @@ -131,6 +152,6 @@ public class Main { // Practicum2(); - Thompson(); + Practicum4(); } } diff --git a/src/com/imegumii/NDFA.java b/src/com/imegumii/NDFA.java index d86d410..600fb7c 100644 --- a/src/com/imegumii/NDFA.java +++ b/src/com/imegumii/NDFA.java @@ -1,6 +1,6 @@ package com.imegumii; -import java.util.SortedSet; +import java.util.*; /** * Created by imegumii on 01/05/2017. @@ -13,4 +13,68 @@ public class NDFA extends Automata { public NDFA(SortedSet symbols) { super(symbols); } + + public SortedSet statesBereikbaarVanaf(T vanaf, char s) { + SortedSet bereikbaar = new TreeSet(); + Iterator> it = this.transistions.iterator(); + + while(it.hasNext()) { + Transition t = it.next(); + + boolean isGelijk = false; + isGelijk = s == t.symbol; + + if (isGelijk && !bereikbaar.contains(t.naarState)) { + bereikbaar.add(t.naarState); + bereikbaar.addAll(statesBereikbaarVanaf(t.naarState, Transition.EPSILON)); + } + } + + return bereikbaar; + } + + public SortedSet statesBereikbaarVanafSymbool(char s) { + SortedSet bereikbareStates = new TreeSet(); + Iterator it = this.states.iterator(); + while (it.hasNext()) { + T state = it.next(); + bereikbareStates.addAll(statesBereikbaarVanaf(state, s)); + } + + return bereikbareStates; + } + + public SortedSet transitie (char c) { + SortedSet bereikbareStates = statesBereikbaarVanafSymbool(c); + if (bereikbareStates.equals(this.states)) { + return this.states; + } else { + return bereikbareStates; + } + } + + public DFA toDFA () { + DFA eindDFA = new DFA(this.symbols); + + SortedSet startSet = new TreeSet(); + T firstState = this.beginStates.first(); + startSet.add(firstState); + startSet.addAll(statesBereikbaarVanaf(firstState, Transition.EPSILON)); + System.out.println("Begin states zijn: "); + startSet.forEach(System.out::println); + + for (T t : startSet) { + eindDFA.defineAsStartState(t); + } + + Queue> kue = new LinkedList<>(); + kue.offer(startSet); + + while (!kue.isEmpty()) { + SortedSet set = kue.poll(); + + } + + return eindDFA; + } } diff --git a/src/com/imegumii/Transition.java b/src/com/imegumii/Transition.java index 0c457f3..f28636c 100644 --- a/src/com/imegumii/Transition.java +++ b/src/com/imegumii/Transition.java @@ -5,6 +5,7 @@ package com.imegumii; */ public class Transition implements Comparable> { public static final char ENDCHAR = '$'; + public static final char EPSILON = 'ε'; public T vanState;