fases de compilador

18
FASES DEL INGENIERÍA EN SISTEMAS COMPUTACIONALES Profesor: Edgar Gustavo |pro LENGUAJES Y AUTOMATAS I Alumnos:

Upload: donato-aquino

Post on 21-Nov-2015

217 views

Category:

Documents


4 download

DESCRIPTION

fases del compilador

TRANSCRIPT

Manual de Prcticas

Lenguajes y Autmatas [SCB-1015]

LENGUAJES Y AUTOMATAS I

Profesor: Edgar Gustavo Ortz LpezFases del Compilador|pro

Alumnos:Jos Luis Morales Velzquez No. Control 117o1136Donato Aquino Barrios No. Control 117o1076

Ingeniera en Sistemas Computacionales

ndice

INTRODUCCIN

Desde su nacimiento, la teora de autmatas ha encontrado aplicacin en muy diversos campos.

Esto se debe a que resulta muy natural considerar, tanto los autmatas como las mquinas secuenciales, sistemas capaces de transmitir (procesar) Informacin.

En definitiva, esto es equiparable a cualquier sistema existente en la naturaleza, que recibe seales de su entorno, reacciona ante ellas y emite as nuevas seales al ambiente que le rodea.

Algunos De los campos donde ha encontrado aplicacin la teora de autmatas son:

Teora de la Comunicacin Teora de Control Lgica de los circuitos secuenciales Ordenadores Teora lgica de los sistemas evolutivos y auto Reproductivos Reconocimiento de patrones Fisiologa del sistema nervioso Traduccin automtica de lenguajes

LAS FASES DEL COMPILADOR

1.- OBJETIVOEl estudiante conocer las fases de compiladores que hay, las formas de clasificacin de los mismos.

2.- MARCO TERICOLos autmatas finitos tienen muchas aplicaciones. Aplicados a la traduccin de lenguajes, ellos se emplean como medio sistemtico y eficiente de reconocer los lexemas que concuerdan con las expresiones regulares asociadas a los componentes lxicos de un lenguaje. Los autmatas finitos son una manera eficiente de implementar un analizador lxico.Podemos ver un autmata finito como una mquina de estadoscon un lector de smbolos. Un autmata se encuentre en un principio en un estado inicial. El autmata lee cada smbolo en la secuencia entrada, y cambia de estado de acuerdo al smbolo. El autmata se detiene si llega a un estado final y la entrada est agotada. Si la secuencia de entrada se agota y el estado no es final el autmata produce un error. Tambin se produce un error si no hay una transicin de estados definida para el estado actual y el smbolo ledo.2.- COMPILADORESLos compiladores son programas o herramientas encargadas de compilar. Un compilador toma un texto (cdigo fuente), escrito en un lenguaje de alto nivel y lo traduce a un lenguaje comprensible por las computadoras (cdigo objeto).Bsicamente, existen dos grandes formas de ejecutar programas: programas compilados (previamente pasados por un compilador) y programa interpretados (necesitas pasar por un intrprete para ejecutarse en tiempo real).

GENERALEMENTE UN COMPILADOR SE DIVIDE EN DOS PARTES:

Front Endparte que analiza el cdigo fuente, comprueba su validez, genera el rbol de derivacin y rellena los valores de la tabla de smbolos. Parte que suele ser independiente de lo analizado en el frontend. Back Endparte en donde se genera el cdigo maquina exclusivo para una plataforma a partir de lo analizado en el frontend.

por lo general el resultado del back end no puede ser ejecutado directamente, se necesita pasar por un proceso de enlazado (linker).

Existen varios tipos de compiladores: Compiladores cruzados, Compiladores optimizadores, Compiladores de una sola pasada, Compiladores de varias pasadas, Compiladores JIT (Just In Time).Fases de Compilador Un compilador se compone internamente de varias etapas, o fases, que realizan operaciones lgicas. Es til pensar en estas fases como piezas separadas dentro del compilador, y pueden en realidad escribirse como piezas separadamente aunque en la prctica a menudo se integran. A continuacin describiremos cada una de ellas: Anlisis Lxico. Anlisis Sintctico Anlisis Semntico Generalizacin y Optimizacin del cdigo intermedio Generacin de cdigo objeto.

