sflowhma9
Messages postés1Date d'inscriptionvendredi 23 décembre 2011StatutMembreDernière intervention27 décembre 2011
-
27 déc. 2011 à 16:43
cs_Julien39
Messages postés6414Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention29 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));