Implementación del analizador léxico Prácticas EDI - © Juan Ramón Pérez1
Codificar el AFD en Java Prácticas EDI - © Juan Ramón Pérez2 No vamos a utilizar ningún generador de analizadores léxicos. Vamos a codificar (a mano) el AFD. Crearemos una nueva clase Lexico. Los códigos de los tokens se corresponderán con constantes. Utilización de constantes: permiten fácil mantenimiento y se autocomentan.
Clase Lexico Prácticas EDI - © Juan Ramón Pérez3 Lexico Buffer estadoActual: entero caracterActual: caracter […] create(URL) siguienteToken(): Token Token codigo: entero lexema: String create(codigo:entero, lexema: String) set...() get...()
Implementación autómata en Java Prácticas EDI - © Juan Ramón Pérez4 estadoActual= ESTADO_INICIAL; do { caracterActual= buffer.siguienteCaracter(); switch (estadoActual) { case 1: transicionEstado1(); break; case 2: transicionEstado2(); […] } while (!esFinal(estadoActual)); Contiene estado actual del autómata Obtenemos carácter del buffer Realizamos transición correspondiente en función del estado actual Todo esto lo repetimos hasta llegar a un estado final
Implementación de transicionEstado1() Prácticas EDI - © Juan Ramón Pérez5 […] lexema += caracterActual; switch(caracterActual) { case '"':estadoActual = 5; break; case '=':estadoActual = 11; token= new Token(TOKEN_IGUAL, lexema); break; […] } Si llegan unas comillas, el Autómata pasa al estado q5 Si llega “=", el Autómata pasa al estado q11 que es un estado final Concatenamos la cadena con el último carácter leído Carácter leído en método principal desde el buffer
Analizar excepciones al funcionamiento normal Prácticas EDI - © Juan Ramón Pérez6 ¿Qué pasa cuando llega un fin de buffer a mitad de lectura de un token? ¿Qué pasa al ir a leer otro token llega un fin buffer?