diff --git a/2A/S4/Automates/TP/.idea/misc.xml b/2A/S4/Automates/TP/.idea/misc.xml index 07115cdf15dd408d3affb9240e112578e04abf68..0b86bb30ccd2d26bb7cad6bac556d7834324a58b 100644 --- a/2A/S4/Automates/TP/.idea/misc.xml +++ b/2A/S4/Automates/TP/.idea/misc.xml @@ -1,6 +1,6 @@ <?xml version="1.0" encoding="UTF-8"?> <project version="4"> - <component name="ProjectRootManager" version="2" languageLevel="JDK_17" default="true" project-jdk-name="17" project-jdk-type="JavaSDK"> + <component name="ProjectRootManager" version="2" languageLevel="JDK_21" default="true" project-jdk-name="openjdk-21 (WSL)" project-jdk-type="JavaSDK"> <output url="file://$PROJECT_DIR$/out" /> </component> </project> \ No newline at end of file diff --git a/2A/S4/Automates/TP/src/main/kotlin/Automates/Adresse.kt b/2A/S4/Automates/TP/src/main/kotlin/Automates/Adresse.kt new file mode 100644 index 0000000000000000000000000000000000000000..50d5740ec9d1dbc90d08656aa41ded55380c4956 --- /dev/null +++ b/2A/S4/Automates/TP/src/main/kotlin/Automates/Adresse.kt @@ -0,0 +1,58 @@ +package Automates + +import Etat + +class Adresse() : Automate() { + + init { + var E0 = Etat() + var E1 = Etat() + var E2 = Etat() + var E3 = Etat() + + var chars = arrayOf("a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z", "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", ".", "-", "_") + S = arrayOf<Etat>(E0, E1, E2, E3) + A = arrayOf("@", ";") + A += chars + delta = arrayOf( + arrayOf(E0, chars, E1), + arrayOf(E1, chars, E1), + arrayOf(E1, "@", E2), + arrayOf(E2, chars, E3), + arrayOf(E3, chars, E3), + arrayOf(E3, ";", E0) + ) + s0 = E0 + sf = arrayOf(E3) + init_transitions_by_delta() + } + + override fun run_automate(str : String) : String{ + var etatCourant = s0 + var OK : Boolean = false + for (char in str){ + var charCourant = char.toString() + if(charCourant in A) { + var etatSuivant = etatCourant.donne_suivant(charCourant) + if (etatSuivant != null){ + etatCourant= etatSuivant + OK = false + if (etatCourant in sf) { + OK = true + } + }else{ + OK = false + } + }else{ + OK = false + } + } + if (OK){ + return "OK" + }else{ + return "KO" + } + } + + +} \ No newline at end of file diff --git a/2A/S4/Automates/TP/src/main/kotlin/Automates/Automate.kt b/2A/S4/Automates/TP/src/main/kotlin/Automates/Automate.kt index ac8c911b45c1952932d252277ebc1372ee3f0b00..5ef0230e3e7ae7ef7567340e1cf7426ede34dd3d 100644 --- a/2A/S4/Automates/TP/src/main/kotlin/Automates/Automate.kt +++ b/2A/S4/Automates/TP/src/main/kotlin/Automates/Automate.kt @@ -16,8 +16,15 @@ abstract class Automate (){ for (etat in S){ for (transition in delta){ if (etat == transition[0]){ - key.add(transition[1] as String) - value.add(transition[2] as Etat) + if (transition[1] is Array<*>){ + for (elmt in transition[1] as Array<*>){ + key.add(elmt as String) + value.add(transition[2] as Etat) + } + }else { + key.add(transition[1] as String) + value.add(transition[2] as Etat) + } } } etat.init_transition(key,value) @@ -26,14 +33,13 @@ abstract class Automate (){ } } - fun run_automate(str : String) : String{ + open fun run_automate(str : String) : String{ var etatCourant = s0 - var currentChar : String - - for (index in 0..str.length){ - currentChar = str[index].toString() - if(currentChar in A) { - var etatSuivant = etatCourant.donne_suivant(currentChar) + var charCourant : String + for (char in str){ + charCourant = char.toString() + if(charCourant in A) { + var etatSuivant = etatCourant.donne_suivant(charCourant) if (etatSuivant != null){ etatCourant= etatSuivant if (etatCourant in sf) { diff --git a/2A/S4/Automates/TP/src/main/kotlin/Automates/HHMM.kt b/2A/S4/Automates/TP/src/main/kotlin/Automates/HHMM.kt index c14df0056d2adc051ebee351fbd2f27189cf95b8..0f7a953332d4bcfb1d299a36059f642cd390a441 100644 --- a/2A/S4/Automates/TP/src/main/kotlin/Automates/HHMM.kt +++ b/2A/S4/Automates/TP/src/main/kotlin/Automates/HHMM.kt @@ -2,6 +2,7 @@ package Automates import Etat class HHMM() : Automate() { + init{ var E0 = Etat() var H1 = Etat() @@ -10,32 +11,26 @@ class HHMM() : Automate() { var M1 = Etat() var M2 = Etat() var M = Etat() + + var ZeroToOne = arrayOf("0", "1") + var ZeroToNine = arrayOf("0","1","2","3","4","5","6","7","8","9") + var ZeroToFive = arrayOf("0","1","2","3","4","5") + var ZeroToThree = arrayOf("0", "1", "2", "3") S = arrayOf(E0,H1,H2,H,M1,M2,M) A = arrayOf(":","0","1","2","3","4","5","6","7","8","9") delta = arrayOf( - arrayOf(E0,"0",H1), - arrayOf(E0,"1",H1), - arrayOf(E0,"2",H2), - arrayOf(H,":",M), + arrayOf(E0, ZeroToOne, H1), + arrayOf(E0, "2", H2), + arrayOf(H, ":", M), + arrayOf(H1, ZeroToNine, H), + arrayOf(M2, ZeroToNine, M), + arrayOf(M1, ZeroToFive, M), + arrayOf(H2, ZeroToThree, H) ) - for(etat in S){ - if(etat == H1){ - for(i in 0..9){ - delta += arrayOf(H1,i.toString(),H) - delta += arrayOf(M2,i.toString(),M) - } - }else if(etat == M1){ - for(i in 0..5){ - delta += arrayOf(M1,i.toString(),M) - } - } else if(etat == H2){ - for(i in 0..3){ - delta += arrayOf(H2,i.toString(),H) - } - } - } s0 = E0 sf = arrayOf(M) + init_transitions_by_delta() + } } \ No newline at end of file diff --git a/2A/S4/Automates/TP/src/main/kotlin/Automates/JJMMAAAA.kt b/2A/S4/Automates/TP/src/main/kotlin/Automates/JJMMAAAA.kt index d14a80c2a35c11cd2bcf61c5447191932253749e..e61b44380db6aa9bc64078ee65d9315637f466dd 100644 --- a/2A/S4/Automates/TP/src/main/kotlin/Automates/JJMMAAAA.kt +++ b/2A/S4/Automates/TP/src/main/kotlin/Automates/JJMMAAAA.kt @@ -2,27 +2,79 @@ package Automates import Etat class JJMMAAAA() : Automate() { - init{ + + init { var E0 = Etat() var E1 = Etat() var E2 = Etat() var E3 = Etat() var E4 = Etat() - S = arrayOf(E0,E1,E2,E3,E4) - A = arrayOf(";",":","]","=","-","(",")") + var E5 = Etat() + var E6 = Etat() + var E7 = Etat() + var E8 = Etat() + var E9 = Etat() + var E10 = Etat() + var E11 = Etat() + var E12 = Etat() + var E13 = Etat() + var E14 = Etat() + var E15 = Etat() + var E16 = Etat() + var E17 = Etat() + var E18 = Etat() + var E19 = Etat() + var E20 = Etat() + var E21 = Etat() + var E22 = Etat() + + + var action_list1 = arrayOf("0", "1", "2", "3", "4", "5", "6", "7", "8", "9") + var action_list2 = arrayOf("0", "1", "2", "3", "4", "5", "6", "7", "8") + var action_list3 = arrayOf("0", "1", "2", "3", "4", "5", "6", "7", "8", "9") + var action_list4 = arrayOf("0", "1", "2") + var action_list5 = arrayOf("1", "3", "5", "7", "8") + var action_list6 = arrayOf("0", "2") + var action_list7 = arrayOf("1", "3", "4", "5", "6", "7", "8", "9") + + S = arrayOf(E0, E1, E2, E3, E4, E5, E6, E7, E8, E9, E10, E11, E12, E13, E14, E15, E16, E17, E18, E19, E20, E21, E22) + A = arrayOf("/", "0", "1", "2", "3", "4", "5", "6", "7", "8", "9") delta = arrayOf( - arrayOf(E0,":",E1), - arrayOf(E0,";",E2), - arrayOf(E0,"]",E2), - arrayOf(E1,"=",E3), - arrayOf(E1,"-",E3), - arrayOf(E1,"(",E4), - arrayOf(E1,")",E4), - arrayOf(E2,"-",E3), - arrayOf(E3,")",E4) + arrayOf(E0, "0", E4), + arrayOf(E0, "1", E3), + arrayOf(E0, "2", E2), + arrayOf(E0, "3", E1), + arrayOf(E1, "1", E7), + arrayOf(E1, "0", E6), + arrayOf(E2, "9", E6), + arrayOf(E2, action_list2, E5), + arrayOf(E3, action_list1, E5), + arrayOf(E4, action_list3, E5), + arrayOf(E7, "/", E8), + arrayOf(E6, "/", E9), + arrayOf(E5, "/", E10), + arrayOf(E8, "0", E11), + arrayOf(E8, "1", E12), + arrayOf(E9, "0", E13), + arrayOf(E9, "1", E14), + arrayOf(E10, "1", E14), + arrayOf(E10, "0", E15), + arrayOf(E11, action_list5, E16), + arrayOf(E12, action_list6, E16), + arrayOf(E13, action_list7, E16), + arrayOf(E14, action_list4, E16), + arrayOf(E15, action_list3, E16), + arrayOf(E16, "/", E17), + arrayOf(E17, action_list1, E18), + arrayOf(E18, action_list1, E19), + arrayOf(E19, action_list3, E20), + arrayOf(E19, "0", E21), + arrayOf(E20, action_list1, E22), + arrayOf(E21, action_list3, E22) ) s0 = E0 - sf = arrayOf(E4) + sf = arrayOf(E22) init_transitions_by_delta() } + } \ No newline at end of file diff --git a/2A/S4/Automates/TP/src/main/kotlin/Main.kt b/2A/S4/Automates/TP/src/main/kotlin/Main.kt index e345d5c3965b07a78de6d8e43f636ee6226bc14b..af5b9771270ad226a6259721e8b370cb93cedc0f 100644 --- a/2A/S4/Automates/TP/src/main/kotlin/Main.kt +++ b/2A/S4/Automates/TP/src/main/kotlin/Main.kt @@ -1,8 +1,57 @@ -import Automates.HHMM -import Automates.Smiley +import Automates.* +import kotlin.system.exitProcess fun main(args: Array<String>) { - println("Hello World!") + var continu = true + while (continu) { + println( + "------------------------- Menu -------------------------\n" + + "1. Smiley (pour reconnaitre un des smileys)\n" + + "2. HH:MM (pour reconnaitre une heure bien formée)\n" + + "3. JJ/MM/AAAA\n" + + "4. Adresses électroniques\n" + + "...\n" + + "99. Arrêt de l'application\n" + + "Votre choix (1-99) ?\n" + + "Je vous demanderai ensuite la chaîne à analyser, Merci\n" + + "--------------------------------------------------------\n" + ) + + var input = readLine() + var autoChoice = "" + var automate : Automate = Smiley() + + if (input == "1") { + automate = Smiley() + autoChoice = "Smiley" + } else if (input == "2") { + automate = HHMM() + autoChoice = "HHMM" + } else if (input == "3") { + automate = JJMMAAAA() + autoChoice = "JJMMAAAA" + } else if (input == "4") { + automate = Adresse() + autoChoice = "Adresse" + } else if (input == "99") { + println("Bye") + exitProcess(0) + } + + println("Vous avez choisi ${autoChoice}. Tapez la chaîne à analyser") + + input = readLine() + var str = input.toString() + var OKKO = automate.run_automate(str) + + println("Résultat de l'analyse : ${OKKO}") + println(" ") + println("Entrée pour continuer ou quitter") + + input = readLine() + + + } // Try adding program arguments via Run/Debug configuration. // Learn more about running applications: https://www.jetbrains.com/help/idea/running-applications.html.