Analizador Lxico: lee la secuencia de caracteres de izquierda a derecha del programa fuente y agrupa las secuencias de caracteres en unidades con significado propio (componentes lxicos o tokens en ingles). Las palabras claves, identificadores, operadores, constantes numricas, signos de puntuacin como separadores de sentencias, llaves, parntesis, etc., son diversas clasificaciones de componentes lxicos. La estructura lxica la modelaremos mediante expresiones regulares. Por ejemplo la siguiente instruccin en cdigo C:

EJEMPLO DE ANALISIS LEXICO.a[ndice] = 4+2;TestigoValor

Identificadora

Corchete de apertura[

ndicendice

Corchete de cierre]

Operador de asignacin=

numero4

Operador suma+

Numero2

Punto y co-ma;

Anlisis sintctico: determina si la secuencia de componentes lxicos sigue la sintaxis de lenguaje y obtiene la estructura jerrquica del programa en forma de rbol, donde los nodos son las construcciones de lato nivel del lenguaje. Se determinan las relaciones estructurales entre los componentes lxicos, esto es semejante a realizar el anlisis gramatical sobre una frase en lenguaje natural. La estructura sintctica la definiremos mediante las gramticas independientes del contexto. Como ejemplo consideremos la lnea de cdigo C anterior. Representa un elemento estructural denominado expresin, la cual es una expresin de asignacin compuesta de una expresin de subndice a la izquierda y una de expresin aritmtica a la derecha (rbol de anlisis gramatical).

Los nodos internos del rbol de anlisis gramticas estn etiquetados con los nombres de las estructuras que representas y las hojas del rbol representan la secuencia de tokens. Los arboles de anlisis gramatical son tiles para visualizar la sintaxis de un programa per no es eficaz en la representacin de esa estructura. Los analizadores sintcticos tienden a generar un rbol sinttico (una simplificacin de la informacin contenida en un rbol de anlisis gramatical). Para nuestro ejemplo observamos que en el rbol sintctico se ha eliminado nodos, esto debido a que sabiendo la naturaleza de la expresin, ya no es necesario contar con ciertos tokens.

Anlisis semntico: realiza las comprobaciones necesarias sobre el rbol sintctico para determinar el correcto significado del programa. Las tareas bsicas a realizar son: la verificacin e inferencia de tipos en asignaciones y expresiones, la declaracin del tipo de variables y funciones antes de su uso, el correcto uso de operadores, el mbito de las variables y la correcta llamada de funciones. Nos limitaremos al anlisis semntico esttico (en tiempo de compilacin) donde es necesario hacer uso, de la tabla de smbolos, como estructura de datos a almacenar informacin sobre los identificadores que surgiendo a lo largo del programa. El anlisis semntico suele agregar atributos (como tipos de datos) a la estructura del rbol semntico. El analizador semntico registrara el rbol sintctico con los tipos de datos de la sub-expresiones y verificara que la asignacin tiene sentido para los tipos, en caso contrario mandara un mensaje de error en correspondencia de tipos. De esta forma se obtiene un rbol sintctico con anotaciones. Siguiendo con el ejemplo de la expresin en C, el analizador semntico extrae la informacin de que a es un arreglo de valores enteros y que ndice es una variable entera.

Generacin y optimizacin de cdigo intermedio: la optimizacin consiste en la calibracin del rbol sintctico donde ya no aparecen construcciones de alto nivel. Generando un cdigo mejorado, ya no estructurado, ms fcil de traducir directamente a cdigo ensamblador o mquina, compuesto de un cdigo de tres direcciones (cada instruccin tiene un operador, y la direccin de dos operndoos y un lugar donde guardar el resultado), tambin conocida como cdigo intermedio.

La etapa de optimizacin solo depende del lenguaje fuente (y no de la maquina), se busca principalmente eliminar sub-expresiones comunes, identificar cdigo muerto, sustituir operaciones aritmticas, calculo previo de constantes, variables de induccin, propagacin de copias o cdigo inalcanzable. Suele ser una fase lenta y compleja. Siguiendo con el ejemplo de la expresin de asignacin, el generador/optimizador, colapsara le expresin aditiva generando una constante 6. En ocasiones estas adecuaciones pueden realizarse en el rbol directamente, pero generalmente resulta ms fcil hacerlo de manera lineal en una estructura de cdigo de tres direcciones (cudruplos).

Cdigo optimizadoCdigo intermedio

