Introducción a La Teoría de Lenguajes Formales

18
INTRODUCCIÓN A LA TEORÍA DE LENGUAJES FORMALES ISC OSCAR DAVID CAMACHO CHAB

description

Se presenta la introducción de la teoría de lenguajes formales y las fases de un compilador

Transcript of Introducción a La Teoría de Lenguajes Formales

INTRODUCCIN A LA TEORA DE LENGUAJES FORMALES

INTRODUCCIN A LA TEORA DE LENGUAJES FORMALESISC OSCAR DAVID CAMACHO CHAB

CONCEPTOS BSICOSAlfabeto:Un alfabeto es un conjunto finito no vaco cuyos elementos se llaman smbolos. Podramos decir que el alfabeto es un conjunto de letras (caracteres o grafemas) de un sistema de escritura Denotamos un alfabeto arbitrario con la letra .Smbolos: Es una entidad abstracta que no se puede definir, ya que se dejara como una axioma. Igual que se define un punto en la geometra. La cual normalmente los smbolos son letras (a, b, c,. z), dgitos (0,1,9, caracteres (+, -, *, /,>,< ..). los smbolos pueden estar formados por varias letras o caracteres.

CADENASUna cadena o palabra sobre un alfabeto . admitimos la existencia de una nica cadena que no tiene smbolos, la cual se denomina cadena vaca y se denota con . Longitud de cadena. La longitud de cadena es el numero de smbolos que contiene. Cadena Vaca. Una cadena vaca es la nica cadena de caracteres de tamao cero. Y la podemos denotar usualmente con letras o (Griegas).

| abcb | = 4,| a + 2*b | = 5| 000111 | = 6| if a > b then a = b; | = 9

3

CONCATENACIN DE CADENASLa concatenacin de dos cadenas u y v, escrita uv, es "pegar" las dos cadenas para formar una nueva.Sea: u = ab, v = ca, w = bb. Entonces: uv = abcauw = abbb(uv) w = abcabbu(vw) = abcabbEl resultado de la concatenacin de u, v y w es independiente del orden en que las operaciones son ejecutadas. Matemticamente esta propiedad es conocida como asociatividad.

4

UNIVERSO DEL DISCURSOEs un conjunto de todas las cadenas donde podemos formar con smbolos del alfabeto le denominamos universo del discurso de y la representamos de la siguiente manera W (). Es evidente que W() es un conjunto infinito y que la cadena vaca pertenece a W().Ejemplo:Un afabeto con una sola letra = { a }, podemos decir que el universo del discurso es: W() ={ , a, aa, aaa, aaaa,....} y asi contiene una cadenas infinitas.

LENGUAJESEs un conjunto de cadenas, de todas las seleccionadas de un*. donde determinado el alfabeto se denomina lenguaje. Si es un alfabeto y L *, entonces L es un lenguaje de . Observe que un lenguaje deno necesita incluir cadenas con todos los smbolos de, ya que una vez que hemos esta que L es un lenguaje de , tambin sabemos que es un lenguaje de cualquier alfabeto que sea un sper conjunto de .La eleccin del termino "lenguaje" puede parecer extraa. Sin embargo, los lenguajes habituales pueden interpretarse como conjuntos de cadenas. Un ejemplo seria el Ingles, donde la coleccin de las palabras correctas inglesas es un conjunto de cadenas del alfabeto que consta de todas las letras. Otro ejemplo es el lenguaje C.

TIPOS DE LENGUAJESLenguaje natural (castellano): Nosotros estamos relacionados con el concepto tradicional de gramtica que, de esta forma intuitiva, podemos considerar un conjunto de reglas el cual nos indican que es correcto y que no lo es del, lenguaje natural. Con este fin podemos acrcanos a la definicin mas clara y formal de la lengua castellana.Lenguaje artificial: En este lenguaje aplicamos el mismo mtodo en el cual definimos un fragmento del lenguaje de programacin. Donde pretendemos describir las instrucciones el cual nos permite asignar un valor a una expresin a una variable en un lenguaje C.

Lenguaje regular. Llamamos as a los lenguajes porque sus palabras contienen "regularidades" o repeticiones de los mismos componentes, por ejemplo en este lenguaje L1 = { ab, abab, ababab, abababab,...} Este ejemplo podemos apreciar las palabras de L1 son solo repeticiones de "ab" donde se repiten varias veces. Su regularidad consiste en las palabras que contienen "ab" varias veces.

HERRAMIENTAS COMPUTACIONALES LIGADAS CON LENGUAJETraductor. Un traductor es un programa que tiene como entrada un texto escrito en un lenguaje (lenguaje fuente) y como salida produce un texto escrito en un lenguaje (lenguaje objeto) que preserva el significado de origen. Ejemplos de traductores son los ensambladores y los compiladores.Compilador. El compilador es un programa informtico que traduce un programa escrito en lenguaje de programacin y lo pasa a lenguaje de programacin, podemos decir que este programa nos permite traducir un cdigo fuente de un programa en lenguaje de nivel alto, y lo pasmos a otro nivel inferior (lenguaje maquina).

Ensambladores. El ensamblador es el programa en que se realiza la traccin de un programa escrito en ensamblador y lo pasa a lenguaje maquina. Directa o no directa la traduccin en que las instrucciones no son mas que instrucciones que ejecuta la computadora.Interpretes.Los interpretes son los que realizan normalmente dos operaciones:Traducen el cdigo fuente a un formato interno.Ejecuta o interpretan el programa traducido al formato interno.

Donde la primera pertenece al interprete el cual llama a veces al compilador, as se genera el cdigo interno, pero no es el lenguaje de maquina, ni lenguaje de smbolos, ni mucho menos un lenguaje de nivel alto.

FASES DE UN COMPILADOR

Un compilador se compone internamente de varias etapas o fases que realizan distintas operaciones lgicas. Es til pensar en estas fases como en piezas separadas dentro del compilador, y pueden en realidad escribirse como operaciones codificadas separadamente aunque en la prctica a menudo se integren juntas.Tabla de smbolos: estructura de datos mantiene la informacin asociada con los identificadores: funciones, variables, constantes y tipos de datos. La tabla de smbolos interacta con casi todas las fases del compilador: el rastreador o analizador lxico, el analizador sintctico o el analizador semntico puede introducir identificadores dentro de la tabla.TABLA DE LITERALES: almacena constantes y cadenas utilizadas en el programa. La tabla de literales es importante en la reduccin del tamao de un programa en la memoria al permitir la reutilizacin de constantes y cadenas. Tambin es necesaria para que el generador de cdigo construya direcciones simblicas para las literales y para introducir definiciones de datos en el archivo de cdigo objetivo.

11

ANALIZADOR LXICO O RASTREADOR (SCANNER) Efecta la lectura real del programa fuente, el cul generalmente est en la forma de un flujo de caracteres.El rastreador realiza el analizador lxico, recolectando secuencias de caracteres en unidades significativas denominadas tokens, las cuales son como las palabras de un lenguaje natural.Un rastreador realiza una funcin similar al deletreo.

a[ index] = 4 + 2 contiene 12 caracteres diferentes, pero slo 8 tokens. Cada token se compone de uno o ms caracteres que se renen en una unidad antes de que ocurra un procesamiento adicional.Un analizador lxico puede realizar otras funciones junto con la de reconocimiento de tokens. Por ejemplo, puede introducir identificadores en la tabla de smbolos, y puede introducir literales en la tabla de literales (las literales incluyen constantes numricas tales como 3.1415926535 y cadenas de texto entrecomilladas como "iHola, mundo!").

12

ANALIZADOR SINTCTICO Recibe el cdigo fuente en la forma de tokens proveniente del analizador lxico y realiza el anlisis sintctico, que determina la estructura del programa.Los resultados del anlisis sintctico por lo regular se representan como un rbol de anlisis gramatical o un rbol sintctico.

Esto es semejante a realizar el anlisis gramatical sobre una frase en un lenguaje natural. El anlisis sintctico determina los elementos estructurales del programa y sus relaciones.EJEMPLO rbol de anlisis gramatical:Representa un elemento estructural denominado expresin, la cual es una expresin de asignacin compuesta de una expresin con subndice a la izquierda y una expresin aritmtica entera a la derecha.Advierta que los nodos Internos del rbol de anlisis gramatical estn etiquetados con los nombres de las estructuras que representan y que las hojas del rbol representan la secuencia de tokens de la entrada.

13

Un rbol de anlisis gramatical es un auxiliar til para visualizar la sintaxis de un programa o de un elemento de programa, pero no es eficaz en su representacin de esa estructura.Los analizadores sintcticos tienden a generar un rbol sintctico en su lugar, el cual es una condensacin de la informacin contenida en el rbol de anlisis gramatical.

En ocasiones los rboles sintcticos se denominan rboles sintcticos abstractos porque representan una abstraccin adicional de los rboles de anlisis gramatical.A rbol sintctico muchos de los nodos han desaparecido (incluyendo los nodos de tokens). Por ejemplo, si sabemos que una expresin es una operacin de subndice, entonces ya no ser necesario mantener los parntesis cuadrados [ y ] que representan esta operacin en la entrada original.

14

ANALIZADOR SEMNTICOLa semntica de un programa es su "significado", en oposicin a su sintaxis, o estructura.La semntica de un programa determina su comportamiento durante el tiempo de ejecucin, pero la mayora de los lenguajes de programacin tienen caractersticas que se pueden determinar antes de la ejecucin e incluso no se pueden expresar de manera adecuada como sintaxis y analizarse mediante el analizador sintctico.

Se hace referencia a tales caractersticas como semntica esttica, y el anlisis de tal semntica es la tarea del analizador semntico. (La semntica "dinmica" de un programa, es decir, aquellas propiedades del programa que solamente se pueden determinar al ejecutarlo, no se pueden determinar mediante un compilador porque ste no ejecuta el programa.)Las caractersticas tpicas de la semntica esttica en los lenguajes de programacin comunes incluyen las declaraciones y la verificacin de tipos. Las partes extra de la informacin (como los tipos de datos) que se calculan mediante el analizador semntico se llaman atributos y con frecuencia se agregan al rbol como anotaciones o "decoraciones". (Los atributos tambin se pueden introducir en la tabla de smbolos.)

15

OPTIMIZADOR DE CODIGO FUENTEEl punto ms anticipado en el que la mayora de las etapas de optimizacin se pueden realizar es precisamente despus del anlisis semntico.Esta operacin es una fase por separado del proceso de compilacin.Retomando el ejemplo anterior, incluimos una oportunidad para la optimizacin a nivel de fuente; la expresin 4 + 2 se puede calcular previamente por el compilador para dar como resultado 6. Esta optimizacin particular es conocida como incorporacin de constantes.

En nuestro ejemplo esta optimizaci6n se puede realizar de manera directa sobre el rbol sintctico (con anotaciones) al colapsar el subrbol secundario de la derecha del nodo raz a su valor constante.Existen muchas variedades diferentes de tal cdigo, pero una eleccin estndar es el cdigo en tres direcciones, denominado as porque contiene las direcciones de (y hasta) tres localidades en memoria. Otra seleccin popular es el cdigo P. el cual se ha utilizado en muchos compiladores de Pascal.Ejemplo de cdigo en 3 direcciones:t = 4 + 2a [index] = t

Ahora el optimizador mejorara este cdigo en dos etapas, en primer lugar calculando el resultado de la sumat = 6a [index] = ty despus reemplazando a t por su valor para obtener la sentencia en tres direccionesa [index] = 6

16

El optimizador del cdigo fuente al emplear cdigo en tres direcciones tendra como resultado o salida cdigo intermedio. El cdigo intermedio ha hecho referencia a una forma de representacin de cdigo intermedia entre el cdigo fuente y el cdigo objeto, tal como el cdigo de tres direcciones o una representacin lineal semejante. Tambin puede ser llamada Representacin intermedia o RI

GENERADOR DE CDIGOEl generador de cdigo toma el cdigo intermedio o RI y genera el cdigo para la mquina objetivo.Es en esta fase de la compilacin en la que las propiedades de la mquina objetivo se convierten en el factor principal.No slo es necesario emplear instrucciones que existan en la mquina objetivo, sino que las decisiones respecto a la representacin de los datos desempearn ahora tambin un papel principal, tal como cuntos bytes o palabras de memoria ocuparn las variables de tipos de datos enteros y de punto flotante.

En este cdigo utilizamos una convencin propia de C para direccionar modos, de manera que &a es la direccin de a (es decir, la direccin base del arreglo) y que *R1 significa direccionamiento indirecto de registro (de modo que la ltima instruccin almacena el valor 6 en la direccin contenida en Rl). En este cdigo tambin partimos del supuesto de que la mquina realiza direccionamiento de byte y que los enteros ocupan dos bytes de memoria (de aqu el uso del 2 como el factor de multiplicacin en la segunda instruccin).

18

OPTIMIZADOR DE CDIGO OBJETIVOEn esta fase el compilador intenta mejorar el cdigo objetivo generado por el generador de cdigo. Las mejoras incluyen:Seleccin de modos de direccionamiento para mejorar el rendimiento.Reemplazo de las instrucciones lentas por otras rpidas.Eliminando las operaciones redundantes o innecesarias.

Ejemplo: En el cdigo objetivo de muestra dado es posible hacer varias mejoras. Una de ellas es utilizar una instruccin de desplazamiento para reemplazar la multiplicacin en la segunda instruccin (la cual por lo regular es costosa en trminos del tiempo de ejecucin). Otra es emplear un modo de direccionamiento ms poderoso, tal como el direccionamiento indizado para realizar el almacenamiento en el arreglo. Con estas dos optimizaciones nuestro cdigo objetivo se convierte en

19