"Año de la Diversificación Productiva y del Fortalecimiento de la Educación" UNIVERSIDAD NAI!NA DE PIURA FAU#AD DE IN$ENIERIA INDUS#RIA ESUEA DE IN$ENIERIA INF!R%A#IA Presentación &' CREACION DE UN ANALIZADOR LEXICO EN JAVA
D!EN#E' IN$( UIS A)ER#! ADER!N PINED! FE*A DE EN#RE$A' +,-./-+.&/ AU%N!S' AE $ARIA0 1airo Dar2o %ARE! %A3A0 %arcos Pa4l VE$A A%P!S0 1or5e 1unior
#RA)A1! REAI3AD! EN E AREA DE #E!RIA DE !%PIAD!RES
PIURA 6 +.&/
CREACION DE UN ANALIZADOR LEXICO EN JAVA
El proyecto que realizaremos es la creación de un analizador léxico hecho en java, que funcionaran para poder analizar un texto ingresado a través de una Área de Texto y muestre sus identificadores que si es una letra del abecedario entonces nos mostrara un id ms lo ingresado y si es que hay un espacio entre palabra la dividir en varios es decir un id para cada palabra, en el caso de que sea un numero nos mostrada el n!mero" En caso de que sea un carcter no especificado nos mostrara un error, y si ingresamos #$$% este analizador los ignorada como si no haya escrito ninguna palabra"
Analizador léxico Definición:
Es la primera fase de un compilador consistente en un programa que recibe como entrada el código fuente de otro programa &secuencia de caracteres' y produce una salida compuesta de to(ens &componentes léxicos' o s)mbolos" Estos to(ens sirven para una posterior etapa del proceso de traducción, siendo la entrada para el analizador sintctico *a entrada del analizador léxico podemos definirla como una secuencia de caracteres, que pueda hallarse codificada seg!n cualquier estndar+ -.// &merican -tandard .ode for /nformation /nterchange', E0.1/. &Extended 0inary .oded 1ecimal /nterchange .ode', 2nicode, etc"
Fncione!:
*eer los caracteres de entrada y elaborar como salida una secuencia de componentes léxicos que utilizar el analizador sintctico para hacer el anlisis"
Eliminar los comentarios del programa"
Eliminar espacios en blanco, tabuladores, retorno de carro, etc, y en general, todo aquello que carezca de significado seg!n la sintaxis del
lenguaje"
3econocer los identificadores de usuario, n!meros, palabras reservadas del lenguaje, etc", y tratarlos correctamente con respecto a la tabla de s)mbolos"
*levar la cuenta del n!mero de l)nea por la que va leyendo, por si se produce alg!n error, dar información acerca de dónde se ha producido"
visar de errores léxicos" 4or ejemplo, si el carcter 567 no pertenece al lenguaje, se debe emitir un error"
También puede hacer funciones de preprocesador"
A"roxi#acione! "ara con!$rir n analizador lexico%r&fico:
Existen tres mecanismos bsicos para construir un analizador lexicogrfico+
d hoc" .onsiste en la codificación de un programa reconocedor que no sigue los formalismos propios de la teor)a de autómatas" Este tipo de construcciones es muy propensa a errores y dif)cil de mantener"
8ediante la implementación manual de los autómatas finitos" Este mecanismo consiste en construir los patrones necesarios para cada categor)a léxica, construir sus automtas finitos individuales, fusionarlos por opcionalidad y, finalmente, implementar los autómatas resultantes" unque la construcción de analizadores mediante este método es sistemtica y no propensa a errores, cualquier actualización de los patrones reconocedores implica la modificación del código que los implementa, por lo que el mantenimiento se hace muy costoso"
8ediante un metacompilador" En este caso, se utiliza un programa especial que tiene como entrada pares de la forma &expresión regular, acción'" El metacompilador genera todos los autómatas finitos, los convierte a autómata finito determinista, y lo implementa en ." El programa . as) generado se compila y se genera un ejecutable que es el
anlizador léxico de nuestro lenguaje" 4or supuesto, existen metacompiladores que generan código 9ava, 4ascal, etc" en lugar de ." JFlex:
Es un generador de analizadores lexicogrficos
Esta desarrollado en 9ava y genera analizadores en código 9ava
Es una reescritura de la herramienta 9*ex, la cual es una reescritura de la herramienta lex$flex para 2nix
Est pensado para ser usado en conjunto con el generador de parsers **3 .24
Fnciona#ien$o:
Entrada rchivo con la especificación del scanner -alida El analizador léxico &scanner' Escrito en código 9ava
De!cri"ción del fnciona#ien$o del analizador
Figura 1
El programa nos mostrara una ventana como es la que vemos en la fi%ra ' en el cual tendremos tres cajas de texto, una etiqueta, un rea de texto y dos botones" *a primera caja de texto nos va a pedir que ingresemos el primer n!mero, la segunda caja de texto nos pedir que ingresemos el segundo n!mero, y la tercera caja es la del signo en la cual se deber ingresar los operadores (()**) ++) ,, para que se realice la operación indicando el operando mencionado anteriormente, de no ingresar esos operadores no se realizara la operación" En el rea de texto ya habiendo ingresado los dos n!meros y también el operador: se mostrara el anlisis que realizara nuestro analizador léxico y adems si es correcto lo ingresado aparecer el resultado en la etiqueta resultado de lo contrario en la caja de texto nos aparecer que el to(en es error y no nos realizara la operación"
Ejemplo de una operación realizada correctamente+
Figura 2
.omo vemos en la ;igura < se ha ingresado el n!mero = y el numero > dando el operador ((, al dar clic( en el botón .alcular en el rea de texto vemos el anlisis echo por ejemplo al n!mero tres lo reconoce como entero al n!mero cuatro igual al operador el to(en lo reconoce como suma, en la etiqueta resultado nos calculara el resultado en este caso es ?" Ejemplo para cuando nos bota error+
En la Figura 3 se muestra que se ha ingresado el número 2, y el número Figura 3 3 y de signo se ha ingresado el *, como se sabe este se utiliza para multiplicar pero como en nuestro analizador ya lo hemos hecho a nuestras propias definiciones de sintaxis; en el rea de texto nos aparecer que el to!en, reconoce a este signo como error, adems no se realizara la operaci"n por tanto no habr resultado#
Aco$a#ien$o
El acotamiento para nuestra calculadora bsica ser que al ingresar los operadores que no son reconocidos por los to(ens no se muestre el resultado
adems los reconozca como errores
DIA-RA.A DE /LO0UE
Texto
ANALIZADOR LEXICO
Texto Analizado
Error