📦 jeremygau / tp1_automate

📄 Automate.java · 100 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100import java.util.*;

/**
 * Automate
 *
 */

public class Automate {
    public static void main (String[] args) {
         // création de lettres
         Letter letter1 = new Letter("a");
         Letter letter2 = new Letter("b");
         Letter letter3 = new Letter("c");

         // création d'états
         State state1 = new State("q_1");
         State state2 = new State("q_2");
         State state3 = new State("q_3");

         // Création d'un objet de type States
         States<State> Q = new States<State>();
         Q.addState(state1);
         Q.addState(state2);
         Q.addState(state3);

//         System.out.println(Q.toString());


         //création des transitions
         Transition t1 = new Transition(state1,letter1,state1);
         Transition t2 = new Transition(state1,letter1,state2);
         Transition t3 = new Transition(state1,letter2,state3);
         Transition t4 = new Transition(state3,letter2,state3);
         Transition t5 = new Transition(state3,letter1,state2);

         //création de l'ensemble des  transitions
         Transitions<State> Delta = new Transitions<State>();
         Delta.addTransition(t1);
         Delta.addTransition(t2);
         Delta.addTransition(t3);
         Delta.addTransition(t4);
         Delta.addTransition(t5);

//        //affiche les successeurs par a de l'état q_1
//        States E1 = Delta.successor(state1,letter1);
//        System.out.println(E1.toString());
//
//        //affiche les successeurs par a de l'état q_2
//        States E2 = Delta.successor(state2,letter1);
//        System.out.println(E2.toString());
//
//        //affiche les successeurs par a de l'état q_3
//        States E3 = Delta.successor(state3,letter1);
//        System.out.println(E3.toString());
//
//        //affiche les successeurs par b de {q_1, q_2}
//        HashSet<State> H = new HashSet<State>();
//        H.add(state1);
//        H.add(state2);
//        States<State> S1 = new States<State>(H);
//        States E4 = Delta.successors(S1,letter2);
//        System.out.println(S1.toString());
//        System.out.println(E4.toString());


        HashSet<Letter> alphabet = new HashSet<>(2);
        alphabet.add(letter1);
        alphabet.add(letter2);

        States<State> SetOfInitialStates = new States<State>();
        SetOfInitialStates.addState(state1);

        States<State> SetOfFinalStates = new States<>();
        SetOfFinalStates.addState(state3);

        AFN<State> afn = new AFN<>(alphabet, Q, SetOfInitialStates, SetOfFinalStates, Delta);
        ArrayList<Letter> w = new ArrayList<>(1);
//        w.add(letter2);
//        w.add(letter2);
        w.add(letter1);
        for (int i = 0; i < 100; i++) {
            w.add(letter1);
        }
        w.add(letter2);
        Word word = new Word(w);
//        System.out.println("Recognize " + word + " " + afn.Recognize(word));
//        System.out.println("Has empty language " + afn.EmptyLanguage());
//        System.out.println("Is deteministic " + afn.isDeterministic());
//        System.out.println("Is complete " + afn.isComplete());
//        afn.Complete();
//        System.out.println("Is complete " + afn.isComplete());
        AFN<State> afnMirror = afn.Mirror();
//        System.out.println(afn);
//        System.out.println(afnMirror);
        System.out.println("Reachable states " + afn.Reachable());
//        System.out.println(afnMirror.Coreachable());
        System.out.println("Coreachable states " + afn.Coreachable());
    }
}