Es la primera fase del compilador. Lee el flujo de
caracteres de entrada y los convierte en un flujo de palabras o elementos (grupos de caracteres con significancia llamados lexemas). Para cada lexema, genera una lista ordenada de tokens de la forma <nombre-del-token | valor >, los cuales sern usados por el anlisis sintctico. Utiliza patrones (expresiones regulares) para representar un conjunto lxico. Entre sus funciones estn: la eliminacin de caracteres irrelevantes, contar el nmero de lneas con comentarios y sin ellos, manejar algunos errores, etc.
Nociones Previas
Anlisis Sintctico (Parser): Es la segunda fase del compilador. Recibe el cdigo fuente en forma de tokens del AL y determina la estructura gramatical del programa. Crea una representacin intermedia generalmente en forma de rbol de anlisis gramatical o rbol sintctico, donde cada nodo es una operacin y los hijos son los argumentos de la operacin. Se encarga del tratamiento de errores, es decir debe mostrar el error y saber recuperarse de el para poder continuar con el anlisis. Nociones Previas
Qu es la Semntica? La semntica (del griego semantikos, "lo que tiene significado") se refiere a los aspectos del significado, sentido o interpretacin del significado de un determinado elemento, smbolo, palabra, expresin o representacin formal. Anlisis Semntico
Se trata de determinar el tipo de resultados intermedios, comprobar que los argumentos que tiene un operador pertenecen al conjunto de los operadores posibles, y si son compatibles entre s, etc. Adems de calcular la informacin adicional necesaria para la compilacin una vez que se conoce la estructura sintctica de un programa. En definitiva, comprobara que el significado de lo que se vaya leyendo es vlido. Anlisis Semntico
La informacin calculada tambin est estrechamente relacionada con el significado final, o semntica, del programa que se traduce. Como el anlisis que realiza un compilador es esttico por definicin (tiene lugar antes de la ejecucin), dicho anlisis semntico tambin se conoce como anlisis semntico esttico. (Las propiedades del programa que se determinan al ejecutar el programa, no se pueden determinar mediante un compilador porque ste no lo ejecuta). Las caractersticas tpicas incluyen las declaraciones y la comprobacin (verificacin) de tipos, en donde el compilador verifica que cada operador tenga operandos que coincidan. Anlisis Semntico Esttico
La especificacin del lenguaje puede permitir ciertas conversiones de tipo conocidas como coerciones. Por ejemplo, puede aplicarse un operador aritmtico a un par de enteros o a un par de nmeros de punto flotante. Si el operador s e aplica a un nmero de punto flotante y a un entero, el compilador puede convertir u obligar a que el entero se convierta en un nmero de punto flotante. Coerciones
ANALISIS LEXICO Monto[indice] = 100 + valor
< id , 1 > < [ > < id , 2 > < ] > < = > < numero , 3 > < + > < id , 4 >
Lexema Patrn Componente Lxico Monto secuencia de letras identificador [ carcter [ corchete izquierdo ndice secuencia de letras identificador ] carcter ] corchete derecho = carcter = asignacin 100 secuencia de dgitos nmero + carcter + signo mas valor secuencia de letras identificador
Ejemplo:
ANALISIS SINTACTICO
Ejemplo:
ANALISIS SEMANTICO
Ejemplo:
Una de las tareas principales de un compilador es el clculo y mantenimiento de la informacin en tipos de datos (inferencia de tipos), y el uso de tal informacin para asegurar que cada parte de un programa tenga sentido bajo las reglas de tipo del lenguaje (verificacin de tipo). Estas dos tareas estrechamente relacionadas, se realizan juntas, y se hace referencia a ellas simplemente como comprobacin o verificacin de tipos. Comprobacin de Tipos
Sin duda, este tipo de comprobacin es el ms exhaustivo y amplio en fase de anlisis semntico. Ya sea en modo esttico (en tiempo de compilacin) o dinmico (en tiempo de ejecucin) o en ambos, las comprobaciones de tipos son necesarias en todo lenguaje de alto nivel. El analizador semntico llevara a cabo las dos siguientes tareas: Verificacin De Tipos: Comprueba las operaciones que se puedan aplicar a cada construccin del lenguaje. Dado un elemento del lenguaje, su tipo identifica las operaciones que sobre l se puedan aplicar. Inferencia de tipos: Para poder implementar la comprobacin anterior, es necesario conocer el tipo de cada construccin sintcticamente valida del lenguaje. Asi el analizador Tareas a realizar:
El anlisis semntico esttico involucra tanto la descripcin de los anlisis a realizar como la implementacin de los anlisis utilizando algoritmos apropiados. En este sentido, es semejante al anlisis lxico y sintctico. Sin embargo, no es tan simple, debido a que no existe un mtodo estndar que permita especificar la semntica esttica de un lenguaje, y en parte porque la cantidad y categora del anlisis semntico esttico vara demasiado de un lenguaje a otro. Conclusin