You are on page 1of 3

#include <stdio.

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";

// para indicar la posicion de la cadena


int G_puntero = 0;

int G_arista;

// ES VALIDO DECLARAR UN ARRARY DE LAS DOS SIGUIENTES FORMAS

/*
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
};

int main(int argc, char const *argv[])


{

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;
}
}

// pasa de un estado a aotro


int automata()
{
int estado = 0;

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];
}
}
}

You might also like