Hoy escribire de como se puede mapear un AFD (Automata Finito Deterministico) hacia un analizador Lexico, les dare el algoritmo basico para esto:
Primer Paso:
Segundo Paso:
Reglas:
- Cada estado se convierte en un Case
- Cada transición se convierte en un If el cual debe estar dentro de un case.
- En cada estado de aceptación, se agrega un else if para aceptar el lexema.
Tercer Paso:
Variables
Estado: el cual nos indicara en que estado nos encontramos. Es el valor que se utiliza en el switch de comparación.
Índice: nos dice la posición en la cual nos estamos moviendo dentro de nuestro archivo de entrada.
Lexema: será la variable donde estaremos concatenando la información leída del archivo de entrada.
Archivo Entrada: el cual contendrá lo que leamos del archivo de entrada.
Cuarto Paso:
Algoritmo Básico
Inicializar Variables {
Mientras No sea EOF{
Incrementamos índice
Leemos carácter del Archivo de Entrada en la posición índice
Switch ( estado ) {
En caso que sea 1
Si (carácter es igual a transicion1)
Cambiar estado
Lexema se le agrega el nuevo carácter
Sino Si (carácter es igual a transicion2)
Cambiar estado
Lexema se le agrega el nuevo carácter
….
Sino Si (carácter es igual a transiciónN)
Cambiar estado
Lexema se le agrega el nuevo carácter
Sino es ninguna de las anteriores
Es error lexico
En caso que sea 2
Si (carácter es igual a transicion1)
Sino Si (carácter es igual a transicion2)
….
Sino Si (carácter es igual a transiciónN)
En caso que sea 3 y este sea un estado aceptación
Aceptar Lexema asociado a Token
Reiniciar estado
Limpiar el Lexema
Retroceder el indice.
}//Fin Switch
}//Fin Mientras
}//Fin de Metodo
Espero les sirva este algoritmo, muy pronto estare subiendo ejemplos de como llegar al AFD y de como implementar el analizador lexico en java.
Exitos!!!!