a[ndice] = 6T1 = ndice * elem_size (a)

T2 = &a +t1

*t3 = 6

Generacin de cdigo objeto: toma como entrada la representacin intermedia y genera el cdigo objeto. La optimizacin depende de la maquina es necesario conocer el conjunto de instrucciones, la representacin de los datos (nmero de bytes), modos de direccionamiento, nmero y propsito de registros, jerarqua de memoria, encauzamientos, etc.

Suelen implementarse a mano, y son complejos por que la generacin de un buen cdigo objeto requiere la consideracin de muchos casos particulares. Tambin se est investigando la creacin de generadores de cdigo automtico. La idea es automticamente hacer corresponder una representacin intermedio a plantillas de instrucciones objeto. Permitiendo generar fcilmente el cdigo objeto para una nueva mquina objeto, cambiando el conjunto de plantillas. Por ejemplo GNU GCC posee plantillas para ms de arquitecturas ms habituales de ordenadores. Finalmente para nuestro ejemplo debemos decidir ahora cuantos enteros se almacenaran para generar el cdigo del arreglo, para este ejemplo emplearemos modos de direccionamiento propios de C, generando el cdigo objeto en un lenguaje ensamblador hipottico.

MOV R0, t1; ; valor de index ->

MOV R1, &a; ; direccin de a -> R1

ADD R1, R0; ; sumar R0 a R1

MOV *R1, 6; ; constante 6 -> direccin en R1

Tabla de smbolos: es una estructura tipo diccionario con operaciones de insercin, borrado y bsqueda, que almacena informacin sobre los smbolos que van apareciendo a lo largo del programa son: Los identificadores (variables y funciones) Etiquetas Tipos definidos por el usuario (arreglos, registros, etc)

Adems almacenan el tipo de dato, mtodo de paso de parmetros, tipo de retorno y de argumentos de una funcin, el mbito de referencia de identificadores y la direccin de memoria. Interacciona tanto con el analizador lxico, sintctico y semntico que introducen informacin conforme se procesa la entrada. La fase de generacin de cdigo y optimizacin tambin la usan.

Gestor de errores: detecta e informa de errores que se produzcan durante la fase de anlisis. Debe generar mensajes significativos y reanudar la traduccin.

Encuentra errores:

En tiempo de compilacin errores lxicos (ortogrficos), sintcticos (construcciones incorrectas) y semnticos (p. ej. Errores de tipo) En tiempo de ejecucin direccionamiento de vectores fuera de rango, divisiones por cero, etc. De especificacin/diseo compilan correctamente pero no realizan lo que el programador desea.

5. RESULTADOSI. .

6. CONCLUSIONES

Al concluir este ensayo el alumno habr comprendido los fundamentos tericos de los compiladores y componentes de un cdigo de programa.

7.- BIBLIOGRAFAAho, A.V. Senthi, R. Ullman, JD. (1990), Compiladores: principios, tcnicas y herramientas

Louden, K.C. (1997), Construccin de compiladores: principios y prctica,

http://www.paginasprodigy.com/edserna/cursos/compilador/notas/Notas1.pdfhttp://es.slideshare.net/pavillalta/etapas-de-compilacionhttp://bloggerdealejandracarbajal.blogspot.mx/2013/01/los-compiladores.html

