Implementation automate DFA bloqué

sflowhma9 Messages postés 1 Date d'inscription vendredi 23 décembre 2011 Statut Membre Dernière intervention 27 décembre 2011 - 27 déc. 2011 à 16:43
cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 - 27 déc. 2011 à 19:38
bonjour mes chers :D je suis bloqué a l'implementation d'un automate finis DFA quelconque
en faite j'ai fait presque tout mais dans le main de la class eclipse m'affiche un erreur et j'ai rien pigé de quoi il s'agit
voila le code :D
mercii :D
package smi.compilation.groupe1;

public class automate {

/**
* @param args
*/
// on cherche sur un mot c-à-d String
// classs liste pour
class Liste {
int val;
Liste suivant;
Liste(int v, Liste x) {
val = v;
suivant = x;
}
}
class Automate {
int q0; // état initial
Liste[][] delta; // (table)fonction de transition
Liste finaux; // états finaux (liste d'entier)
Automate(int q, Liste f, Liste[][]d) {
q0 = q;//
delta = d; //
finaux = f;//
}
}


public static int longueur(Liste x) { // La longueur d'une liste
if (x == null)
return 0;
else
return 1 + longueur(x.suivant);
}
public static int kieme(Liste x, int k) { // Le k ème élément
if (k == 1)
return x.val;
else
return kieme(x.suivant, k-1);
}
public static boolean estDans(Liste x, int v) { // Le test d'appartenance
if (x == null)
return false;
else
return (x.val == v || estDans(x.suivant, v));
}


public static boolean accepter(String mot, Automate a) {
return accepter(mot, a, 0, a.q0);
}
public static boolean accepter(String mot, Automate a, int i, int q) {
if (i == mot.length())
return estDans(a.finaux, q);
else {
boolean resultat = false;
int c = mot.charAt(i); // le code ASCII du caractère courant
for (Liste nv_q = a.delta[q][c]; nv_q != null; nv_q = nv_q.suivant)
resultat = resultat || accepter(mot, a, i+1, nv_q.val);
return resultat;
}
}
public static void main(String[] arg) {
// TODO Auto-generated method stub
Liste[][] delta = new Liste[3][128];


delta[0][(int)'0'] = new Liste(0, new Liste(1, null));/******************************erreur ici(no enclosing instance in type automate is accesible.must qualify the allocation with an enclosing instance of type automat************************************************/


delta[0][(int)'1'] = new Liste(0, null);
delta[1][(int)'0'] = null;
delta[1][(int)'1'] = new Liste(2, null);
delta[2][(int)'0'] = null;
delta[2][(int)'1'] = null;
Automate a = new Automate(0,
new Liste(2, null),
delta);
System.out.println("accepter = " + accepter(arg[0],a));

}

}

1 réponse

cs_Julien39 Messages postés 6414 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 29 juillet 2020 370
27 déc. 2011 à 19:38
Bonjour,

Drôle de manière d'écrire les choses ; delta[0][(int)'0'], et surtout, ce n'est pas compatible avec le fonctionnement du cast.

pourquoi pas delta[0][0] tout simplement ?
0
Rejoignez-nous