Professional Documents
Culture Documents
h>
#define TERM_X 0
#define TERM_Y 1
#define TERM_Z 2
#define ACEPT 3
#define OK 401
#define E 402
int func_Recorrer();
int automata();
//xx(x|y)*
//char G_cadena[] = "xxyyyyxyxyyxy";
//char G_cadena[] = "xx";
char G_cadena[] = "xxxz";
int G_arista;
/*
int tabla[3][3] =
{
{1,E,E} ,
{2,E,E} ,
{2,2,OK}
};
*/
int tabla[5][4] =
{
1,E,E,OK,
2,3,E,E,
2,3,4,E,
2,3,E,E,
E,E,E,OK
};
if (automata() == OK)
printf("Valido !!! \n");
else
printf("Error !!! \n");
return 0;
}
//
int func_Recorrer()
{
if (G_cadena[G_puntero] == 'x')
{
G_puntero++;
return TERM_X;
}
else if (G_cadena[G_puntero] == 'y')
{
G_puntero++;
return TERM_Y;
}
else if (G_cadena[G_puntero] == 'z')
{
G_puntero++;
return TERM_Z;
}
else if (G_cadena[G_puntero] == '\0')
{
G_puntero++;
return ACEPT;
}
else
{
return E;
}
}
while(true)
{
G_arista = func_Recorrer();
if (G_arista == E)
{
return E;
}
else if (tabla[estado][G_arista] == E)
{
return E;
}
else if (tabla[estado][G_arista] == OK)
{
return OK;
}
else
{
estado = tabla[estado][G_arista];
}
}
}