ANALIZADOR LEXICO
EDUARDO ESCALLON AGUILAR CRISTIAN IVAN SARABIA PRENS MURPHY HORTA CAMARGO VII SEMESTRE
INGENIERIA DE SISTEMAS
JOAQUIN SILVA ROMERO DOCENTE
CORPORACION UNIVERSITARIA RAFAEL NUÑEZ CARTAGENA DE INDIAS 2011
INTRODUCCION El siguiente compilador, es realizado en java, con el fin de que solo acepte letras, números, operadores o los paréntesis, con el fin de estudiar y comprender la funcionalidad de un compilador, sus características y su forma de verificar que el código que se escriba corresponda con el lenguaje y los autómatas estipulados para el funcionamiento del compilador.
OBJETIVOS General: Realizar un compilador que a través de sus 3 analizadores; léxico, sintáctico y semántico pueda verificar que según un lenguaje estipulado un código este correcto.
Específicos: -
Desarrollar un analizador léxico
-
Desarrollar un lenguaje y unos autómatas para el analizador léxico
-
Obtener la lista de errores del analizador léxico
-
Desarrollar un analizador sintáctico
-
Desarrollar la lista de errores del analizado sintáctico
-
Desarrollar un analizador semántico
-
Desarrollar la lista de errores del analizador semántico
Lenguaje: {a-z}| {A-Z}|{0-9}|{=,+,-,*,/,(,)} ANALIZADOR LEXICO GRAMÁTICA Variable: [a-z][A-Z] ||Ɛ Digito: [0-9] ||Ɛ Operador: +|-|*|/|=|(|)
LISTA DE ERRORES: -
No se acepta caracteres que no sean letras, números ó los siguientes símbolos + - * / ( ) =
Nota: Debe colocar espacio obligatoriamente después de cada identificación.
ANALIZADOR SINTACTICO GRAMATICA: Expresión: (|| )()(|| ) Asignación: ()(=)()
LISTA DE ERRORES: -
Error sintáctico de orden de los caracteres que se digitaron
AUTOMATAS Autómata solo números
Q0
Cuádrupla:
Q1 Q1
Q= {Q0, Q1} TE= {0-9} S= (Q0, Q1) = [0-9] (Q1,Q1) = [0-9] Q0= Q0 F= Q1
Autómata letras mayúsculas y minúsculas
Q0
Q1 Q1
Cuádrupla: Q= {Q0, Q1} TE= {[A-Z] |[a-z]} S= (Q0, Q1) = [A-Z] |[a-z] (Q1, Q1) = [A-Z] |[a-z] Q0= Q0 F= Q1
Autómata operadores [+|-|*|/|=|(|)]
Q0
[+|-|*|/|=|(|)]
Q1 Q1
Cuádrupla: Q= {Q0, Q1} TE= {+|-|*|/|=|(|)} S= (Q0, Q1) = [+|-|*|/|=|(|)] (Q1, Q1) = [+|-|*|/|=|(|)] Q0= Q0 F= Q1
Autómata caracteres [(|)]
Q0
Cuádrupla: Q= {Q0, Q1} TE= {(|)} S= (Q0, Q1) = [(|)] (Q1, Q1) = [(|)] Q0= Q0 F= Q1
[(|)]
Q1 Q1
CONCLUSIÓN Recordemos que un compilador lo componen se compone de varios análisis entre ellos: análisis léxico, análisis sintáctico y análisis semántico; cada uno de estos análisis se e ncarga de cumplir una función específica en el compilador, nuestro objetivo es crear un compilador que realice estos tres análisis, hasta el momento solo realiza el análisis léxico esta es la primera parte de nuestro compilador, la idea es implementar los dos análisis restantes para que sea un compilador completo. Nuestra primera parte del compilador actualmente es el análisis léxico o analizador léxico, el cual se encarga de hacer un análisis lineal agrupando la los caracteres en componentes léxicos; los espacios en blanco entre cada carácter son eliminados durante este análisis. Nuestras expresiones regulares denotan un conjunto de secuencia de símbolos validos que se construyeron a partir del alfabeto del lenguaje que definimos, en nuestro compilador para este caso la primera parte que es el análisis léxico existen validaciones y restricciones por llamarlas de algún modo, estas restricciones no hacen parte del lenguaje ya definido; por eso al momento de que nuestro compilador realice o empiece a hacer el análisis léxico mostrara errores a aquellos caracteres que no estén definidos; realizamos una representación grafica de los autómatas que nuestro compilador valida. Podemos decir que nuestro objetivo de la primera fase se ha cumplido pues nuestro compilador realiza como primera medida un análisis léxico, como arriba mencionamos lo que buscamos es la
creación de un compilador con sus tres analizadores pero hasta el momento se cumplió con la realización del analizador léxico pues este era el objetivo de nuestra primera fase la creación de este análisis y fue cumplido. En nuestro analizador
léxico, se puede observar que este se encarga
de la parte de verificación para todos aquellos caracteres que son válidos para el compilador, y la lista de errores que corresponde a aquellos caracteres que no son permitidos, que no son validos en el lenguaje que manejamos, este análisis se realiza o se obtiene verificando paso por paso todos y cada uno de los caracteres digitados por el usuario, verifica si se encuentran entre algún grupo de los caracteres permitidos, en nuestro caso los grupos permitidos son todas las letras del alfabeto español, estas las definimos de la siguiente forma *A….Z+ *a…z+ tanto mayúsculas como minúsculas y lo que indica es que son todas las letras por ejemplo (abcdef, ghijklLLmnñopq… etc.),
todos los números a los que definimos de la siguiente forma *0…9+ que lo que indica que lo que se va a validar son los números por ejemplo (1234567890…), y los operadores que los definimos de
la siguiente manera [+|-|*|/|=|(|)] lo que indica que valida los operadores siguientes +, -, *, /, (, ), = y si el carácter digitado no se encuentra en nuestros este lenguaje simplemente lo coloca en una lista de errores, y lo muestra al usuario diciendo cuales son los caracteres que no se permiten. En la vida también tenemos validaciones, así que podríamos comparar en cierto modo un compilador con las restricciones que cotidianamente tenemos, en este sentido podríamos decir que en la vida también tenemos compiladores y en el caso del análisis léxico del compilador que verifica o valida caracteres definidos en el lenguaje, en nuestra vida aunque no lo aceptemos tenemos un lenguaje definido que quizás en muchos aspectos no son validados, por ejemplo en el caso de las creencias religiosas, o en la parte racial. Por ejemplo, encontramos en la cotidianidad que para poder ingresar a algunos trabajos debes tener ciertas preferencias o distinciones, entonces podríamos denominar esas preferencias como el lenguaje que y a se encuentra definido y al que debemos ser compatibles, simplemente al que debemos perte necer.