Aplicacin de las Expresiones Regulares (ER). Definicin formal de una ER.Es un equivalente algebraico para un autmata. Utilizado en muchos lugares como un lenguaje para describir patrones en texto que son sencillos pero muy tiles. Pueden definir exactamente los mismos lenguajes que los autmatas pueden describir: Lenguajes regulares. Ofrecen algo que los autmatas no: Manera declarativa de expresar las cadenas que queremos aceptar.Dado un alfabeto Dado un alfabeto , una , expresin regular sobre expresin regular sobre se define de forma recursiva: ER primitivas:, , {a | a} Si y son ER, entonces son tambin ER: + (unin), (concatenacin), * (cierre), (). No existen otras reglas para la construccin de ER sobre .Ejemplos de usos. Comandos de bsqueda, e.g., grep de UNIX. sistema de formato de texto: Usan notacin de tipo expresin regular para describir patrones. Convierte la expresin regular a un DFA o un NFA y simula el autmata en el archivo de bsqueda. Generadores de analizadores - Lxicos. Como Lex o Flex. Los analizadores lxicos son parte de un compilador. Dividen el programa fuente en unidades lgicas (tokens) divide el programa fuente en unidades. Produce un DFA que reconoce el token.Las expresiones regulares denotan lenguajes.Por ejemplo, la expresin regular: 01* + 10* denota todas las cadenas que son o un 0 seguido de cualquier cantidad 1's o un 1 seguida de cualquier cantidad de 0's.Operaciones de los lenguajes: Unin: Si L y M son dos lenguajes, su unin se denota por LUM. Concatenacin: La concatenacin es: LM o L.M. Cerradura (o cerradura de Kleene): Si L es un lenguaje su cerradura se denota por L *.Si E es una expresin regular, entonces L(E) denota el lenguaje que define E. Las expresiones se construyen de la manera siguiente: Las contantes y son expresiones regulares que representan a los lenguajes L (Q) = {Q} y L () L =respectivamente. Si a es un smbolo, entonces es una expresin regular que representan al lenguaje: L (a) = {a}.

OperacionesUnin o Alternativa:Consideremos dos lenguajes diferentes definidos sobre el mismo alfabeto L1W() y L2W(). Se denomina unin de ambos lenguajes al lenguaje formado por las palabras de ambos lenguajes: L1 U L2={ x | xL1 xL2}Concatenacin:Consideremos dos lenguajes definidos sobre el mismo alfabeto, L1 y L2. La concatenacin o producto de estos lenguajes es el lenguaje L1 L2= { xy / xL1 y xL2} Las palabras de este lenguaje estarn formadas al concatenar cada una palabra del primero de los lenguajes con otra del segundo.La concatenacin de lenguajes con el lenguaje vaci esL = L = Potencia de un lenguaje:Se define la potencia i-sima de un lenguaje a la operacin de concatenarlo consigo mismo i veces. Li= LLL ....L |------------| iClausura positiva de un lenguaje:Se define la clausura positiva de un lenguaje L: L + = U L i i=1Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles excepto L. Si L no contiene la palabra vaca, la clausura positiva tampocoCierre o Clausura de un lenguaje:Se define el cierre o clausura de un lenguaje L como : L* = U Li i=0Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles, incluso L. Todas las clausuras contienen la palabra vaca.Existen tres operaciones bsicas que se pueden realizar sobre las ER: Seleccin de alternativas :Se indica con el operador |(barra vertical). Si r y s son ER, entonces r | s es una ER que define a cualquier cadena que concuerde con una r o una s, tambin se dice que r | s , es la unin de los lenguajes de r y s y lo podemos definir: L( r | s ) = L( r ) U L( s ). Esta operacin se puede extender a ms de dos ER. Concatenacin:Se indica con la yuxtaposicin de las ER. Si r y s son ER, entonces rs es una ER que define a cualquier cadena que concuerde con la concatenacin de r y s , esta operacin la podemos definir: L(rs) = L(r)L(s).Esta operacin se puede extender a ms de dos ER.Repeticin o Cerradura:Tambin se conoce con el nombre de cerradura de Kleene. Se indica con el operador*. Si r es una ER, entonces r* es una ER que define a las cadenas de caracteres representadas por la concatenacin repetida de r en n veces, o sea que lo podemos definir como: L(r*) = L(r)*o tambin lo podemos definir como la unin infinita de conjuntos r :r* n = r 0 r 1 r 2...r n.Aplicaciones en problemas reales.Para descripcin de patrones textuales:La mayora de los procesadores de texto utilizan variantes de las ER para facilitar la bsqueda de palabras en un texto, como los comodines del Word . (Ver el help del MS-Word 2007). Tambin se utilizan en la representacin de cadenas de caracteres en muchos sistemas operativos, como en el GNU/Linux. Para describir el lxico de un lenguaje de programacin Por ejemplo para el lenguaje C++: EXPRESIONES REGULARES (ER): ING. JORGE BUABUD PalabrasClaves = main+if+else+while+do+switch+case+...... Dgitos = 1+2+3+4+5+6+7+8+9 NmeroEnteroSinSigno = 0+Dgitos.(Dgitos+0)* Letra = a+b+c+d+..............+z Identificador = (Letra+ _ ).(Letra+ _ +Dgitos+0)*Fecha: 14/02/2015Pgina 2