The TitleThe Author The Date Índice general I The First Part 4 1. Introducción 5 2. Objetivo 6 3. Justi…cación 7 4. Fases de un Compilador 8 4.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 4.2. Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 4.3. Compilación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 5. Lenguajes Regulares y Autómatas Finitos 5.1. Introducción . . . . . . . . . . . . . . . . . . 5.2. Autómatas Finitos . . . . . . . . . . . . . . 5.2.1. Autómatas . . . . . . . . . . . . . . 5.2.2. Autómatas Finitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17 17 19 19 19 6. Features of this Shell 6.1. Section . . . . . . . . . . . . 6.1.1. Subsection . . . . . 6.2. Tags . . . . . . . . . . . . . 6.3. Mathematics and Text . . . 6.4. Lists Environments . . . . . 6.5. Theorem-Like Environments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 22 22 22 23 23 24 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . A. The First Appendix . . . . . . 25 1 Índice de …guras 2 . Índice de cuadros 3 . Parte I The First Part 4 . el proceso de compilación llevado a cavo en dos fases: 1. se produce un codigo intermedio en que es la entrada a la siguiente fase. explican como se creo el compilador. este documento esta estructurado de la siguiente forma: a) Capítulo 1 proporciona una visión general del proceso de compilación. proporciona el codigo ejecutable. la utilización de variavles dadas de altta en el programa y la aignación de valores a variables del mismo tipo. Una vez terminada con exito la fase de analisis. …nalmente. utilizando todas las herramientas antes mencionadas. agrega los procesos externos que el codigo requiere y. el cual evalúa expresiones aritmeticas simple. Veri…ca la correcta escritura de comandos. con variables de tipo entero. c) Capítulo 3 & 4. y así como proporcionar las herramientas asociadas para llevarla a cabo exclusicamente. d) Capítulo 5. la estructura de instrucciones. mediante la descripción de estos conceptos se pretende obtener una idea mas clara acerca del analisis sintactico. además como complemento al documento se muetra un conjunto de apendices en los cuales se listan las diferentes etapas del desarrollo del compilador. 5 . Este documento trata del desarrollo de un compilador para el lenguaje de programación LRC. b) Capitulo 2 describe la relación existente entre los automatas …nitos y los lenguajes regulares. Para la explicación de las fases antes mencionadas. Analisis. con el …n de entender mejor el analisis lexicogra…co. 2. veri…ca que procesos pueden ser sintetizados y los recodi…ca de manera que el codigo sea optimizado. escribe el codigo intermedio.Capítulo 1 Introducción Esta investigación fue planteada con el …n de transmitir en fomra sencilla y concreta el proceso de compilación. 6 & 7. explican en forma sencilla la relación de las gramaticas libres de contexto y los automatas tipo pila. Sintesis. 2.Capítulo 2 Objetivo Al terminar el presente trabajo. El compilador constara de 3 etapas: Analisis Lexicogra…co. Analisis Sintactico. Describir que es un compilador y como funciona. se pretende: 1. se encuentre terminado. Generación de Codigo. El logro de dichos objetivos se vera re‡ejado al momento en que el compilador denomiando COMMIR (siglas de Compilador Mirna). 4. 6 . 3. Conocer la relación existente entre cada uno de las fases de compilación. Desarrollar un compilador para un lenguaje de programación LRC. el cual evalua expresiones aritmeticas simples con datos de tipo entero. Obtener una obra de consulta con información su…ciente y con…able acerca del proceso de compilación. lográndose las siguientes metas: 1. 2. Desde el punto de vista educativo. Es necesario destacar que la presente obra servirá como base para futuras investigaciones. el material proporcionara la herramienta para obtener conocimientos básicos acerca del tema antes mencionado (compiladores). lograr dominar los conceptos básicos sobre compiladores. 7 . la realización de esta investigación genero la recopilación detallada del proceso de compilación. en el cual se engloba el presente estudio. Se describirá e. 2. Al termino del estudio se pretende contar con la información su…ciente para poder sustentar que se conoce el tema. Un panorama general de lo que son los sistemas de compilacioón. Obtener una obra con información con…able y su…ciente para el estudio del tema. 3. lo cual nos lleva a un problema grave en el proceso de aprendizaje. es decir.Capítulo 3 Justi…cación Como es bien sabido los libros del área de la informática son materiales que no siempre están al alcance económico de las instituciones que imparten este tipo de conocimientos. Proporcionar la posibilidad a estudiantes de accesar a dicha obra. se dará: 1. 3. ya sea como material de consulta o como punto de partida. Describir en terminos generales lo que es compilador. Teniendo en cuenta lo anterior. aunado a esto podríamos decir que es imposible o casi imposible la adquisición de estas obras por parte de los estudiantes. funcionamiento del compilador en forma teórica y práctica. que es la consulta de fuentes bibliográ…cas. es decir. dicho estudio no pretende solamente procesar la información que otros autores presentan y transmitirla en forma accesible para los lectores. Aportar la investigación resultante al acervo bibliográ…co del Centro Universitario. de esta forma se podrá transmitir desde un punto de vista personal. Capítulo 4 Fases de un Compilador 4. Tarjetas de control y comandos de lenguaje conocido como sistema operativo. por lo cual es importante tener más conocimiento sobre lo que se este proceso. bit. En segunda se describen algunos conceptos importantes para el mejor entendimiento del tema. Lenguajes de Computadora El conjunto de instrucciones preestablecido es denominado como lenguaje de computador y se divide en [Lewis78] Microprogramación: controla en forma directa los dispositivos físicos y ofrece una mejor interfaz con el lenguaje maquina. el ser humano preestablece comandos o instrucciones que le indican a la computadora que hacer. esto es. Las instrucciones en lenguaje maquina se expresan en términos de la unidad de memoria más pequeña. una serie de instrucciones en lenguaje maquina se representan como 0100000111010011. Una unidad de control cuyas variables de control binario se almacenan en la memoria se llama unidad de control microprogramada. Esta semblanza tan sencilla de lo que es la comunicación entre las personas y la computadora en la vida real se presentan en una forma más compleja. Lenguajes procesadores: hacen posible que la computadora comprenda los comandos provistos por el ser humano. cuando se encuentra en un estado binario se ejecuta la microoperación correspondiente. permiten que el ser humano realice programas que la computadora pueda traducir para ejecutarlos posteriormente. por ejemplo.1. Microprogramación Es una alternativa para el diseño de la unidad de control de una computadora digital. Instrucciones: para computadoras especi…cas conocidas como lenguaje maquina. cada palabra en la memoria de control contiene un microinstrucción. A su vez una secuencia de microinstrucciones construye un microprograma. Lenguaje Maquina Es aquel cuyas instrucciones son entendibles por la computadora sin necesidad de traducirlos. La función control que especi…ca una microoperación es una variable binaria. Lenguaje de alto nivel: estos no dependen del sistema operativo ni de una maquina en particular. la cual especi…ca una o más microoperaciones para el sistema [Morris94]. Introducción La comunicación entre el ser humano y las computadoras es posible gracias a un conjunto de instrucciones equivalentes al lenguaje del primero. 8 . a su vez esta traduce dichas instrucciones pertenecientes a un lenguaje propio proporcionando los resultados necesarios para su funcionamiento. Antecendentes El primer lenguaje que se utilizó en la programación de las computadoras digitales fue el lenguaje máquina.Sistema Operativo Es el encargado de dirigir las operaciones globales de la computadora. ADD=suma. Las tareas del compilador son llevadas mediante procesos que siguen diferentes estrategias dependiendo del lenguaje fuente del programa a compilar. multiusuario o tiempo compartido (diferentes usuarios). Parte del proceso de compilación es la identi…cación de errores del programa fuente [Aho78]. SUB=resta. El lenguaje fuente de estos es un lenguaje de alto nivel. Es un traductor cuyo lenguaje fuente es un lenguaje de alto nivel y cuyo lenguaje objeto es parecido al lenguaje maquina {Terrence84].2. lo cual facilita la escritura y su comprensión. Compiladores: Traducen programas escritos en lenguajes de alto nivel a código máquina. STO=almacenar. dependen del conjunto de instrucciones especí…cas de la computadora. sustituía el código maquina por códigos mnemotécnicos y símbolos. Traductores: Aceptan igualmente programas en lenguaje fuente. este programa realiza la misma tarea que el fuente. Lenguajes de Alto Nivel Son aquellos cuyas instrucciones o sentencias son escritas con palabras similares al lenguaje del ser humano. estos tienen como principal función realizar la traducción del programa fuente o lenguaje maquina con el …n de llevar a cabo la tarea para la cual fueron creados. Lenguajes Procesadores Como ya se mencionó. aunque según estando próximo a la estructura u diseño de la máquina. por ejemplo.. es decir. En un lenguaje dependiente de la máquina. controla el almacenamiento y recuperación de archivos. DIV=dividir. Los lenguajes traductores se dividen en: Ensambladores: Traduce programas escritos en lenguajes de bajo nivel a código máquina. como por ejemplo C. Este tipo de lenguajes requieren ser traducidos a lenguaje máquina para que la computadora pueda ejecutarlo. abreviaturas de palabras inglesas y españolas. 9 . Por lo tanto. etc. que. monocarga (una sola tarea) o multitarea (múltiples tareas) [Tanenbaym88]. Compiladores De…nición Es un traductor de programas escritos en un lenguaje de alto nivel a una secuencia de instrucciones de la maquina con el …n de proporcionar la salida deseada. existen compiladores para cada lenguaje. por lo general al lenguaje inglés. que se expresa en términos binarios. con potentes instrucciones sustituyendo a los procesos de codi…cación mnemotécnicos largos e incomodos (proceso de traducción a lenguaje maquina). Un compilador puede utilizar un lenguaje ensamblador como un paso intermedio en la traducción o puede traducir de forma directa a lenguaje máquina. 4. A mediados de los años cincuenta aparecen los lenguajes macroensambladores. que tienen una representación binaria y que están relacionadas directamente a una operación. instruye a la computadora para ejecutar otros programas. Las instrucciones en este lenguaje se escriben en códigos alfabéticos conocidos como mnenotecnicos. es decir. Los sistemas operativos pueden ser monousuario (un solo usuario). Debido a la di…cultad para el programador se desarrolló el lenguaje ensamblador. la salida que producen es un programa en lenguaje objeto. Estos lenguajes se clasi…can en: Intérpretes: Es un lenguaje que acepta como entrada un programa escrito en un lenguaje fuente y va ejecutando las instrucciones conforme las va leyendo. El primer compilador fue el A-D. El primero dedicado al campo cientí…co y el segundo ligado al campo comercial y de gestión [López97]. se han desarrollado lenguajes de implantación. J. se han descubierto técnicas sistemáticas para el manejo de las tareas de compilación. el termino aún se conserva. Los dos lenguajes históricamente más importantes son el FORTRAN y el COBOL. el IT fue un lenguaje que ocurría en dos diferentes maquinas. En esta etapa el compilador trabaja directamente con el programa fuente. es decir. Este programa compilo subrutinas de una librería de cinta magnética dentro de programas de computadora completos. aunque con un sentido ligeramente diferente al planteado por Hopper. de ahí que los nuevos lenguajes tuviesen sus propios “compiladores”. necesarias de esa biblioteca y se integraban para conformar el proceso que ejecutaría la computadora. por medio de un proceso de transformación. Si tomamos literalmente las de…niciones de análisis y síntesis del [Aho90] tenemos que el análisis se lleva a cabo mediante 4 etapas: Análisis Lexicográ…co Análisis Sintáctico Análisis Semántico Generador de Código Intermedio La síntesis se lleva a cabo mediante 3 etapas: Optimización de Código Enlazador 10 . W. como ejemplo Lex. esta investigación consiste en la construcción de un autómata que trabaja con aritmética racional en el lenguaje C para microcomputadoras. En nuestros días. determinar la estructura y el signi…cado de un código fuente y traducirlo a código máquina. Se le atribuye a Gace Murray Hopper la acuñación de este término y se refería al trabajo que estaba detrás de la programación en aquellos tiempos existía una biblioteca de programas constituida de un conjunto de rutinas. La parte de síntesis elabora el programa objeto tomando como base el resultado del análisis {Aho90]. Hoy en día. Desde entonces. Quien realizaba este trabajo de acopio de rutinas y de integración sele denominaba compilador. la compilación es de…nida por los procesos de analizar y sintetizar un programa fuente. Compilación Se denomina compilación al proceso de traducir un programa fuente en condigo máquina. entornos de programación y herramientas de software que permiten la construcción de compiladores. un compilador es un traductor que facilita la comunicación entre el programador y la máquina. tenga un programa equivalente al original pero con la diferencia que el programa transformado trabajara con la precisión que el usuario le indique [Ruelas90]. Grace Murray Hopper para la UNIVAC en 1952. R. se aproximaban mucho más al problema y proporcionaban una forma más simple de programar. escrito por el Dr. para especi…car los analizadores léxicos y YACC. Los primeros lenguajes dieron origen a un nuevo término “Compilador”. después de usarlo. Smith y H. generador de analizadores sintácticos [Abo90]. estuvo disponible para la IBM 650 y la Burroughs 250 Datatrom. Van Zoeren. C.3. Gabriel Alejandro Ruelas Ángeles. Alrededor de 1957 el IT (Internal Traslator). Como antecedente al desarrollo de un compilador para un lenguaje cuyos programas tienen características especí…cas podemos nombrar el trabajo realizado por el M. dado que las instrucciones eran más parecidas al lenguaje del ser humano. La parte de análisis divide el programa fuente en sus componentes y crea una representación intermedia de dicho programa. 4. el cual tiene como objetivo crear un sistema que transforme programas automáticamente para que sean capaces de usar precisión arbitraria.Siguiendo los principios de los macroensambladores. De forma paralela a los lenguajes macroensambladores se desarrollaron lenguajes que se alejaban de la máquina. a inicios de los setenta se desarrolló el FORTH 1. lo cual signi…ca que un usuario de este sistema. J. que dio lugar en los ochenta al FORTH utilizado en microoperaciones. lenguaje de A. así como al PLZ/ASM. Perlis. Generación de Código Cabe señalar que el agrupamiento de las fases no afecta el proceso de compilación ya que este. se explica cada etapa del compilador. es decir. Se dice que la entrada es correcta si para cada lexema existe un token. este conjunto de símbolos es llamado token. dicha cadena es dividida en entidades llamadas lexemas. A continuación. es necesario resaltar que solo hasta la fase de análisis semántico el compilador trabaja directamente con el programa fuente y posteriormente se trabaja con los resultados de la etapa de análisis. Análisis Lexicográ…co Recibe un patrón de bits como una cadena de caracteres. esta entrada produce como salida un token equivalente al lexema. termina al momento en que se tiene el código máquina. los cuales proporcionan una ayuda auxiliar al compilador para llevar a cabo su tarea ( ver …gura 1. como lo indica la de…nición. Interactuando directamente con el proceso de compilación encontramos al administrador de la tabla de símbolos y al manejador de errores. sin embargo. las cuales son mortíferas que mani…estan la unidad de signi…cado de una palabra [Lara86}.1 ). Las tareas básicas que realiza el analizador lexicográ…co son: Descomponer el programa fuente en elementos básicos llamados lexemas 11 . al entrar el lexema el analizador lexicográ…co produce un conjunto de símbolos equivalentes al lexema. Veri…ca que la frase cumpla con la gramatical que le rige. veri…ca la secuencia correcta de caracteres. determina si una oración o sentencia respeta las reglas gramaticales preestablecidas en el lenguaje 1.Veri…car el lexema e identi…carlo con el token correspondiente Introducir en la tabla de símbolos los identi…cadores que aún no estén dados de alta en esta Example 1 El analizador lexicográ…co recibe la cadena IF x=3 THEN El analizador divide la cadena en 5 tokens Token if id relación const. Por ejemplo. si la veri…cación es positiva dará como resultado un token que será la entrada para el analizador. estas reglas que de…nen el orden de los tokens permitidos por el lenguaje es llamado gramática. el análisis sintáctico es el proceso que determina la sintaxis de acuerdo a las reglas gramaticales del lenguaje. 3. las cuales representan una instrucción del programa fuente. El analizador recibe la secuencia de tokens que envía el analizador lexicográ…co. El analizador impone una estructura jerárquica a la frase gramatical por medio de un árbol sintáctico. de forma contraria el lexema será tomado como desconocido o incorrecto. Then Lexema IF x = 3 THEN Los espacios en blanco se encuentran en la estructura separando cada lexema son eliminados por el analizador y cada lexema será veri…cado. Example 2 En un lenguaje x se tiene la siguiente regla: IF variable simbolo_asignacion constante THEN El analizador recibe el siguiente conjunto de tokens: 1. El analizador sintáctico es el encargado de reconocer la estructura del programa fuente. Análisis Sintáctico La sintaxis estudia la estructura de la oración en un lenguaje especi…co el cual contiene reglas de relaciones entre tokens. Palabra Reservada: THEN El analizador sintáctico obtendrá la frase 12 . en cuanto a su correcta escritura. Palabra Reservada: IF 2. En general podemos decir que el analizador lexicográ…co revive una palabra. es decir. 5. 4. El proceso de análisis sintáctico es llevado a cabo de la siguiente forma: 2. Divide la secuencia de tojens en frases gramaticales. simbolo_asignacion: = 4. Por lo tanto. el analizador tomará como correcto el primer lexema si se encuentra dentro de un token del lenguaje. variable: x 3. constante: 3 5. y será de…nida como división entre entero. El analizador semántico. por lo que el analizador semántico encontrara la división como incorrecta. debido a que la utilización de la fase gramatical se encuentra tal y como lo indica la regla. por lo que el analizador semántico encontrara correcto el fragmento del programa. En la regla (c) se de…ne como operador la cadena div en lugar del símbolo “/”. Generación de Código Intermedio Una vez que el programa fuente fue analizado léxica. está íntimamente relacionado con los tipos de datos manejados en el lenguaje y el uso que se les dé individualmente y en conjunto. es mediante la forma llamada “código de tres direcciones”. La representación intermedia tiene las siguientes propiedades: 13 . si cada operador tiene los operandos permitidos en el lenguaje fuente Example 3 Se ha prede…nido que en un lenguaje x. Sin embargo. si se tuviera IF x THEN. sintáctica y semánticamente se obtendrá una representación intermedia del programa fuente. el número real deberá ser transformado a entero. Una forma de obtener el código intermedio.IF x=3 THEN La cual se considera correcta. Cabe señalar que estas reglas semánticas las de…ne el implementador del sistema. esta consiste en una secuencia de instrucciones que tienen como máximo tres operandos. fácil de producir y de sencilla traducción al programa objeto. en el Example 3 se maneja una división utilizando únicamente el tipo real. por consiguiente. existan dos tipos de datos: Entero y Real. debido a que la variable donde se almacena el resultado de la división es entera. es decir. Análisis Semántico La función principal es la veri…cación de tipos. sin embargo. sin embargo. la división se de…ne como la siguiente regla Real=Real/Real Y se tiene el siguiente fragmento del programa a: Real b: Real c :Real a = 10 b= 2 c= a/b Nótese que la división está respetando la regla original. el analizador sintáctico marcaria incorrecta esta frase ya que la secuencia de tokens no corresponde a la establecida como regla. si el programa tuviera la siguiente forma: a: Entero b: Entero c :Real a = 10 b= 2 c= a/b No importando que el valor en ambos casos es el mismo y que matemáticamente sean enteros. sin embargo. el tipo no corresponde al especi…cado en la regla. es decir. podría de…nirse también como regla valida en una división a cualquiera de las siguientes formas: a) Entero=Real/Entero b) Entero=Entero/Real c) Entero= Entero div Entero En las reglas (a) y (b). Example 5 Tomando el resultado del generador de código intermedio (algoritmo 1). independiente de la asignación. Optimización de Código Un algoritmo optimizador realiza cálculos sin alterar en nada el resultado …nal checando el árbol sintáctico y eliminando lo que se puede sustituir por otra forma más corta. si se reconoce una frase como correcta. de esta forma los algoritmos de optimización permiten que el compilador trabaje con mayor e…ciencia y rapidez [Aho90]. el optimizador de código sustituira la operación por: (2) var1 = c 30 var2 = var1 = b x = var2 Enlazador Permite formar un solo programa a partir de varios archivos de código maquina re-localizable. sin embargo. Es necesario resaltar que el enlazador o encadenador no se encuentra (al menos en la bibliografía consultada) como parte del proceso de compilación. 2) El compilador debe generar un nombre temporal para guardar los valores calculados por cada instrucción. 14 .1) Cada instrucción tiene como máximo un operador. 3) Algunas instrucciones tienen menos de tres operandos. sin embargo. Example 4 Se tiene la siguiente frase proporcionada por el analizador sintáctico. a = b + c 30 El código intermedio produciriía: (1) var1 = 30 var2 = c var1 var3 = b + var2 a = var3 Donde var1. la frase de optimización de código deberá tratar de sustituirla con un procedimiento más e…caz. var2 y var3 son los nombres temporales que almacenan los cálculos de la frase. y algunos de estos pueden ser librerías del sistema que pueden utilizarse en programas fuente [Aho90]. se considera en el presente texto como parte de la compilación. atendiendo a la de…nición de compilación. Muchos compiladores no generan directamente el código intermedio. indirectamente este es realizado cuando se ejecuta el análisis sintáctico. es decir. Estos archivos pueden haber sido resultado de varias compilaciones distintas. 15 . este reconocerá cada lexema e indicará el token correspondiente. es decir. Una vez que el error ha sido detectado. es decir. 16 . se realiza un direccionamiento físico. el compilador debe modi…car la entrada para la etapa de detección del error y continuar con el proceso. estas indican en qué posición de memoria se almacenaran los datos y que operación se realizara en el presente ejemplo tenemos: Instrucción Movf id3 . es decir. Nótese que en la generación de código se asigna un lugar en memoria para variables y se asigna dicha variable en el registro. Manejo de Errores Durante las etapas de análisis lexicográ…co. 2) Permitir el acceso a la tabla y modi…car. se eliminaran y simpli…caran las instrucciones del código intermedio y …nalmente se codi…caran utilizando instrucciones que no son propias del lenguaje fuente. así transformará posicion := inicial = velocidad 60. el código que genera contiene paso a paso la realización de la instrucción según la jerarquía de las operaciones de la instrucción original.0.r1 Addf r2 .r1 Movf r1 . una vez obtenido el código intermedio se realizara la optimización. A la acción de leer el archivo fuente y producir un archivo de salida se le llama examen.id1 Acción Asigna el valor de id3 al registro r2 Multiplica 60 por el valor de r2 Asigna el valor de id2 al registro r1 Suma el valor de r2 mas el valor r1 y el resultado en r1 Asigna el valor del registro r1 a la variable id1 r1 . traduce el programa fuente a programa objeto. registros en memoria r2 id3 r2 =60*r2 r1 id2 r1 =r2 +r1 id1 r1 Como puede observarse la jerarquía de operaciones se respeta y …nalmente almacena el dato del registro2 a la variable. si es necesario. se realiza un examen en la fase de análisis y de esta forma se relacionan las etapas que la componen. el código intermedio esté terminado para desarrollar el código.r2 Movf id2 . el cual proporciona un código que aún no maneja directamente las direcciones físicas de memoria. el número de exámenes dependerá básicamente del lenguaje debido a que en algunos casos se requiere que por ejemplo.r2 . en: id1 := id2 + id3 60 Esta secuencia de tokens es la entrada para el análisis sintáctico. observando los errores subsecuentes. La función del administrador de la tabla de símbolos es: 1) Colocar los identi…cadores y sus atributos. posteriormente se realizaran exámenes sobre la fase de síntesis. el cual checara que la expresión cumpla con las características que indique el lenguaje para este tipo de operaciones posteriormente el analizador semántico veri…ca que se utilicen correctamente los tipos de datos.Generador de Código Está relacionado con las frases construidas en el análisis sintáctico. Administrador de la Tabla de Símbolos La tabla de símbolos es una estructura que almacenan los identi…cadores y conforme se lleva a cabo el proceso de compilación se asignan atributos a los identi…cadores.2. debido a que es en este proceso donde el compilador toma las equivalencias entre su lenguaje y el del programa. Al momento de llevarse a cabo el análisis lexicográ…co. es decir. Example 6 [Aho90] Al momento en que la fase de generación de código comienza es por que el proceso de compilación esta en la etapa …nal en la …gura 1. Una vez llevado acabo estos análisis se procede a la generación de código intermedio. se muestra como se lleva a cabo la compilación de una isntrucción para realizar una operación matemática. esta se lleva a cabo mediante la agrupación de las etapas de compilación. cabe señalar que algunas veces la traducción se realiza en la fase de generación de código intermedio. análisis sintáctico y análisis semántico puedan generarse diversos errores propios de cada etapa.r2 Mulf #60. por lo que un compilador deberá detectarlos y recuperarlos en el programa fuente. los valores de los identi…cadores. b. Dentro de estos lenguajes existen operadores básicos. el cual es un conjunto …nito de símbolos. tambien puede representarse como i a+ = [1 i=1 L Expresiones Regulares 17 . en a o esta en b} . Un lenguaje en términos de informática es un conjunto de caracteres. P por lo tanto. Introducción La base de todo lenguaje es el alfabeto. 2ay 2 b y se denota esta en b} 2 a o a 2 b y se denota a j b ={ j esta 4 Cerradura Positiva de a se escribe a+ y denota una o más concatenaciones de a. (ver Example 7). P P P Example 7 1 = f0. 1g 2 = fa. estos patrones representan series de cadenas que el lenguaje y por lo tanto los autómatas …nitos aceptan. símbolos y reglas utilizados para escribir las instrucciones dadas a un ordenador [García88].1. según su importancia son: 1 Kleene-Star 2 Concatenación 3 Unión ([ j) 4 Cerradura Positiva 1 Kleene-Star de a se escribe a y denota cero a más concatenaciones de a. tambien se puede representar como: i a = [1 i=0 L 2 Concatenación de a y b se escribo ab e indica que si se tiene ab ={ j esta en a y 3 Or ’de a y b se escribe a j b e indica que si se tiene . +. las cuales son notaciones importantes para especi…car patrones. también lo podemos de…nir como cualquier conjunto de cadenas sobre un alfabeto ( ). los caracteres y símbolos deben pertenecer al alfabeto del lenguaje. c. [Papadimitriou81]. g Los lenguajes aceptados por autómatas …nitos son descritos fácilmente por expresiones regulares. estos. zg 3 = f . ::::.Capítulo 5 Lenguajes Regulares y Autómatas Finitos 5. +g Por lo tanto las reglas que rigen las expresiones regilares son las siguientes: P Es una expresión regular y cada miembro de es una expresión regular. lo es también Toda expresión regular describe en forma concisa ciertos lenguajes in…nitos. lo es también : Si y son expresiones regulares. Las reglas de de…nitorias especi…can como se genera L(x)combinando varias formas de los lenguajes representador por las sobrexpresiones x.1. la tarea de dicha función es la veri…cación de una entrada que deberá cumplir con las reglas de la gramática. le corresponde un valor de…nido en la gramática. sin embargo. entonces L(rs) = L(r)L(s) IV Si r y s son expresiones regulares. entonces L(rjs) = L(r)jL(s) V Si r es una expresión regular. . b. son los caracteres sobre el alfabeto: P [f(. lo es también j : Si es expresión regular. se muestran ejemplos de repeticiones indeterminadas y con la utilizacion de los simbolos * y + se indica si la cadena resultante (w) tendra la opción de ser igual a c o debera cumplir con la regla deP w = c: Alfabeto( ) Expresión Regular Lenguaje que P P de…ne = fa. bg a b(a jb ) L = fw 2 Figura 2. entonces L(r ) = L(r) Las expresiones regulares cuentan con los símbolos Kleene-Star y cerradura positiva para indicar que un símbolo o símbolos se repetirán. donde n > 0} 18 . Dichas operaciones funcionan de igual forma que en las expresiones regulares. por lo que a cada valor que pueda tomar a. la única “restricción” que se podrá indicar dentro de las expresiones regulares es si se quiere que al menos se repita una vez (utilizando cerradura positiva) o dejar abierta la opción utilizando Kleene-Star. de lo contrario el resultado es negativo. Alfabeto( ) Expresión Regular Lenguaje que P P de…ne + L = fw 2 P jw no tiene un asubcadena ’ac ’} P = fa. Kleene-Star cerradura positiva. es decir. [. 1. El termino lenguaje es una expresión regular se re…ere a cualquier conjunto de cadenas de un alfabeto …jo. entonces L(r) = (r) III Si r y s son expresiones regulares. si esto es así el resultado será positivo. L(a) = [wjw contiene pares de b’sg La función L(a) deberá veri…car que toda cadena w que se reciba cumpla con contener pares de b’s. indicar que pueden P o no existir repeticiones. si se tiene. c Es una expresión regular que denota el lenguaje consistente de sólo la cadena vacia (c). concatenación. a los lenguajes les puede aplicar operaciones de unión. estas repeticiones son indeterminadas. por lo que un lenguaje es regular si y solo si se puede ser descrito por una expresión regular. cg ((c jb ) (a b) ) j w contiene al menos una b} = fa. sin embargo no puede describir los lenguajes. Si y son expresiones regulares. cada expresión regular x de…ne un lenguaje regular L(x). es decir. bg an bb L = fw 2 jan bn 2 w. Los lenguajes tienen las siguientes propiedades: P I L( ) = yL(a) = (a) para cada a 2 II Si r es una expresión regular.1 Expresiones Regulares En la …gura 2. .Una expresión regular está compuesta por expresiones regulares más simples siguiendo un conjunto de reglas de…nitorias. P Una expresión regular sobre el alfabeto . ). Un lenguaje denotado por el conjunto a (siendo a el conjunto de reglas o expresiones regulares que lo de…nen) se representa como L(a): L(a) es una función. 19 . En el presente estudio nos enfocaremos únicamente a los autómatas …nitos y a los autómatas tipo pila. es decir. en otras palabras la entrada pasa por varios estados.2. que si bien es cierto cuenta con el mismo número de a’s y b’s es diferente a la cadena resultante de an bn . comenzando del estado cero hasta el estado de aceptación. aaaab.2. la cadena es aaabbb. 5.Autómatas …nitos: Reconocen lenguajes regulares. Tipos de Autómatas Existen varios tipos de autómatas en relación con el tipo de lenguaje que aceptan. con n = 3. la forma en que funciona es muy simple. deberá veri…car si pertenece o no al lenguaje. abbb. el cual es una representación grá…ca del autómata …nito y cuya principal característica es que para indicar si la cadena es una expresión aceptada por el autómata …nito se requiere realizar una transición de un estado a otro hasta llegar al estado de aceptación. no importando el valor que tome a. tanto de a como dé b deben ser igual. que serán descritos a continuación. donde n 2 Enteros positivos. etc: a+ b+ = aabb. llamados también lenguajes con estructura de frase. una forma de realizar tal tarea es mediante la construcción de un diagrama de transiciones. el cual indica que el número de repeticiones. b.2. ya que de no ser asi se obtendrían cadenas como ababab. 2. deciden si una cadena determinada pertenece o no a un lenguaje prede…nido. aaaab. entonces: an bn = a2 b2 = aabb Caracteristicas que no tendria la expresión si fuera de la forma a b = aabb. recibe carácter por carácter y la salida que produce indica si la entrada es aceptada o no.Autómatas bidireccionales: Reconocen lenguajes dependientes del contexto.1. 3.Autómatas tipo pila: reconocen lenguajes de contexto libre.2. abbb. ab. en la cual se cuenta con el símbolo n. a. considerando que aleatoriamente solo existiera una repetición de ab.Máquinas de Turing: Reconocen lenguajes del tipo 0 de la jerarquía de Chomsky.2 Expresiones no Regulares Un caso diferente se muestra en la …gura 2. 4. es decir si n = 2. etc: La única forma de que una expresión regular fuera un poco semejante a an bn . para producir salida. 5. Los autómatas …nitos son reconocedores de lenguajes regulares. 5.Figura 2. Autómatas Finitos Un autómata …nito no tiene memoria para almacenar los datos que recibe. un programa que tenga de entrada una cadena (w). 1. por lo tanto aaabbb 6=ababab. Autómatas Finitos Autómatas Los autómatas o maquinas reconocedoras son dispositivos formales que permiten la de…nición de un lenguaje por medio de la vía de aceptación o rechazo de cadenas que lo componen. c. seria (ab)n Example 8 n = 1 : an bn = a1 b1 = ab (ab)+ = ab.2. Una expresión regular se compila en un reconocedor construyendo un diagrama de transiciones generalizado al que se le llama autómata …nito. en la cual se elige el siguiente estado en forma aleatoria.abra "bloque ". el segundo acepta una cadena vacía. si en vez de la palabra “bloque”.Example 9 Supongamos qie se toeme . también una transición puede existir con la lectura de varios caracteres. se debería de reconocer una “u” pero lo que detecta es una “e” por lo tanto. En cambio. Una razón importante para el estudio de autómatas …nitos nos la da el ejemplo anterior ya que. como se explica posteriormente. veríamos que en la transición del estado 5 del autómata.4 En términos generales un autómata …nito se basa en los siguientes elementos: Un conjunto de estados K …nitos. de esta forma se lleva a cabo el análisis lexicográ…co en un compilador. P Alfabeto Una función de transición de estados . como el autómata no tiene indicado dicho carácter.a [a. se introdujera la cadena “bloqe”. el autómata que reconoce dicha cadena de caracteres es la que se muestra en la …gura 2. además se puede pasar de un estado a otro en forma aleatoria ya que para el mismo carácter leído pude existir más de una posible transición. la diferencia es que el primero no cambia de estado cuando existe una cadena vacía y permite solo una transición de estado por cada carácter que pertenece el lenguaje. Un autómata …nito puede ser determinístico o no determinístico. la cadena no es aceptada. esto se ilustran en la …gura 2.3 Ahora. que establece la correspondencia k x 20 P ak . q1 . F g: Por ejemplo. F g Donde: K = (q0 . w = rq0. Autómatas Finitos Determinísticos (AFD) El autómata …nito más sencillo es el autómata …nito determinístico. r) donde: q es el estado actual. . el cual contiene para cada estado y carácter de entrada un solo estado de transición al que puede pasar. w0 ) donde: ` indica una relacioón de transición (pasa de un estado a otro). Expresado en otros terminos: 0 (q.3. r es el caracter a leer. se cambia al estado 2. q2 g P = (a. . q0 = es el estado al cual se realiza la transición. r) 2 K Tabla 2.1 Tabla de Transiciones del Autoómata A1 Tabla (A) q r q0 a q0 q0 b q1 q1 a q0 q1 b q2 q2 a q0 21 . r0 es el carácter a leer y w0 es la cadena que resta por leer. S0 .= (q. b) S0 = (q0 ) F =K = (q. Estado inicial S0 2 K: Conjunto de estados …nales F v K: P Por o tanto un autómata …nito es un quíntuplo de la forma A = fK. . bg y w no contiene 3 b’s consecutivas}. S0 . Dicho de otra forma. De acuerdo a la …gura 2. A1 = fK. w) `M (q . . para la entrada 1 una transición al estado 3 y así hasta llegar al estado 7 que indica el …nal. en estos autómatas no se permiten transiciones para la entrada vacía : Example 10 Se tiene la expresión regular (a b(baja)) L(A1 ) = fwjw P 2 fa. tenemos con la letra b una transición del estado 1 al 2. estando en el estado 1 y con la entrada b. es el estado al que se realiza la transición. This is a Body Math paragraph. footnotesize. The buck stops here.2. Slanted. Harry Truman Ask not what your country can do for you. Section Use the Section tag for major sections. You can apply the size tags t i n y . You can apply the special. Subsubsubsubsection This is just some harmless text under a subsubsubsubsection. This is convenient for carrying out “scratchpad” computations.1. Note that blackboard bold and calligraphic are correct only when applied to uppercase letters A through Z. Small Caps. large. Sans Serif. tags BLACKBOARD BOLD.1. This environment is appropriate for a short quotation or a sequence of short quotations. Subsubsubsection This is just some harmless text under a subsubsubsection.1. 6. 6. scriptsize . and Typewriter. Richard Nixon It’s no exaggeration to say the undecideds could go one way or another. and fraktur. Tags You can apply the logical markup tag Emphasized. LARGE huge and Huge. Scienti…c WorkPlace switches to mathematics mode. Bill Clinton The Long Quotation tag is used for quotations of more than one paragraph. normalsize. Each time you press the Enter key. George Bush I did not have sexual relations with that woman. Large. and the Subsection tag for subsections. John F Kennedy I am not a crook. ask what you can do for your country. Italics. small.Capítulo 6 Features of this Shell 6. Subsection This is just some harmless text under a subsection. CALLIGRAPHIC. mathematics only. Following is the beginning of Alice’s Adventures in Wonderland by Lewis Carroll: 22 . . You can apply the visual markup tags Bold. Subsubsection This is just some harmless text under a subsubsection. Miss Lewinsky. Following is a group of paragraphs marked as Short Quote. Roman. // "main" method always called first.k T k x converges weakly to a …xed point of T . There was nothing so very remarkable in that.Alice was beginning to get very tired of sitting by her sister on the bank. 1. for the hot day made her feel very sleepy and stupid).1) is automatically numbered as equation 6. List item 1 2. for it ‡ashed across her mind that she had never before seen a rabbit with either a waistcoat-pocket. perhaps when including a fragment from a program such as: #include <iostream> void main(void) { cout << "Hello World. The numbered equation utt p 2 u + u5 + u juj = 0 in R3 [0. Bullet item 1 23 . // < > is used for standard libraries. but it had no pictures or conversations in it.’thought Alice ‘without pictures or conversation?’ So she was considering in her own mind (as well as she could. Then for n. and looked at it. 6. An x = k=0 an.k+1 n. and of having nothing to do: once or twice she had peeped into the book her sister was reading. Use the Verbatim tag when you want LATEX to preserve spacing. ‘Oh dear! Oh dear! I shall be late!’(when she thought it over afterwards. 1[ (6. and fortunately was just in time to see it pop down a large rabbit-hole under the hedge. In another moment down went Alice after it. and burning with curiosity. whether the pleasure of making a daisy-chain would be worth the trouble of getting up and picking the daisies. T a nonexpansive + of C.1. she ran across the …eld after it. and description lists using the Item Tag popup list on the Tag toolbar. } 6. // Send to output stream.". Mathematics and Text Let H be a Hilbert space. Lists Environments You can create numbered. never once considering how in the world she was to get out again.k n. Suppose that as n ! 1. b) Just another list item under a list item. ‘and what is the use of a book.3. and then hurried on. or a watch to take out of it. The typeset style for this level is di¤erent than the screen style. The screen shows a lower case alphabetic character followed by a period while the typeset style uses a lower case alphabetic character surrounded by parentheses.4. but when the Rabbit actually took a watch out of its waistcoat-pocket.k n k=0 P1 each x in C. C be a closed bounded convex subset self map P1 of H. bulleted. nor did Alice think it so very much out of the way to hear the Rabbit say to itself. when suddenly a White Rabbit with pink eyes ran close by her. it occurred to her that she ought to have wondered at this. but at the time it all seemed quite natural). a ! 0 for each k. Alice started to her feet. 1) Third level list item under a list item. and = (a a ) ! 0. a 0 Fourth and …nal level of list items allowed. List item 2 a) A list item under a list item. Fourth (and …nal) level bullet item.5. 24 . Theorem-Like Environments The following theorem-like environments (in alphabetical order) are available in this style. This is the proof.Bullet item 2 Second level bullet item. Description List Each description list item has a term followed by the description of that term. 6. Bunyip Mythical beast of Australian Aboriginal legends. Acknowledgement 11 This is an acknowledgement Algorithm 12 This is an algorithm Axiom 13 This is an axiom Case 14 This is a case Claim 15 This is a claim Conclusion 16 This is a conclusion Condition 17 This is a condition Conjecture 18 This is a conjecture Corollary 19 This is a corollary Criterion 20 This is a criterion De…nition 21 This is a de…nition Example 22 This is an example Exercise 23 This is an exercise Lemma 24 This is a lemma Proof. Third level bullet item. Double click the term box to enter the term. Notation 25 This is notation Problem 26 This is a problem Proposition 27 This is a proposition Remark 28 This is a remark Solution 29 This is a solution Summary 30 This is a summary Theorem 31 This is a theorem Proof of the Main Theorem. This is the proof of the lemma. or to change it. Apéndice A The First Appendix The appendix fragment is used only once. 25 . Subsequent appendices can be created using the Chapter Section/Body Tag.