Volumen 2 Def

Embed Size (px)

Citation preview

  • 7/26/2019 Volumen 2 Def.

    1/90

  • 7/26/2019 Volumen 2 Def.

    2/90

  • 7/26/2019 Volumen 2 Def.

    3/90

    SSL 2

    Desde el Compilador

    Jorge D. Muchnik, 2010

  • 7/26/2019 Volumen 2 Def.

    4/90

    Muchnik, Jorge Daniel

    Sintaxis y semntica de los lenguajes : desde el compilador. - 1a ed. - Buenos Aires :Centro de Estudiantes de Ingeniera Tecnolgica - CEIT, 2010.

    88 p. ; 28x21 cm.

    ISBN 978-987-1063-71-0

    1. Lingstica. I. Ttulo.CDD 410

    Fecha de catalogacin: 05/04/2010

    Editor ial CEIT - Centro de Estudiantes de Ingeniera Tecnolgica Medrano 951 Cuidad Autnoma de Buenos Aires.TEL: (011)4867-7557Mail: [email protected]: www.ceit.frba.utn.edu.ar/servicios/editorial

    Diseo de Tapa: Cecilia A. Ramacciotti

    Queda hecho el depsito que previene la Ley 11.723

    Impreso en Argentina.Impreso por:

    Todos los derechos reservados. Esta publicacin no puede ser reproducida, archivada o transmitida en forma

    total o parcial, sea por medios electrnicos, mecnicos, fotocopiados o grabados, sin el permiso previo de los

    editores que deber solicitarse por escrito.

  • 7/26/2019 Volumen 2 Def.

    5/90

    SSL 2 3 Muchnik

    El libro Sintaxis y Semntica de los Lenguajes estformado por tres volmenes:

    Vol. 1Desde sus Usuarios (programadores y otros)

    Vol.2Desde el Compilador

    Vol.3Algoritmos

    Este libro cubre todos los objetivos y los contenidos de laasignatura con el mismo nombre.

    Agradezco a los profesores que integran la ctedra Sintaxisy Semntica de los Lenguajes, que siempre han apoyadomi gestin y han colaborado de distintas maneras para queeste libro sea una realidad.

    Por orden alfabtico, los profesores de esta ctedra son:Adamoli, AdrianaBarca, RicardoBruno, OscarDazBott, Ana MaraFerrari, MartaOrtega, SilvinaSola,Jos Maria.

    Jorge D. Muchnik, Titularfebrero 2010

  • 7/26/2019 Volumen 2 Def.

    6/90

    SSL 2 4 Muchnik

  • 7/26/2019 Volumen 2 Def.

    7/90

    SSL 2 5 Muchnik

    NDICE

    1 INTRODUCCIN A AUTMATAS FINITOS Y APLICACIONES . . . . . . . . . . 7

    1.1 QU ES UN AUTMATA FINITO? . . . . . . . . . . . . . . . . . . . 8

    1.2 AUTMATAS FINITOS QUE RECONOCEN LENGUAJES REGULARES FINITOS . . . 10

    1.3 AUTMATAS FINITOS QUE RECONOCEN LENGUAJES REGULARES INFINITOS . . 12

    1.4 AUTMATAS FINITOS DETERMINSTICOS . . . . . . . . . . . . . . . . 16

    1.4.1 DEFINICIN FORMAL DE UN AFD . . . . . . . . . . . . . . . . . . 17

    1.4.2 AFD COMPLETO . . . . . . . . . . . . . . . . . . . . . . . . . 19

    1.5 UNA APLICACIN: VALIDACIN DE CADENAS . . . . . . . . . . . . . . 20

    1.6 UNA EXTENSIN DE LA APLICACIN: UNA SECUENCIA DE CADENAS . . . . 22

    2 AUTMATAS FINITOS CON PILA . . . . . . . . . . . . . . . . . . . . 27

    2.1 DEFINICIN FORMAL DE UN AFP . . . . . . . . . . . . . . . . . . . 27

    2.2 AUTMATA FINITO CON PILA DETERMINSTICO (AFPD) . . . . . . . . . 29

    2.2.1 LA TABLA DE MOVIMIENTOS (TM) . . . . . . . . . . . . . . . . . 30

    2.3 AFPDs Y EXPRESIONES ARITMTICAS . . . . . . . . . . . . . . . . . 32

    3 INTRODUCCIN AL PROCESO DE COMPILACIN . . . . . . . . . . . . . . 33

    3.1 CONCEPTOS BSICOS . . . . . . . . . . . . . . . . . . . . . . . . 33

    3.1.1 EL ANLISIS DEL PROGRAMA FUENTE . . . . . . . . . . . . . . . . 33

    3.2 UN COMPILADOR SIMPLE . . . . . . . . . . . . . . . . . . . . . . 36

    3.2.1 DEFINICIN INFORMAL DEL LENGUAJE DE PROGRAMACIN MICRO . . . . 37

    3.2.2 SINTAXIS DE MICRO DEFINICIN PRECISA CON UNA GIC (BNF) . . . 38

    3.2.3 LA ESTRUCTURA DE UN COMPILADOR Y EL LENGUAJE MICRO . . . . . . 39

    3.2.4 UN ANALIZADOR LXICO PARA MICRO . . . . . . . . . . . . . . . . 40

    3.2.4.1 EL AFD PARA IMPLEMENTAR EL SCANNER . . . . . . . . . . . . . 423.2.4.2 CONCLUSIN . . . . . . . . . . . . . . . . . . . . . . . . . 44

    3.2.5 UN PARSER PARA MICRO . . . . . . . . . . . . . . . . . . . . . 45

    3.2.6 LA ETAPA DE TRADUCCIN, LAS RUTINAS SEMNTICAS Y LAAMPLIACIN DE LOS PAS . . . . . . . . . . . . . . . . . . . . . 50

    3.2.6.1 INFORMACIN SEMNTICA . . . . . . . . . . . . . . . . . . . . 51

    3.2.6.2 LA GRAMTICA SINTCTICA DE MICRO CON LOS SMBOLOS DE ACCIN . 51

    3.2.6.3 ALGUNAS RUTINAS SEMNTICAS . . . . . . . . . . . . . . . . . 53

    3.2.6.4 PROCEDIMIENTO DE ANLISIS SINTCTICO (PAS) CON SEMNTICAINCORPORADA . . . . . . . . . . . . . . . . . . . . . . . . . 54

    3.2.6.5 UN EJEMPLO DE ANLISIS SINTCTICO DESCENDENTE Y TRADUCCIN . 55

    4 ANLISIS LXICO, ANLISIS SINTCTICO Y ANLISIS SEMNTICO . . . . . 57

    4.1 INTRODUCCIN A LA TABLA DE SMBOLOS . . . . . . . . . . . . . . . 57

    4.2 EL ANLISIS LXICO . . . . . . . . . . . . . . . . . . . . . . . 58

    4.2.1 RECUPERACIN DE ERRORES . . . . . . . . . . . . . . . . . . . . 61

    4.3 EL ANLISIS SINTCTICO . . . . . . . . . . . . . . . . . . . . . 62

    4.3.1 TIPOS DE ANLISIS SINTCTICOS Y DE GICs . . . . . . . . . . . . 63

  • 7/26/2019 Volumen 2 Def.

    8/90

    SSL 2 6 Muchnik

    4.3.1.1 GRAMTICAS LL Y LR . . . . . . . . . . . . . . . . . . . . . 65

    4.3.2 GRAMTICAS LL(1) Y APLICACIONES . . . . . . . . . . . . . . . . 66

    4.3.3 OBTENCIN DE GRAMTICAS LL(1) . . . . . . . . . . . . . . . . . 68

    4.3.3.1 FACTORIZACIN A IZQUIERDA . . . . . . . . . . . . . . . . . . 68

    4.3.3.2 ELIMINACIN DE LA RECURSIVIDAD A IZQUIERDA . . . . . . . . . 69

    4.3.3.3 SMBOLOS DE PREANLISIS Y EL CONJUNTO PRIMERO . . . . . . . . 70

    4.3.3.3.1 OBTENCIN DEL CONJUNTO PRIMERO . . . . . . . . . . . . . . 714.3.3.3.2 OBTENCIN DEL CONJUNTO SIGUIENTE . . . . . . . . . . . . . 71

    4.3.3.4 LA FUNCIN PREDICEY EL ASDR . . . . . . . . . . . . . . . . 73

    4.3.4 USANDO UN AFP PARA IMPLEMENTAR UN PARSER PREDICTIVO . . . . . . 73

    4.3.5 OTRA VISIN: EL LENGUAJE DE LOS PARNTESIS ANIDADOS, UN AFP YEL PARSER DIRIGIDO POR UNA TABLA . . . . . . . . . . . . . . . 76

    4.3.6 EL PROBLEMA DEL IF-THEN-ELSE . . . . . . . . . . . . . . . . . 77

    4.3.7 ANLISIS SINTCTICO ASCENDENTE . . . . . . . . . . . . . . . . 78

    4.3.7.1 CMO FUNCIONA EL ANLISIS SINTCTICO ASCENDENTE . . . . . . . 78

    4.3.7.2 RECURSIVIDAD EN EL ANLISIS SINTCTICO ASCENDENTE . . . . . . 80

    4.3.7.3 OTRA VISIN: LA IMPLEMENTACIN DE UN PARSER ASCENDENTECOMO UN AFP . . . . . . . . . . . . . . . . . . . . . . . . . 80

    4.3.7.4 EL USO DE yacc . . . . . . . . . . . . . . . . . . . . . . . 81

    4.4 ANLISIS SEMNTICO . . . . . . . . . . . . . . . . . . . . . . . 83

    4.4.1 EN ANSI C: DERIVABLE VS SINTCTICAMENTE CORRECTO . . . . . . . 84

    5 BIBLIOGRAFA . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

    6 EJERCICIOS RESUELTOS . . . . . . . . . . . . . . . . . . . . . . . 87

  • 7/26/2019 Volumen 2 Def.

    9/90

    SSL 2 7 Muchnik

    1 INTRODUCCIN A AUTMATAS FINITOSY APLICACIONES

    Como hemos visto en el Volumen 1, los Lenguajes Regulares se representan en forma precisa pormedio de Expresiones Regulares; aunque tambin pueden ser descriptos mediante frases en unLenguaje Natural (siempre que sea sin ambigedades) o expresados como conjuntos.

    Tambin hemos visto que los Lenguajes Formales son generados por las llamadas GramticasFormales, que se clasifican en diferentes tipos segn la Jerarqua de Chomsky.

    Adems, para completar este panorama, existen diferentes mecanismos abstractos, llamadosAutmatas, que tienen la capacidad de RECONOCER a estos Lenguajes Formales.

    Resumiendo: una Gramtica Formal GENERA un determinado Lenguaje Formal y un AutmataRECONOCE ese Lenguaje Formal. Pero, qu significa reconocer un Lenguaje Formal?

    Un Autmata RECONOCE a un determinado Lenguaje Formal si tiene la capacidad de

    reconocer cada palabra del lenguaje y de rechazar toda cadena que no es una palabra de eselenguaje.

    * Ejercicio 1 *(a) Existir un Autmata que reconozca {ab, abc}? Justifique su respuesta.(b) Si existe, ese Autmata reconoce la cadena abb? Justifique su respuesta.

    Al surgir estos mecanismos abstractos llamados Autmatas, completamos el cuadro de la Jerarquade Chomsky presentado en el Volumen 1, captulo 2, de esta manera:

    G. Formal ->genera: L. Formal ->reconocido por: Autmata

    GR LR Autmata FinitoGIC LIC Autmata Finito con PilaGSC LSC Mquina de TuringG. Irrestricta L. Irrestricto Mquina de Turing

    En la tabla anterior se distinguen tres tipos de Autmatas:

    LosAutmatas Finitos, que solo reconocen a los Lenguajes Regulares;

    LosAutmatas Finitos con Pila(con unstack), que reconocen a los Lenguajes Independientesdel Contexto;

    Las Mquinas de Turing, que reconocen a los Lenguajes Sensibles al Contexto y a los Lenguajes

    Irrestrictos.

    * Ejercicio 2 *(a) Investigue e informe si un Autmata Finito con Pila puede reconocer a un Lenguaje Regular.(b) Investigue e informe si una Mquina de Turing puede reconocer a un Lenguaje Regular.

    En este captulo veremos una importante introduccin a los Autmatas Finitos y su aplicacin. Estosautmatas tienen diversas aplicaciones en el reconocimiento de textos. Una de estas aplicaciones, ymuy til, es la construccin del mdulo del compilador llamado Analizador Lxico, que veremos

  • 7/26/2019 Volumen 2 Def.

    10/90

    SSL 2 8 Muchnik

    en este volumen. Por ello, el presente captulo es importante por s mismo y, adems, es una buenaintroduccin para una mejor comprensin de una aplicacin a nivel de compiladores.

    En el prximo captulo estudiaremos los Autmatas Finitos con Pila, que tambin tienen aplicacinen el diseo de un compilador, tema que nos ocupa en este volumen.

    En el Volumen 3 analizaremos operaciones fundamentales en las que intervienen Autmatas Finitos,y, finalmente, veremos una introduccin a la Mquina de Turing para completar los autmatas queaparecen en la Jerarqua de Chomsky.

    1.1 QU ES UN AUTMATA FINITO?

    Un Autmata Finito (AF) es una herramienta abstracta que se utiliza para reconocer undeterminado LR. En otras palabras: un AF es un modelo matemtico de un sistema que recibe unacadena constituida por caracteres de cierto alfabeto y tiene la capacidad de determinar si esacadena pertenece al LR que el AF reconoce.

    RECONOCER un LR significa aceptar cada cadena que es una palabra del LR y rechazar cadacadena que no pertenece al lenguaje.

    Para realizar esta tarea de reconocimiento, el AF recorre, uno por uno, los caracteres que constituyenla cadena con la que ha sido alimentado. Cada carcter procesado produce un cambio de estado enel AF. Si al terminar de analizar todos los caracteres de la cadena, el AF se encuentra en un estadoespecial llamado ESTADO FINAL o ESTADO DE ACEPTACIN, entonces se afirma que el AFha reconocido a la cadena y que, por lo tanto, sta es una palabra del lenguaje; caso contrario, lacadena es rechazada porque no pertenece al LR tratado. Un AF puede tener varios estados finales.

    Existe otro estado especial en todo AF: el estado en el que se encuentra antes de comenzar suactividad. A este estado se lo denomina ESTADO INICIAL y tiene la caracterstica de ser nico, esdecir: cada AF tiene un nico estado inicial.

    Todo AF tiene asociado un digrafo, llamado DIAGRAMA DE TRANSICIONES (DT), que permitevisualizar, con mayor claridad, el funcionamiento del AF. En este diagrama, los nodos del digraforepresentan los diferentes estados del AF, y los arcos, que representan las transiciones entre losestados, informan cada cambio de estado que ocurre en el AF segn el carcter que ley de lacadena en estudio. Por ello, las TRANSICIONES estarn etiquetadascon smbolos del alfabeto.

    Cada estado del AF tiene un nombre, habitualmente representado por un nmero entero no negativoo una letra, aunque puede ser cualquier otro. El estado inicial se distingue porque se le agrega unsuprandice menos () a su nombre, y cada estado final se diferenciar de los otros estadosmediante el agregado de un suprandice ms ().

    Ejemplo 1

    Sea el LR finito representado por la ER ab; este lenguaje contiene solo la palabra ab. El AF quereconoce este lenguaje tiene asociado el siguiente Diagrama de Transiciones:

  • 7/26/2019 Volumen 2 Def.

    11/90

    SSL 2 9 Muchnik

    0- 1 2

    +a b

    Este AF est formado por tres estados y dos transiciones entre los estados. Los estados son: 0(quees el estado inicial), 1 (que es un estado intermedio) y 2 (que es el estado final o estado deaceptacin). Analicemos distintas situaciones por las que puede atravesar este AF.

    Primer caso: La cadena abpertenece al LR reconocido por este AF?El AF comienza su actividad en el estado inicial (el estado 0) y es alimentado con una cadena,aquella que debe reconocer o rechazar. Supongamos que deseamos que el AF determine si la cadenaabpertenece al lenguaje que es reconocido por este AF. Entonces, el AF lee el primer carcter (a) ydesde el estado 0transitaal estado 1, es decir: cambia de estado. Ahora el AF se encuentra en elestado llamado 1y lee el siguiente carcter de la cadena analizada (b). De acuerdo al DT, el AFcambia al estado 2. El AF no encuentra ms caracteres en la cadena analizada y termina su actividadestando en un estado de aceptacin (estado final). Por lo tanto, se afirma que el AF ha detectado quela cadena abes una palabra del LR que este autmata reconoce.

    La ACTIVIDAD desarrollada por el AF al analizar la cadena ab puede ser descripta de lasiguiente manera: 0=> a => 1 => b => 2+=> RECONOCE.

    Segundo caso: La cadena aes reconocida?Como ya hemos visto, este AF tiene una transicin desde su estado inicial (estado 0), por el carctera, al estado 1. En ese momento, el autmata se encuentra en el estado 1y no tiene ms caracterespara leer. Por lo tanto, la actividad del AF termina en el estado 1que, como se aprecia, no es unestado final. En consecuencia, se afirma que este AF rechaza a la cadena aporque sta no formaparte del LR reconocido por el AF.

    Descripcin de la ACTIVIDAD del autmata: 0=> a => 1 => RECHAZA.

    Tercer caso: La cadena ababes reconocida por este AF?

    El autmata comienza en el estado 0, lee la primera ay transita al estado 1. Luego, lee la primera by cambia al estado 2. Contina la actividad del AF y lee el tercer carcter de la cadena, es decir, lasegunda a. Pero desde el estado 2 no existen transiciones, por lo que el AF no puede seguirtrabajando. En consecuencia, la cadena abab no es reconocida por este AF, a pesar deencontrarse, momentneamente, en un estado final. La cadena tiene ms caracteres que todava nofueron tratados por el AF y ste no sabe cmo procesarlos.

    Descripcin de la ACTIVIDAD del AF: 0=> a => 1 => b => 2 => a => ?? =>RECHAZA.

    Cuarto caso: Otra situacin de rechazo se produce si la cadena comienza con bcomo, por caso, lacadena baa. El AF inicia su actividad en el estado 0, el estado inicial, y no encuentra transicinalguna por el smbolo b. Por lo tanto, el autmata no puede recorrer la cadena con la que se lo haalimentado y, consecuentemente, no la reconoce.

    Descripcin de la ACTIVIDAD del AF: 0=> b => ?? => RECHAZA.

    Los cuatro casos presentados en el ejemplo anterior muestran las diferentes situaciones por lasque puede atravesar un AF. Ante todo, un AF puede tener xito o puede fracasar: tiene xito sireconoce a la cadena dato como palabra del LR que el AF reconoce, y fracasa en caso contrario.Para que el AF tenga xito, existe una nica posibilidad: leer todos los caracteres que forman lacadena y finalizar su actividad en un estado final. Si fracasa, en cambio, puede ser por tres motivos:

  • 7/26/2019 Volumen 2 Def.

    12/90

    SSL 2 10 Muchnik

    (a) lee todos los caracteres de la cadena pero finaliza su actividad en un estado no final, como seaprecia en el segundo caso analizado; o (b) no puede leer todos los caracteres de la cadena, comoocurre en los casos tercero y cuarto; o (c) llega al estado final pero la cadena tiene ms caracteresque el AF no puede procesar, como en el tercer caso.

    Cada AF reconoce un NICO LR. En cambio, para un LR pueden existir muchos AFs que loreconozcan, como veremos ms adelante.

    * Ejercicio 3 *Sea el alfabeto {a, b}y sea el LR {a, aba}.(a) Dibuje el DT de un AF que reconoce este LR.(b) Describa los diferentes casos posibles y sus actividades, como se ha hecho en el Ejemplo 1.

    1.2 AUTMATAS FINITOS QUE RECONOCEN LENGUAJES REGULARES FINITOS

    Los LRs finitos se representan mediante ERs que utilizan tres operadores: concatenacin, uninypotencia, aunque ste ltimo solo es un simplificador de la aplicacin reiterada del operadorconcatenacin.

    En el ejemplo anterior hemos visto cmo se representa una concatenacinen el DTs de un AF: es,simplemente, una transicin concatenada con otra transicin. Analice el diagrama dibujado yverifique que la concatenacin de los caracteres ay bque forman la palabra abse transforma en dostransiciones consecutivas: la primera etiquetada con el carcter a y la segunda etiquetada con elcarcter b.

    El DT para el operador unin es un poco ms complicado porque requiere que, desde un estado,partan dos (o ms) transiciones a, normalmente, diferentes estados.

    Ejemplo 2

    Sea la ER ab+aab, la cual representa un LR con dos palabras. Dado que ambas palabras comienzancon el carcter a, esta expresin tambin puede escribirse as: a(b+ab). Si utilizamos esta segundaexpresin, el DT del AF que reconoce a este LR lo podemos dibujar de la siguiente manera:

    0- 1 2

    +a b

    3

    a

    4+b

    La primera a, que es comn a ambas palabras, mueve al AF desde el estado inicial al estadointermedio 1. Aqu aparece la bifurcacin que implementa al operador unin: un camino conduce alestado final 2, para reconocer a la palabra ab, y el otro camino conduce al estado 3 y luego al estadofinal 4, para reconocer a la palabra aab.

  • 7/26/2019 Volumen 2 Def.

    13/90

    SSL 2 11 Muchnik

    Todo AF es construido sobre un ALFABETO determinado, el cual coincide, por ahora, con eldel LR que reconoce. La cadena que el AF debe procesar slo puede contener caracteres de estealfabeto. Los caracteres que etiquetan las transiciones en el DT de un AF son los que constituyen elalfabeto en cuestin.

    Ejemplo 3

    Sea la ERa+ab+aab

    . Esta ER se ha formado agregndole la palabraa

    a la ER del ejemplo anterior.Dada la similitud que existe entre ambas ERs, es de suponer que tambin sern similares los DTs delos AFs que reconocen a los LRs representados. Efectivamente, as es. El nuevo AF, sobre elalfabeto {a, b}, tiene el siguiente DT:

    3 4+

    0-

    2+

    a b

    a

    b

    1+

    La nica, pero muy importante, diferencia que existe entre este AF y el del ejemplo anterior es que,ahora, el estado 1debe ser un estado final para que se pueda reconocer a la palabra a. Observe quela denominacin estado finalno significa, necesariamente, ltimo estado del AF. Su significado esms amplio: estado de aceptacin, tambin llamado estado de reconocimiento, como ocurre,en este caso, con el estado 1. [Posiblemente, ya lo encontr en la resolucin del Ejercicio 3.]

    No es obligatorio que un AF tenga un estado final para cada palabra del LR reconocido, como se veen el siguiente caso:

    Ejemplo 4Se construye el siguiente AF sobre el alfabeto {0,1}que reconoce un LR que tiene dos palabras. ElAF tiene un solo estado final:

    B C+

    1

    A-

    0

    D

    1 0

    * Ejercicio 4 *Qu LR reconoce este AF? Escriba una ER que lo represente.

    Como conclusin de esta seccin sobre AFs que reconocen Lenguajes Regulares finitos, observeque una palabra de longitud 1es reconocida por un autmata con una transicin y dos estados, unapalabra de longitud 2es aceptada por un autmata con dos transiciones y tres estados, etc.

  • 7/26/2019 Volumen 2 Def.

    14/90

    SSL 2 12 Muchnik

    1.3 AUTMATAS FINITOS QUE RECONOCEN LENGUAJES REGULARES INFINITOS

    En la seccin anterior hemos visto cmo se implementan, en el diseo de un AF, los operadores deconcatenacin y de unin. Las ERs que representan LRs infinitos requieren la utilizacin deloperador estrella de Kleene, tambin llamado simplemente operador estrella, el cual completa latriloga de operadores bsicos para la construccin de estas expresiones.

    El trmino finitoque se agrega a la palabra autmatano significa que estas herramientas solopueden reconocer lenguajes finitos, sino que el nmero de estados de un autmata es finito.

    En un AF, la implementacin del operador estrella aplicado a un solo carcter consiste de unCICLO (o bucle) sobre un solo estado.

    Cada transicin tiene un estado de partida y un estado de llegada. En un CICLO, el estado departida coincide con el estado de llegada.

    Ejemplo 5

    La ERa*

    , que representa al lenguaje{an/ n 0}

    , es reconocida por el siguiente AF:

    0+-

    a

    Este AF, a pesar de tener un solo estado, es mucho ms poderoso que los autmatas con variosestados que se han construido en los ejemplos anteriores, ya que reconoce un LR infinito.

    El LR que acepta este AF incluye a la palabra vaca, palabra que no tiene caracteres. Esto significaque, sin leer carcter alguno, el AF debe colocarse en un estado final que reconozca a esta palabratan particular. Esto se puede lograr si el estado inicial tambin es estado final, circunstancia que serepresenta mediante el smbolo (tambin se puede escribir+) que superindica al estado 0.

    Descripcin de la ACTIVIDAD de este AF:(1) cadena vaca: 0=> 0+=> RECONOCE (reconoce a la palabra vaca)(2) cadena aa: 0=> a => 0 => a => 0+=> RECONOCE(reconoce a la palabra aa)

    Dado que el alfabeto es {a}, este AF reconocer cualquier cadena con la que sea alimentado. Enotras palabras: el AF diseado reconoce el LR Universal sobre el alfabeto {a}.

    Sugerencias para disear un DT:

    (1) Separe siempre el anlisis de las palabras de longitud mnima (palabras particulares), del anlisis

    de varias palabras que representan situaciones generales;(2) Analice tambin cadenas que no son palabras del lenguaje para verificar que no las reconoce.

    Ejemplo 6

    Supongamos el LR representado por la ER a*b; las tres palabras de menor longitud son: b, ab yaab. Para dibujar el DT del AF que reconoce a este LR, debemos tener en cuenta que el autmatadebe funcionar para cualquier cadena que comience con un nmero indeterminado de aes (inclusiveninguna) y que termine con una b. Esto se representa as:

  • 7/26/2019 Volumen 2 Def.

    15/90

    SSL 2 13 Muchnik

    0-

    a

    1+

    b

    Visualicemos la ACTIVIDAD de este AF en el reconocimiento de ciertas palabras del LR y en elrechazo de algunas cadenas que no pertenecen al lenguaje:

    (1) Palabra b: 0=> b => 1+ => RECONOCE(2) Palabra aaab: 0=> a => 0 => a => 0 => a => 0 => b => 1+ => RECONOCE(3) Cadena aaba: 0=> a => 0 => a => 0 => b => 1 => a => ?? => RECHAZA(4) Cadena aaa: 0=> a => 0 => a => 0 => a => 0 => RECHAZA(el estado 0no es final)(5) Cadena baa: 0=> b => 1 => a => ?? => RECHAZA

    * Ejercicio 5 *Disee un AF que reconozca la ER a*bb*a.(a) Dibuje el DT, y(b) Muestre las actividades para diferentes casos, como en el ltimo ejemplo.

    El otro operador que se utiliza en la construccin de ERs que representan LRs infinitos es eloperador clausura positiva, representado con un suprandice +, que es una simplificacin de unaoperacin conjunta entre una concatenacin y una clausura de Kleene, como aa*, cuyas respectivasimplementaciones ya conocemos.

    Ejemplo 7Sea la ER a3b+, forma abreviada de la ER aaabb*. En base a esta ltima expresin, el AF quereconoce al LR representado por esta ER tiene el siguiente DT:

    0 - 2 3 4 +1

    a a a b b

    * Ejercicio 6 *Describa las diferentes actividades de este AF.

    Esta seccin finaliza con una introduccin a la implementacin de AFs que reconozcan ERs mscomplejas. En primer lugar, se presenta la construccin de un AF que reconoce una ExpresinRegular Universal (ERU).

    Ejemplo 8Sea la ERU (0+1)*. El AF ms simple que reconoce a esta expresin es:

    A -0,1

    La notacin 0,1que significa 0 o 1etiqueta la nica transicin dibujada en este AF, un ciclo,pero es una simplificacin de la existencia de dos transiciones: una etiquetada con el carcter 0, y laotra etiquetada con el carcter 1. Observemos el siguiente anlisis de la actividad del autmata:

  • 7/26/2019 Volumen 2 Def.

    16/90

    SSL 2 14 Muchnik

    (1) palabra vaca:A=> A+ => RECONOCE(2) palabra 0:A=> 0 => A+ => RECONOCE(3) palabra 111:A=> 1 => A => 1 => A => 1 => A+ => RECONOCE(4) palabra 01101:A=> 0 => A => 1 => A => 1 => A => 0 => A => 1 => A+ => RECONOCE

    Si un AF reconoce a un Lenguaje Universal sobre cierto alfabeto (como el del ejemplo anterior),

    ninguna cadena podr ser rechazada.

    Ejemplo 9

    Sea la ER a(a+b)*c, en la que la ERU sobre {a,b}es uno de sus factores de esta expresin. El AFms simple que reconoce a este LR tiene el siguiente DT:

    0- 1 2

    +a c

    a,b

    Este DT muestra, en primer lugar, que cualquier palabra reconocida por este autmata debecomenzar con el carcter a(transicin del estado 0al estado 1) y que debe terminar con el carcter c(transicin del estado 1al estado 2). En segundo lugar, se observa que hay un ciclo (bucle) en elestado 1 etiquetado con los caracteres ay b.

    Descripcin de la ACTIVIDAD del AF:(1) palabra ac(es la palabra de mnima longitud): 0=> a => 1 => c => 2+ => RECONOCE(2) palabra abaac: 0=> a => 1 => b => 1 => a => 1 => a => 1 => c => 2+ => RECONOCE(3) cadena abb: 0=> a => 1 => b => 1 => b => 1 => RECHAZA(no es un estado final)(4) cadena vaca: 0=> 0 => RECHAZA(no es un estado final)(5) cadena acc: 0=> a => 1 => c => 2 => c => ?? => RECHAZA

    * Ejercicio 7 *Sea el LR representado por la ER (a+b+c+d)*.(a) Dibuje el DT de un AF que reconozca este LR;(b) Describa la actividad del AF diseado.

    Otra situacin interesante se presenta cuando el operador clausura de Kleene acta sobre unaconcatenacin, como en el siguiente caso:

    Ejemplo 10Sea la ER (ab)*. Esta expresin representa al LR que contiene la palabra vaca y toda otra palabraque se forma con secuencias del par de caracteres ab. En consecuencia, el AF que implemente a estaER debe reconocer tanto a la palabra vaca (caso particular) como al caso general citado. Un DTvlido es el siguiente:

    2+1

    a b

    a

    0

  • 7/26/2019 Volumen 2 Def.

    17/90

    SSL 2 15 Muchnik

    Observe el cicloformado por las transiciones que relacionan a los estados 1y 2, para reconocer lossiguientes pares ab(desde el segundo par en adelante).

    Descripcin de la ACTIVIDAD del AF:(1) palabra vaca: 0=> 0+ => RECONOCE(2) palabra ab: 0=> a => 1 => b => 2+ => RECONOCE

    (3) palabra abab: 0

    => a => 1 => b => 2 => a => 1 => b => 2+ => RECONOCE(4) cadena aba: 0=> a => 1 => b => 2 => a => 1 => RECHAZA(no es estado final)(5) cadena abb: 0=> a => 1 => b => 2 => b => ?? => RECHAZA

    * Ejercicio 8 *Dado el AF del ejemplo anterior, describa su actividad para la cadena abababa.

    Ejemplo 11Otro AF que reconoce a la misma ER (ab)*tiene el siguiente DT:

    1a

    0

    b

    * Ejercicio 9 *Describa la actividad de este AF para las mismas palabras y cadenas del Ejemplo 10. (vaca, ab,abab, aba, abb

    Finalmente, se presenta un ejemplo de un AF que reconoce a una ER en la que uno de sus factoreses una clausura de la forma analizada en los dos ejemplos anteriores:

    Ejemplo 12

    Sea la ER 1(10)*0. Un AF que la reconoce tiene el siguiente DT:

    A- B C

    1 1

    D+

    0

    0

    Descripcin de la actividad del autmata:(1) palabra 10(palabra de longitud mnima):A=> 1 => B => 0 => D+ => RECONOCE(2) palabra 1100:A=> 1 => B => 1 => C => 0 => B => 0 => D+ => RECONOCE(3) cadena 110:A=> 1 => B => 1 => C => 0 => B => RECHAZA(no es un estado final)(4) cadena 01:A=> 0 => ?? => RECHAZA

    * Ejercicio 10 *(a) Dibuje el DT de un AF que reconoce el lenguaje a(ab)+.(b) Describa la actividad del AF para diferentes palabras y cadenas.

  • 7/26/2019 Volumen 2 Def.

    18/90

    SSL 2 16 Muchnik

    Esta ha sido solo una introduccin al diseo de AFs. Se puede agregar que, adems, se trata de unaintroduccin informal, ya que, como veremos en el Volumen 3, existen algoritmos que nospermitirn implementar formalmente a los AFs que reconocen determinadas ERs, por mscomplicadas que estas expresiones sean. Por ejemplo, el diseo de un AF que reconozca al LRrepresentado por la ER a*+abno es tan sencillo como parece.

    * Ejercicio 11 *(a) Dibuje un DT de un AF que reconozca al LR representado por la ER a*+ab.(b) Describa la actividad del AF para varias palabras y cadenas.

    Un Autmata Finito reconoce a un Lenguaje Regular cuando aceptacada palabra del lenguaje yrechazatoda cadena que no es una palabra del lenguaje.

    1.4 AUTMATAS FINITOS DETERMNISTICOS

    Como ya se ha dicho, un AF es un mecanismo que RECONOCE a un determinado LR. Reconocera un lenguaje significa aceptarcada cadena que pertenece al lenguaje es decir, cada cadena quees una palabray rechazartoda cadena que no pertenece al lenguaje.

    Todos los DTs dibujados hasta el momento pertenecen al grupo de AFs denominado AUTMATASFINITOS DETERMINSTICOS (AFDs), cuya caracterstica funcional es que para cualquier estadoen que se encuentre el autmata en un momento dado, la lectura de un carcter determina, SINAMBIGEDADES, cul ser el estado de llegada en la prxima transicin.

    Existe otro grupo de AFs, el de los AUTMATAS FINITOS NO DETERMINSTICOS (AFNs),que no cumple con lo indicado en el prrafo anterior y que ser tratado en el Volumen 3.

    Se ha especificado que un AF es determinstico cuando, dado un carcter que es ledo por elautmata, ste transita desde un estado de partida a un estado de llegada preciso, es decir: el estadode llegada est unvocamente determinado por el estado de partida y el carcter ledo por elautmata. En otras palabras: cada estado del AF tiene cero o una transicin por cada carcter delalfabeto reconocido por el autmata.

    Un AFD es una coleccin de tres conjuntos, como ya hemos apreciado en las secciones anteriores:

    (1)Un conjunto finito de estados,uno de los cuales se designa como el estado inicial (nico) yotros (uno o ms) son designados como estados finaleso estados de aceptacin;

    (2)Un alfabeto de caracteres con los que se forman las cadenas que sern procesadas por el AFD;

    (3)Un conjunto finito de transiciones que indican, para cada estado y para cada carcter delalfabeto, a qu estado debe moverse el AFD.

  • 7/26/2019 Volumen 2 Def.

    19/90

    SSL 2 17 Muchnik

    Ejemplo 13A continuacin se dibuja el DT de un AFD formado por:(a) Conjunto de estados: 0, el estado inicial; 1, un estado intermedio; 2y 3, estados finales.(b) Alfabeto: los caracteres ay b.(c) Conjunto de transiciones: i) desde el estado 0al estado 1por el carcter a, ii) desde el estado 1al estado 2 por el carcter ay al estado 3por el carcter b, y iii) en el estado 3, un ciclo por el

    carcter a. Esta descripcin se representa ms claramente de esta manera:i) 0 => a = 1; ii) 1 => a => 2 y 1 => b => 3; iii) 3 => a => 3.

    0- 1 2

    +

    3+

    a a

    b

    a

    1.4.1 DEFINICIN FORMAL DE UN AFD

    Formalmente, un AFD es una 5-upla (Q, , T, q0, F), donde:Qes un conjunto finito de estados,es el alfabeto de caracteres reconocidos por el autmata,q0Qes el estado inicial (nico, no es un conjunto),F Qes el conjunto de estados finales, yT: Q x ->Qes la funcin de transiciones; es decir: T (q, x) = z significa que zes el estado alcual transita el autmata desde el estado q, al leer el carcter x, transicin que tambin podemos

    simbolizar as: q => x => z. En esta ltima notacin se ve ms claramente cul es el estado departida y cul es el estado de llegada en cada transicin.

    Generalmente, la funcin de transiciones es representada por medio de una TABLA DETRANSICIONES (TT), tal como se muestra en el prximo ejemplo.

    Ejemplo 14

    El AFD del Ejemplo 13 se define formalmente de la siguiente manera:M = (Q, , T, q0, F), donde:Q = {0,1, 2, 3};= {a, b};

    q0= 0;F = {2,3};T = {0 => a => 1, 1 => a => 2, 1 => b => 3, 3 => a => 3}.Si la funcin de transiciones Tes representada mediante una TT, obtenemos el siguiente resultado:

    TT a b0- 1 -1 2 32+ - -3+ 3 -

  • 7/26/2019 Volumen 2 Def.

    20/90

    SSL 2 18 Muchnik

    Esta tabla tiene una fila por cada estado del autmata y una columna por cada smbolo del alfabeto.Se lee as: desde el estado 0(inicial), por atransita al estado 1y por bno hay transicin; desde elestado 1, por a transita al estado 2 y por b transita al estado 3; el estado 2 (final) no tienetransiciones; y desde el estado 3 (final), por a tiene un ciclo y por b no hay transicin, como sepuede corroborar observando en el DT dibujado en el Ejemplo 13.

    Ejemplo 15Supongamos el lenguaje Todas las palabras de aes y/o bes que tienen por lo menos dos letras. Lasque siguen son las cuatro palabras de menor longitud de este lenguaje: aa, bb, ab, ba. El diagramade transiciones de un AFD que reconoce este LR infinito es:

    0- 1 2

    +a,b a,b a,b

    En este DT, todas las transiciones tienen la particularidad de estar etiquetadas con a,b. En realidad,

    cada etiqueta a,bsignifica dos transiciones diferentes: una por el carcter ay otra por el carcter b,ambas con el mismo estado de partida y el mismo estado de llegada. El uso de la etiqueta a,bsimplifica el dibujo.

    La definicin formal de este AFD es M = (Q, , T, q0, F), donde:Q = {0, 1, 2}; = {a, b};q0= 0; F = {2}; Trepresentada por la siguiente tabla de transiciones:

    TT a b0- 1 11 2 22+ 2 2

    Una diferencia inmediata que se observa al comparar las TTs de los Ejemplos 14 y 15, es que la TT

    del Ejemplo 14 tiene huecoscuatro, para ser ms precisoque indican ausencia de transiciones,mientras que la tabla del Ejemplo 15 est COMPLETA.

    * Ejercicio 12 *Escriba la definicin formal un AFD que reconozca el LR "Todas las palabras sobre el alfabeto{a,b,c}que tienen por lo menos tres letras". Represente la funcin de transiciones mediante una TT.

    1.4.2 AFD COMPLETO

    Un AFD es completo si cada estado tiene exactamente una transicin por cada carcter del

    alfabeto.Otra definicin equivalente es:

    Un AFD es completocuando su tabla de transiciones no tiene huecos; si los tiene, el AFD esincompleto.

    La nocin de AFD completo es muy importante en las aplicaciones computacionales de los AFDs,porque, como veremos ms adelante, un AFD se implementa mediante una matriz que representa ala TT y esta matriz, obviamente, no puede tener elementos sin informacin. En consecuencia, si el

  • 7/26/2019 Volumen 2 Def.

    21/90

    SSL 2 19 Muchnik

    AFD constituye una herramienta que ser implementada y no es completo, la primera accin arealizar es completarlo.

    COMPLETAR un AFD significa eliminar los huecos de su TT. Para ello, debemos llevar a cabolos siguientes pasos:

    (1) Se agrega un nuevo estado, al que denominamos ESTADO DE RECHAZO o ESTADO DE NO

    ACEPTACIN;(2) Se reemplaza cada "hueco" que hay en la TT por una transicin a este nuevo estado; y

    (3) Se incorpora una nueva entrada en la TT para el estado de rechazo, en la que se representarnciclos para todos los caracteres del alfabeto; con estos ciclos se informa que, una vez que el AF sesita en el estado de rechazo, de l no puede salir.

    Ejemplo 16Se desea completar el AFD del Ejemplo 14: M = (Q, , T, q0, F), donde: Q = {0,1,2,3}; = {a,b};q0= 0; F = {2,3}; y T representada por la TT:

    TT a b0- 1 -1 2 32+ - -3+ 3 -

    Para completar el AFD, agregamos un estado de rechazo (supongamos que este estado se llama 4).Entonces, el nuevo AFD es: M2= (Q, , T, q0, F), con Q = {0, 1, 2, 3, 4}; = {a, b};q0= 0;F = {2, 3}; y T representada por la TT:

    TT a b0- 1 41 2 32+ 4 43+ 3 44 4 4

    Observe que la lectura de un carcter errneo provoca que el AFD transite al estado de rechazo (elestado 4), del cual nunca podr salir porque, como se distingue en la ltima fila, este estado tiene unciclo a s mismo por cualquier carcter del alfabeto.

    Se ha obtenido, entonces, un nuevo AFD, con un nuevo conjunto de estados Qy una nueva funcinde transiciones T, que reconoce el mismo lenguaje que es aceptado por el Autmata Finito del cualse parti. Este hecho conduce a la siguiente definicin:

    Dos AFDs son EQUIVALENTES si reconocen el mismo Lenguaje Regular.

    Nota 1Si bien desde el punto de vista terico los AFDs no estn obligados a ser completos, desde el puntode vista prctico es necesario trabajar con AFDs completos. Por lo tanto, de aqu en msadoptaremos el siguiente criterio: Cuando construimos un AFD y dibujamos su DT, no agregamos elestado de rechazo para que el dibujo quede ms limpio y as sea ms sencilla su interpretacin;pero cuando este DT es representado mediante la TT, esta TT debe ser completa, porque ciertasoperaciones que veremos en el Volumen 3 y, en general, el mbito computacional lo exigen.

  • 7/26/2019 Volumen 2 Def.

    22/90

    SSL 2 20 Muchnik

    * Ejercicio 13 *Sea el AFD definido formalmente de la siguiente manera: M = (Q, , T, q0, F), donde:

    Q = {0,1, 2, 3};= {a,b,c};q0= 0;F = {2,3};

    T = {0 => a => 1, 1 => c => 2, 1 => b => 3, 3 => a => 3}.(a) Describa, formalmente, el AFD equivalente con la TT completa.(b) Escriba una ER que represente al LR reconocido por este AFD.(c) Describa las actividades de este AFD para todos los casos posibles.

    1.5 UNA APLICACIN: VALIDACIN DE CADENAS

    Los AFs reconocen LRs. En consecuencia, toda aplicacin que requiera el RECONOCIMIENTO deLRs podr resolverse mediante la construccin y el procesamiento de AFs que acepten a estoslenguajes.

    Una aplicacin en la que resulta muy til contar con un AF se puede definir as:

    determinar si una cadena dada corresponde a un patrn preestablecidoque corresponde a un lenguaje infinito

    En otros trminos, esto significa verificar si una cadena es una palabra de un LR infinito dado.

    Ejemplo 17Consideremos el LR: Todos los nmeros enteros en base 10 que pueden estar precedidos por unsigno. Algunas palabras de este lenguaje son: 6, 1234, 47822, +9876543210, 000. Algunascadenas que no pertenecen a este lenguaje son: 123A, *66, 14.23. La verificacin de que unacadena dada representa una palabra del lenguaje enunciado (un nmero entero en base 10), es unproblema que se puede resolver con un AF.

    Para resolver el problema planteado debemos simular, mediante un algoritmo adecuado, elfuncionamiento de un AF que reconoce este LR. Entonces, se comienza construyendo un AFDcompleto que reconoce al LR dado.

    Posteriormente, se aplica el siguiente algoritmo que recorre todos los caracteres de la cadena, paraluego determinar si es o no una palabra del LR:

    Algoritmo 1- Carcter a analizar: primer carcter de la cadena- Estado actual del autmata: estado inicial- Mientras haya caracteres en la cadena, repetir:(1) Determinar el nuevo estado actual (estado de llegada de la

    transicin)(2) Actualizar el carcter a analizar

    - Si el ltimo estado actual es un estado final, entonces la cadenaprocesada es una palabra del lenguaje; caso contrario, la cadena nopertenece al lenguaje.

  • 7/26/2019 Volumen 2 Def.

    23/90

    SSL 2 21 Muchnik

    * Ejercicio 14 *(a) Dibuje el DT e implemente la TT que resuelve el problema del Ejemplo 17, considerando que elalfabeto original son todos los caracteres ASCII. Para simplificar, supondremos que el alfabeto delAFD est formado por tres smbolos: S, que representa a cualquiera de los dos signos; D, querepresenta a cualquiera de los diez dgitos decimales; y O, que representa a cualquier otro carcter.(b) Recorra el Algoritmo 1 para la cadena1234;

    (c) Recorra el Algoritmo 1 para la cadena 12*34.(d) Implemente el Algoritmo 1 mediante una funcin en ANSI C, suponiendo que ya existe unafuncin auxiliar tal que, dado un carcter, retorna el nmero de columna que le corresponde en la TTdel AFD construido.(e) Implemente, en ANSI C, la funcin auxiliar utilizada en el tem anterior.

    Existe otro algoritmo que termina el proceso, antes de recorrer la cadena completa, si detecta que elestado actual es el estado de rechazo:

    Algoritmo 2- Carcter a analizar: primer carcter de la cadena

    - Estado actual del autmata: estado inicial- Mientras haya caracteres en la cadena y el estado actual no sea el derechazo, repetir:(1) Determinar el nuevo estado actual (estado de llegada de la

    transicin)(2) Actualizar el carcter a analizar

    - Si el ltimo estado actual es un estado final, entonces la cadenaprocesada es una palabra del lenguaje; caso contrario, la cadena nopertenece al lenguaje.

    * Ejercicio 15 *a) Resuelva el problema del Ejemplo 17 utilizando el Algoritmo 2.

    b) Implemente este algoritmo mediante una funcin en ANSI C.

    Un Anlisis Elemental del Algoritmo que Conviene Utilizar

    (1) En elAlgoritmo 2, la condicin del mientras es ms compleja que la condicin del Algoritmo1; esta mayor complejidad implica ms tiempo de procesamiento en ciertas condiciones.

    (2) Por ello, si la gran mayora de las cadenas a analizar son palabras del LR, conviene usar elAlgoritmo 1. Si se da la situacin inversa, es recomendable usar elAlgoritmo 2.

    * Ejercicio 16 *a) Qu ocurre si las cadenas son muy largas y hay una probabilidad de error muy alta en losprimeros caracteres de la cadena? Investigue e informe.

    b) Y qu ocurre si las cadenas son muy largas y hay una gran probabilidad de error en los ltimoscaracteres de la cadena? Investigue e informe.

    Para concluir esta seccin, incorporamos un concepto que ser clave en muchas de las situacionesque se presenten en este y en prximos captulos: el centinela. Cuando existe una secuencia decaracteres que debemos procesar desde el primero hasta el ltimo carcter, necesitamos conocercundo termina esa secuencia. Existen dos formas de hacerlo: a) conocemos la longitud de lasecuencia, o b) la secuencia termina con un centinela.

  • 7/26/2019 Volumen 2 Def.

    24/90

    SSL 2 22 Muchnik

    Entonces, un centinela es un carcter o un grupo de caracteres que indica la terminacin de unasecuencia de caracteres, pero no forma parte de esta secuencia.

    Ejemplo 18

    a) Un archivo de texto es una secuencia de caracteres que termina con un carcter o grupo decaracteres conocido como end of file (eof). El eofno pertenece al contenido del archivo a

    procesar y acta como centinela.b) En ANSI C, la cadena "abc"se implementa, internamente con estos tres caracteres ms elcarcter nulo; esto es: abc\0. El carcter nulo acta como centinela.

    1.6 UNA EXTENSIN DE LA APLICACIN: UNA SECUENCIA DE CADENAS

    Finalizamos este captulo con una aplicacin que extiende la que fue analizada en la seccinanterior: la entrada ya no es una sola cadena sino que es un texto. Esta aplicacin prepara el terrenopara el estudio delAnlisis Lxicoen un compilador, tema que veremos a partir del captulo 3.

    Llamamos texto a una secuencia de caracteres, formada, generalmente, por varias cadenas, quetermina con un centinela. El texto puede encontrarse en un soporte interno (un vector) o en unsoporte externo (un archivo de texto). En este ltimo caso, tambin lo llamaremos flujo de entrada.

    Supongamos que existe un texto formado por cadenas separadas entre s con un carcter numeral(#); obviamente, este carcter # acta como centinela para cada cadena con excepcin de la ltimacadena del texto.

    * Ejercicio 17 *Investigue e informe cul ser el centinela de la ltima cadena del texto.

    Sea el LR definido en el Ejemplo 17: Todos los nmeros enteros en base 10 que pueden estarprecedidos por un signo.Debemos reconocer cules de las cadenas de este textoson palabras delLR descripto. Por ejemplo, supongamos que el texto est formado por estos caracteres:

    -123#4A67#01234567#ZZZZZZ#86-0,2;4/#+1234123#b444

    Entonces, el algoritmo que construyamos debera reconocer tres palabras en este texto.

    * Ejercicio 18 *Informe: Cules son esas tres palabras? Por qu decimos palabras y no nmeros?

    Disearemos un AFD que reconozca las palabras y lo implementaremos en un pseudo-cdigo,basndonos en lo ya aplicado para definir el Algoritmo 1. Adems, debemos considerar que existen

    cinco clases de caracteres que necesitamos distinguir, por el significado que le corresponde a cadaclase:(1) el conjunto formado por los dos signos;(2) el conjunto formado por los diez dgitos decimales;(3) el conjunto formado solo por el #, que acta como centinela de una cadena y tambincomo separador de dos cadenas consecutivas del texto;(4) el conjunto formado por los restantes caracteres de la tabla ASCII (lo denominamosotro); y(5) el centinela que indica el fin del texto (la llamaremos fdt).

  • 7/26/2019 Volumen 2 Def.

    25/90

    SSL 2 23 Muchnik

    RESOLUCIN

    Debemos disear un AFD completo que resuelva este problema. Esto significa que, para cadaestado, habr una transicin para todos los caracteres de cada una de las clases descriptas en elprrafo anterior; en otras palabras, de cada estado saldrn cinco transiciones, una por cada clase. La

    nica excepcin es el estado de llegada para las transiciones porfdt

    porque, evidentemente, el textono tiene ms caracteres a tratar. Describamos las transiciones del AFD que construimos:

    TRANSICIN COMENTARIO0=> signo => 1 Primer carcter de la cadena es un signo; es un posible

    nmero entero1 => dgito => 2 Primer dgito de un posible nmero entero2 => dgito => 2 Ms dgitos de un posible nmero entero2 => # => 3+ Detect el centinela de una cadena; ES un nmero entero y

    hay ms cadenas para analizar2 => fdt => 4+ Detect el centinela del texto; ES un nmero entero y es la

    ltima cadena del texto0=> dgito => 2 Primer dgito de un posible nmero entero0=> # => 0 Cadena vaca0=> fdt => 6 Fin del texto0=> otro => 5 No es un nmero entero1 => # => 0 Para analizar prxima cadena, si existe1 => signo, otro => 5 No es un nmero entero1 => fdt => 6 Fin del texto2 => signo, otro => 5 No es un nmero entero3 => signo => 1 Primer carcter de la cadena es un signo; es un posible

    nmero entero

    3 => dgito => 2 Primer dgito de un posible nmero entero3 => # => 0 Para analizar prxima cadena, si existe3 => otro => 5 No es un nmero entero3 => fdt => 6 Fin del texto5 => signo, dgito, otro => 5 No es un nmero entero5 => # => 0 Para analizar prxima cadena, si existe5 => fdt => 6 Fin del texto

    * Ejercicio 19 *Desde el estado2 salen dos transiciones que llegan a dos estados finales diferentes. No podramos,como ocurre con otras transiciones, etiquetarlas con #,fdt y que lleguen a un nico estado final?

    Justifique su respuesta.

    * Ejercicio 20 *Dibuje el DT del AFD que ha sido descripto, mediante sus transiciones, en la tabla anterior.

  • 7/26/2019 Volumen 2 Def.

    26/90

    SSL 2 24 Muchnik

    A continuacin, construimos la Tabla de Transiciones que implementa el AFD descripto:

    Estado Signo Dgito # Otro fdt0 1 2 0 5 61 5 2 0 5 62 5 2 3 5 4

    3+

    1 2 0 5 64+5 5 5 0 5 66 (fdt)

    ANLISIS:

    (1) Los estados 0 (inicial) y 3 (final) tienen las mismas transiciones, como se observa si secomparan las filas respectivas. Esto ocurre porque, en ambos estados, se comienza el anlisis de unacadena del texto.

    (2) Analicemos las columnas. La columna correspondiente a la clase signomuestra que la lectura deuno de ellos conduce al estado 1nicamente si es el primer carcter de una cadena del texto; en losrestantes casos, el estado de llegada es el estado 5. Este ltimo estado juega el papel de estado derechazo o de no reconocimiento.

    (3) La columna de la clase dgitomuestra que mientras el carcter ledo sea correcto para detectarun nmero entero, el estado de llegada siempre ser el 2; solo ser el estado 5cuando el dgito ledoest en medio de otros caracteres y, por lo tanto, nunca pueda formar parte de un nmero.

    (4) El carcter # es el centinela de cada cadena excepto la ltima y, adems, acta comoseparador de cadenas del texto. Por lo tanto, si al leerlo se detect un nmero entero, realiza unatransicin al estado final 3; en cualquier otro caso, vuelve al estado 0para iniciar el tratamiento deuna nueva cadena.

    (5) La columna de la clase otromuestra lo que ocurre cuando se lee un carcter no vlido para un

    nmero entero.(6) El centinela fdt tiene un tratamiento especial, porque seala que no hay ms caracteres en eltexto. Pero se debe separar el caso en que la ltima cadena del texto es una constante entera de losrestantes casos. Y esta diferenciacin aparece claramente expresada por los estados 4y 6.

    A continuacin, veamos un algoritmo en pseudo-cdigo que implementa una solucin a esteproblema.

    Algoritmo 3- Intenta leer primer carcter del texto (porque el texto puede estarvaco)

    - Mientras no sea fdt, repetir:(1) Estado actual del autmata: estado inicial(2) Mientras no sea un estado final y no sea el estado FDT, repetir:

    (2.1) Determinar el nuevo estado actual(2.2) Actualizar el carcter a analizar

    (3) Si el estado es final, la cadena procesada es una constante entera;caso contrario, la cadena no pertenece al lenguaje.

  • 7/26/2019 Volumen 2 Def.

    27/90

    SSL 2 25 Muchnik

    * Ejercicio 21 *a) Sea una funcin ANSI C cuyo prototipo es int Columna (int); Esta funcin recibe un carcter yproduce el nmero de columna que le corresponde en la matriz que implementa la TT de laaplicacin que estamos desarrollando. Construya esta funcin.b) Con la ayuda de la funcin auxiliar Columnay delAlgoritmo 3, escriba un programa en ANSI Cque implemente la aplicacin desarrollada.

    * Ejercicio 22 *Sea un texto formado por cadenas separadas con un #. Sea el LR de todas las palabras sobre elalfabeto ASCII cuyo segundo carcter es unaA(mayscula o minscula). Disee e implemente unAFD que cuente cuntas palabras de este LR hay en el texto dado. Por ejemplo: si la cadena es132bx#4azz,dem#Azz#zAz#aaaaaa#012345el AFD debe determinar que hay 3 palabras.

    Hiptesis de Trabajo:a) El texto a analizar termina con un centinela que denominamos fdt(fin de texto).b) En la resolucin, describimos en un pseudo-cdigo la o las acciones que se lleven a cabo en unestado determinado. Ejemplo: en el estado inicial se debe inicializar el contador de palabras.c) El alfabeto para este AFD est formado por cuatro elementos: i)A, que corresponde tanto a la 'A'

    como a la 'a'; ii) #, que separa cadenas; iii) fdt, que representa el fin del texto; iv) cq, que representacualquier otro carcter.

    * Ejercicio 23 *a) Escriba, en ANSI C, un programa que implemente la solucin del ejercicio anterior y retorne lacantidad de palabras encontradas. Considere que el texto se halla en el flujo de entrada stdin.b) Investigue e informe qu es stdin.

  • 7/26/2019 Volumen 2 Def.

    28/90

    SSL 2 26 Muchnik

  • 7/26/2019 Volumen 2 Def.

    29/90

    SSL 2 27 Muchnik

    2 AUTMATAS FINITOS CON PILA

    Los AUTMATAS FINITOS CON PILA (AFPs), tambin conocidos como autmatas push-down, son ms poderosos que los Autmatas Finitos porque, adems de reconocer a los LenguajesRegulares, tienen la capacidad de reconocer a los LICs, como son, por ejemplo, las expresionesaritmticas y las sentencias de un Lenguaje de Programacin.

    Antes de continuar, recordemos: Un LIC es un Lenguaje Formal que es generado por una GIC. LaGIC tiene la caracterstica que toda produccin es del tipo:

    noterminal ->(terminal + noterminal)*

    Ejemplo 1

    Sea el lenguajeL1 = {anbn/ n 1}. Este lenguaje es un LIC, no es un LR.L1que puede ser generado por una GIC con estas producciones: S ->aSb | ab.

    * Ejercicio 1 *a) Investigue e informe porqu el lenguaje del Ejemplo 1 no es un LR.

    b) Demuestre que las producciones dadas en el Ejemplo 1 generan a L1.

    Volviendo al AFP, decamos que ste tipo de autmata es ms poderoso que el Autmata Finito.Esta potencialidad extra del AFP se debe a que, adems de tener estados y transiciones entre losestados, como los AFs, el AFP tiene una memoria en forma de PILA (stack) que permite almacenar,retirar y consultar cierta informacin que ser til para reconocer a los LICs. En otras palabras: unAF solo tiene control sobre los caracteres que forman la cadena a analizar, mientras que un AFPcontrola los caracteres a analizar y la pila.

    * Ejercicio 2 *Informe cmo hace un AF para controlar los caracteres de la secuencia de entrada.

    Hopcroft y Ullman [1979] afirman que el AFP es un dispositivo no-determinstico y que la versindeterminstica solo acepta un subconjunto de la totalidad de LICs. Pero, afortunadamente, estesubconjunto incluye la sintaxis de la mayora de los Lenguajes de Programacin.

    * Ejercicio 3 *Investigue e informe qu es un AFP no-determinstico.

    2.1 DEFINICIN FORMAL DE UN AFP

    Un AFP est constituido por:a) un flujo de entrada, infinito en una direccin, que contiene la secuencia de caracteres que debeanalizar, similar a un AF;

    b) un control finitoformado por estados y transiciones etiquetadas, similar a un AF; y

    c) una pila abstracta, que establece la gran diferencia con los AFs. Esta pila se representa comouna secuencia de smbolos o caracteres tomados de cierto alfabeto, diferente al alfabeto sobre el quese construye un LIC reconocido por un AFP. En la pila, el primer carcter de la secuencia es el quese encuentra en el tope de la pila (esto es solo una convencin).

  • 7/26/2019 Volumen 2 Def.

    30/90

    SSL 2 28 Muchnik

    Definamos formalmente un AFP como la 7-upla M = (E, A, A', T, e0, p0, F), donde: Ees un conjunto finito de estados Aes el alfabeto de entrada, cuyos caracteres se utilizan para formar la cadena a analizar A'es el alfabeto de la pila e0 es el estado inicial

    p0es el smbolo inicialde la pila, el que indica que la pila no tiene smbolos F es el conjunto de estados finales T es la funcin T: E x (A {}) x A' ->conjuntos finitos deE x A'*

    Ejemplo 2

    Analicemos qu significa la notacin de la funcin T,con un caso particular:T(4,a,Z) = { (4,RPZ), (5,) }

    Esta notacin se lee as: si el AFP se encuentra en el estado 4, en el tope de la pila tiene el smbolo Zy lee el carcter a del flujo de entrada, entonces se queda en el estado 4y agrega RPa la pila, (aqu est el no-determinismo del AFP) se mueve al estado 5y quita el smbolo Z que est en el topede la pila.

    Una aclaracin importante. La forma de procesar la pila es la siguiente: 1) el AFP realiza unpopdelsmbolo que est en el tope de la pila; 2) el AFP realiza unpushde los smbolos indicados, siendo elprimero el que quedar en el tope. En la transicin de este ejemplo, el AFP hace unpopdel smboloZe, inmediatamente despus, unpushde Z, luego Py , finalmente, R, que es el nuevo smbolo deltope de la pila. En el otro caso, significa que no agrega smbolos a la pila, solo hace el popdelsmbolo que est en el tope.

    * Ejercicio 4 *Investigue e informe: sea la transicin T(4,,Z) = { (5,RP) }. Describa qu significa.

    Antes de pasar a analizar los AFP deterministas, es importante conocer este concepto:

    un AFP puede reconocer un LIC de dos maneras:1) por estado final, como en los AFs;2) por pila vaca

    * Ejercicio 5 *Investigue e informe qu significa lo escrito en el ltimo recuadro.

    * Ejercicio 6 *Investigue e informe si existe alguna forma de diagramar un AFP en forma similar al Diagrama de

    Transiciones de un Autmata Finito.

  • 7/26/2019 Volumen 2 Def.

    31/90

    SSL 2 29 Muchnik

    2.2 AUTMATA FINITO CON PILA DETERMINSTICO (AFPD)

    En esta seccin definiremos y trabajaremos con un AFPD. Si incluimos el flujo de entrada en ladefinicin, entonces un AFPD est formado por una coleccin de estos ocho elementos:

    Un alfabeto de entrada A. Son los smbolos con los que se forman las palabras del LIC areconocer. Hay un smbolo especial al que llamaremos fdc (fin de cadena), que solo puede

    aparecer al final de la cadena en estudio para indicar su terminacin. Un flujo de entradainfinito en una direccin, que contiene la cadena a analizar. Un alfabetoAde smbolos de la pila. Hay un smbolo especial, al que llamaremos, $, que

    indica pila lgicamente vaca. Una pila (stack) infinita en una direccin. Inicialmente la pila est vaca, lo que se indica

    mediante el smbolo especial $en el tope de la pila. Un conjunto finito y no vaco de estados E. Un estado inicial (nico). Un conjunto de estados finales o de aceptacin. Una funcin de transiciones entre los estados que definimos de la siguiente forma:

    T: E x (A {}) x A' ->E x A'*

    Primera forma de movimiento. Si a A, entonces T(e, a, R) = (e, ) indica: si el AFPD seencuentra en el estadoe, lee el smbolo de entradaa y tiene el smboloR en el tope de lapila, entonces pasa al estadoe y reemplaza, en la pila, el smboloR por la secuencia desmbolos; adems, adelanta una posicin en el flujo de entrada.Segunda forma de movimiento. T(e, , R) = (e, ) indica: si el AFPD se encuentra en elestado e, y tiene el smbolo Ren el tope de la pila, entonces pasa al estado ey reemplaza enla pila el smbolo Rpor la secuencia de smbolos ; adems, no adelanta ninguna posicinen el flujo de entrada.

    Para asegurar que el AFP sea determinstico, solo uno de los dos tipos de movimientos se puededar para cualquier par (e,R), donde ees un estado y Res el smbolo que se encuentra en el tope dela pila.

    * Ejercicio 7 *Describa las diferencias existentes entre las dos definiciones formales planteadas, la primera en laseccin 2.1 y la segunda en esta seccin. Significa que alguna de las dos est equivocada?Justifique su respuesta.

    Ejemplo 3

    Sea el lenguajeL1 del Ejemplo 1: L1 = {anbn/ n 1}. Construyamos un AFPD que lo reconozca. El alfabeto de entradaA est formado por los caracteres {a, b}. El alfabeto de la pila A tiene los smbolos: $, para indicar que la pila est vaca, y R, queusaremos para indicar que el AFPD ha ledo una ade la cadena que est analizando.

    Necesitamos obtener un AFPD que cuente la cantidad de aes con las que comienza la cadena que seest analizando, y que luego pueda descontar de esa cantidad por cada bque se lea. Si al final lapila queda vaca, el AFPD reconocer a la cadena como palabra del lenguaje L1.

    Teniendo en cuenta que tanto en un AFP como en un AFPD solo se describen las transicionescorrectas, representamos los movimientos del AFPD que resuelve este problema de esta manera:

  • 7/26/2019 Volumen 2 Def.

    32/90

    SSL 2 30 Muchnik

    e0,$ => a => e1,R$ (comienza en el estado inicial y la pila est vaca; si lee una ase mueve alestado e1 y agrega una Ra la pila.)

    e1,R => b => e2, (se halla en el estado e1 y en el tope de la pila hay un smbolo R; si lee una bse mueve al estado e2y quita la R del tope de la pila.)

    . . . y as sucesivamente. En la prxima seccin veremos la forma habitual de representar los AFPs ylos AFPDs: una Tabla de Movimientos.

    * Ejercicio 8 *Cmo se denomina, en la jerga de las pilas, la operacin representada con en el ejemplo anterior?

    2.2.1 LA TABLA DE MOVIMIENTOS (TM)

    La TMen un AFP o en un AFPD es similar a la Tabla de Transiciones en un Autmata Finito. Ladiferencia radica en que en la TM no podemos hablar solo de estado; debemos hablar del parestado y smbolo en el tope de la pila.

    Ejemplo 4Construyamos la TM de un AFPD que reconoce al lenguaje L1 = {anbn/ n 1}:TM a b fdce0,$ | e1,R$e1,R | e1,RR e2,e2,R | e2,e2,$ | e3,$

    Como se podr ver, el conjunto de estados de este AFPD es {e0, e1, e2, e3}, donde e0es el estadoinicial y e3 es el nico estado final.

    * Ejercicio 9 *

    Defina formalmente el AFPD del Ejemplo 4.

    * Ejercicio 10 *a) Describa los movimientos que realiza ese AFPD para reconocer la cadena aaabbb.b) Describa el trabajo del AFPD para no reconocer la cadena aabbb.c) Describa el trabajo del AFPD para no reconocer la cadena aaabb.d) Describa el trabajo del AFPD para no reconocer la cadena aabba.e) Explique porqu no reconoce a la palabra vaca.

    * Ejercicio 11 *a) Teniendo en cuenta los algoritmos del captulo anterior, construya en ANSI C una funcin que

    implemente la solucin descripta en el Ejemplo 4.b) Escribe un programa en ANSI C que teste la funcin anterior.

    La seccin 2.1 termina con un recuadro que dice: Un AFP puede reconocer un LIC de dos maneras:por estado final, como en los AFs, y por pila vaca. Esto tambin vale para los AFPDs. Es ms:

    Siempre que se puede construir un AFPD que reconozca por estado final,se podr construir un AFPD que reconozca por pila vaca, y viceversa.

  • 7/26/2019 Volumen 2 Def.

    33/90

    SSL 2 31 Muchnik

    En el Ejemplo 4 hemos construido la TM de un AFPD que reconoce al lenguaje {anbn/ n 1}porestado final. En el prximo ejemplo construiremos la TM de un AFPD equivalente que reconoce elmismo lenguaje por pila vaca.

    Ejemplo 5

    La TM del AFPD que reconoce por pila vaca es la siguiente:

    TM a b fdce0,$ | e1,R$e1,R | e1,RR e2,e2,R | e2,e2,$ | e2,

    Como se podr ver, el conjunto de estados de este AFPD es {e0, e1, e2}, donde e0es el estadoinicial y el conjunto de estados finales es vaco.

    * Ejercicio 12 *Defina formalmente el AFPD del Ejemplo 5.

    * Ejercicio 13 *a) Describa los movimientos que realiza ese AFPD para reconocer la cadena aaabbb.b) Describa el trabajo del AFPD para no reconocer la cadena aabbb.c) Describa el trabajo del AFPD para no reconocer la cadena aaabb.d) Describa el trabajo del AFPD para no reconocer la cadena aabba.

    * Ejercicio 14 *a) Teniendo en cuenta los algoritmos del captulo anterior, construya en ANSI C una funcin queimplemente la solucin descripta en el Ejemplo 5.b) Escribe un programa en ANSI C que teste la funcin anterior.

    * Ejercicio 15 *Defina formalmente un AFPD que reconozca el lenguaje L2 = {anbn+1/ n 1}.

    * Ejercicio 16 *Defina formalmente un AFPD que reconozca el lenguaje L3 = {an+1bn/ n 1}.

    * Ejercicio 17 *Defina formalmente un AFPD que reconozca el lenguaje L4 = {anb2nat/ n 1, t 0}.

    * Ejercicio 18 *Sea el lenguaje L5de todas las palabras sobre el alfabeto {a, b} en las que la cantidad de aes esigual a la cantidad de bes, como: ab, abba, bababaab, etc. Defina formalmente un AFPD que loreconozca; tenga en cuenta que las palabras pueden comenzar con ao con b.

  • 7/26/2019 Volumen 2 Def.

    34/90

    SSL 2 32 Muchnik

    2.3 AFPDs Y EXPRESIONES ARITMTICAS

    Las expresiones aritmticas que utilicen parntesis para determinar un orden de evaluacin,constituyen un LIC existente en la inmensa mayora de los Lenguaje de Programacin. Por lo tanto,se podr construir un AFPD que las reconozca, es decir: que determine si una secuencia decaracteres, que constituye una supuesta expresin aritmtica, es sintcticamente correcta o no.

    Ejemplo 6

    Sea el LIC de todas las expresiones aritmticas cuyo nico operando es 4, los operadores son +(suma) y *(producto), y puede haber parntesis. Algunos casos correctos de estas expresiones son:

    44 * (4+4)4 + 4 + 4 * 4 + ((4))

    Construiremos un AFPD que reconozca a este LIC. Aqu debemos tener muy en cuenta losparntesis, porque siempre deben estar balanceados; para ello, utilizaremos la pila. El alfabeto de lapila ser: {R, $}. Los estados sern {e0, e1, e2, e3}, siendo e3el nico estado final.

    La Tabla de Movimientos que define a este AFPD ser:_TM______ 4 +,* ( ) fdce0,$ | e1,$ e0,R$e0,R | e1,R e0,RRe1,$ | e1,$ e0,$ e3,$e1,R | e1,R e0,R e2,e2,$ | e0,$ e3,$e2,R | e0,R e2,e3,$ |

    * Ejercicio 19 *

    Defina formalmente el AFPD construido en el ejemplo anterior.

    * Ejercicio 20 *Escriba la secuencia de movimientos del AFPD para cada una de las expresiones siguientes eindique si la acepta o no:a) ((4))b) 4 + 4c) 4 + 4 * (4 + (4))d) 4 + ((4)))

    * Ejercicio 21 *

    Investigue e informe porqu un Autmata Finito no puede reconocer el lenguaje de las expresionesaritmticas definido en el Ejemplo 6.

  • 7/26/2019 Volumen 2 Def.

    35/90

    SSL 2 33 Muchnik

    3 INTRODUCCIN AL PROCESO DE COMPILACIN

    En este volumen nos ocuparemos del estudio del proceso que lleva a cabo un compilador, uno delos varios tipos de traductores existentes, y su relacin con la sintaxis y la semntica de losLenguajes de Programacin. Adems, consideraremos que el programa a traducir siempre seencuentra en un flujo de entrada que est implementado a travs de un archivo de texto, como ocurre

    en Pascal con los archivos con extensin .paso en ANSI C con los archivos con extensin .c; estoes:

    El programa que se debe compilar es una secuencia de caracteresque termina con un centinela.

    * Ejercicio 1 *Investigue e informe qu es un traductoren esta disciplina.

    * Ejercicio 2 *Describa cul sera el centinela en el caso planteado en la frase anterior *

    3.1 CONCEPTOS BSICOS

    Un compilador es un complejo programa que lee un programa escrito en un lenguaje fuente,habitualmente un lenguaje de alto nivelcomo Pascal, C, C++, Java y otros miles, y lo traduce aun programa equivalente en un lenguaje objeto, normalmente ms cercano al lenguaje de mquina.Al programa original se lo llama programa fuente y al programa obtenido se lo denominaprograma objeto.

    * Ejercicio 3 *Informe qu significa que dos programas sean equivalentes en el contexto citado.

    El proceso de compilacin est formado por dos partes:

    1) elANLISIS, que, a partir delprograma fuente, crea una representacin intermedia del mismo; y

    2) la SNTESIS, que, a partir de esta representacin intermedia, construye el programa objeto.

    3.1.1 EL ANLISIS DEL PROGRAMA FUENTE

    En la compilacin, el anlisisest formado por tres fases:

    a) elAnlisis Lxico,

    b) elAnlisis Sintctico, yc) elAnlisis Semntico.

    a) ANLISIS LXICO

    El Anlisis Lxico detecta los diferentes elementos bsicos que constituyen un programa fuente,como: identificadores, palabras reservadas, constantes, operadores y caracteres de puntuacin. Por lotanto, el Anlisis Lxico solo se ocupa de los Lenguajes Regularesque forman parte del Lenguajede Programacin.

  • 7/26/2019 Volumen 2 Def.

    36/90

    SSL 2 34 Muchnik

    Por ello, esta fase de anlisis tiene como funcin detectar palabras de estos Lenguajes Regulares; enla jerga de la compilacin, estas palabras se denominan LEXEMAS y los LRs a los que pertenecenestos lexemas se denominan CATEGORAS LXICAS o TOKENS (palabra inglesa muy utilizadaen este campo).

    En otras palabras: la entradapara elAnlisis Lxico

    son caracteres y lasalidason tokens.Nota 1

    Los espacios que separan a los lexemas son ignorados durante el Anlisis Lxico.

    * Ejercicio 4 *Sea, en ANSI C, el siguiente fragmento de programa:

    ...int WHILE;while (WHILE > (32)) 2.46;...

    Disee una tabla con dos columnas: lexema y token. Complete la tabla con todos los lexemashallados en el Anlisis Lxico y las categoras a las que pertenecen.

    * Ejercicio 5 *Sea, en ANSI C, la siguiente funcin:

    void XX (void) {int a;double a;if (a > a) return 12;

    }

    Disee una tabla con dos columnas: lexema y token. Complete la tabla con todos los lexemas

    hallados en el Anlisis Lxico de esta funcin.

    * Ejercicio 6 *Describa todos los errores que encuentra en la funcin del Ejercicio 5. Para ello, construya una tablaque indique: N de LneaDescripcin del ErrorTipo de Error (Lxico, Sintctico, Otro)

    b) ANLISIS SINTCTICO

    El Anlisis Sintctico trabaja con los tokens detectados durante el Anlisis Lxico, es decir: laentradapara el Anlisis Sintctico son esos tokens.

    Esta etapa de anlisis s conoce la sintaxis del Lenguaje de Programacin y, en consecuencia, tendrla capacidad de determinar si las construcciones que componen el programa son sintcticamentecorrectas. Sin embargo, no podr determinar si el programa, en su totalidad, es sintcticamentecorrecto.

    Ejemplo 1

    Durante el Anlisis Sintctico, la GIC que describe la sintaxis del lenguaje por su propiaindependencia del contextono permite detectar si una variable fue declarada antes de ser utilizada,

  • 7/26/2019 Volumen 2 Def.

    37/90

    SSL 2 35 Muchnik

    si la misma variable fue declarada varias veces y con diferentes tipos, como en el Ejercicio 5, ymuchas otras situaciones errneas.

    Nota 2

    Debemos diferenciar, claramente, los trminos Anlisis Lxico vsAnalizador Lxico y Anlisis Sintctico vs Analizador Sintctico. Por

    ello, y para evitar confusiones, a partir de ahora siempre llamaremosScanner

    (palabra inglesa) al Analizador Lxico y Parser (palabra inglesa) alAnalizador Sintctico.

    Dada una definicin sintctica formal, como la que brinda una GIC, el Parser recibe tokens delScanner y los agrupa en unidades, tal como est especificado por las producciones de la GICutilizada. Mientras se realiza el Anlisis Sintctico, el Parser verifica la correccin de la sintaxis y, siencuentra un error sintctico, el Parser emite el diagnstico correspondiente.

    En la medida que las estructuras semnticas son reconocidas, el Parser llama a las correspondientesrutinas semnticas que realizarn elAnlisis Semntico.

    * Ejercicio 7 *Investigue e informe: qu son los terminales de la GIC utilizada para realizar el Anlisis Sintctico,caracteres, lexemas o tokens?

    c) ANLISIS SEMNTICO

    ElAnlisis Semntico realiza diferentes tareas, completando lo que hizo el Anlisis Sintctico.Una de estas importantes tareas es la verificacin de tipos, para que cada operador trabaje sobre

    operandos permitidos segn la especificacin del Lenguaje de Programacin.

    * Ejercicio 8 *Volviendo a la funcin del Ejercicio 5:

    void XX (void) {int a;double a;if (a > a) return 12;

    }

    Informe cules son errores que sern detectados durante el Anlisis Semntico.

    Las rutinas semnticasllevan a cabo dos funciones:

    1) Chequean la semntica esttica de cada construccin; es decir, verifican que la construccin

    analizada sea legal y que tenga un significado. Verifican que las variables involucradas estndefinidas, que los tipos sean correctos, etc.

    2) Si la construccin es semnticamente correcta, las rutinas semnticas tambin hacen latraduccin; es decir, generan el cdigo para una Mquina Virtual que, a travs de sus instrucciones,implementa correctamente la construccin analizada.

    Ejemplo 2Sea una produccin E->E+T. Cuando esta produccin es reconocida por el Parser, ste llama a lasrutinas semnticas asociadas para chequear la semntica esttica (compatibilidad de tipos) y luego

  • 7/26/2019 Volumen 2 Def.

    38/90

    SSL 2 36 Muchnik

    realizar las operaciones de traduccin, generando las instrucciones para la Mquina Virtual quepermitan realizar la suma.

    Una definicin completa de un LP debe incluir las especificaciones de su Sintaxis y de suSemntica. La Sintaxis se divide, normalmente, en componentes Independientes del Contextoycomponentes Sensibles al Contexto.

    Las GICs sirven para especificar la Sintaxis Independiente del Contexto. Sin embargo, no todo elprograma puede ser descripto por una GIC: por caso, la compatibilidad de tipos y las reglas dealcance de las variables son Sensibles al Contexto.

    Ejemplo 3En ANSI C, la sentencia a = b + c;es ilegal si cualquiera de las variables no estuviera declarada;esta es una restriccin Sensible al Contexto.

    Resumiendo: Debido a estas limitaciones de las GICs, las restricciones Sensibles al Contexto sonmanejadas como situaciones semnticas. En consecuencia, el componente semntico de un LP sedivide, habitualmente, en dos clases: Semntica Esttica, que es la que nos interesa en estemomento, y Semntica en Tiempo de Ejecucin.

    La Semntica Esttica de un LP define las restricciones Sensibles al Contexto que debencumplirse para que el programa sea considerado correcto. Algunas reglas tpicas de SemnticaEsttica son:

    1) Todos los identificadores deben estar declarados;

    2) Los operadores y los operandos deben tener tipos compatibles;

    3) Las rutinas (procedimientos y funciones) deben ser llamados con el nmero apropiado deargumentos.

    Ninguna de estas restricciones puede ser expresada mediante una GIC.* Ejercicio 9 *a) Investigue e informe qu es el ALCANCE de una variable.b) Se han mencionado tres reglas tpicas de Semntica Esttica. Escriba un ejemplo de cada una deellas.

    3.2 UN COMPILADOR SIMPLE

    Esta seccin describir un proceso formado por cuatro etapas:1 la definicin de un Lenguaje de Programacin muy simple;2 la escritura de un programa fuente en este lenguaje;3 el diseo de un compilador para realizar la traduccin;4 la obtencin de un programa objeto equivalente.

    Nota 3Esta seccin est basada en el captulo 2 del libro de Charles Fischer, Craftinga Compiler with C (1991). Sobre el desarrollo de Fischer, se han realizadovarias mejoras; de esta forma, se aplicar lo que hemos visto en el Volumen 1 yen el captulo 1 de este volumen.

  • 7/26/2019 Volumen 2 Def.

    39/90

    SSL 2 37 Muchnik

    3.2.1 DESCRIPCIN INFORMAL DEL LENGUAJE DE PROGRAMACIN MICRO

    Fischer presenta un LP que denomina Micro. Es un lenguaje muy simple que est diseado,especficamente, para poseer un LP concreto sobre el que se pueda analizar la construccin de uncompilador bsico.

    Informalmente, Fischer lo define de esta manera:- El nico tipo de dato es entero.- Todos los identificadores son declarados implcitamente y con una

    longitud mxima de 32 caracteres.- Los identificadores deben comenzar con una letra y estn compuestos

    de letras y dgitos.- Las constantes son secuencias de dgitos (nmeros enteros).- Hay dos tipos de sentencias:

    AsignacinID:=Expresin;Expresin es infija y se construye con identificadores,constantes y los operadores +y ; los parntesis estn

    permitidos.Entrada/Salidaleer (lista de IDs);escribir (lista de Expresiones);

    - Cada sentencia termina con un "punto y coma"(;). El cuerpo de unprograma est delimitado por inicio yfin.

    - inicio, fin, leery escribirson palabras reservadas y debenescribirse en minscula.

    * Ejercicio 10 *a) Investigue e informe qu significa Expresin es infija.

    b) Informe qu significa ID.c) Informe qu son fin, Finy finn.d) Informe qu significa: Todos los identificadores son declarados implcitamente.

    Ejemplo 4

    El siguiente es un programa fuente en Micro:inicio

    leer (a,b);cc := a + (b-2);escribir (cc, a+4);

    fin

    * Ejercicio 11 *Disee una tabla con dos columnas: lexema y token. Suponga que hay seis tipos de tokens:palabraReservada, identificador, constante, operador, asignacin y carcterPuntuacin.Realice el Anlisis Lxico del programa del Ejemplo 4 y complete la tabla.

  • 7/26/2019 Volumen 2 Def.

    40/90

    SSL 2 38 Muchnik

    3.2.2 SINTAXIS DE MICRODEFINICIN PRECISA CON UNA GIC (BNF)

    En esta seccin, agregamos una definicin ms precisa de Micro. Describimos las producciones deuna Gramtica Lxicaque define los posibles lexemas que se pueden encontrar en un programaMicro, y las producciones de una Gramtica Sintctica que permite precisar las construccionesvlidas en Micro.

    Si bien no se informa cules son las reglas de escritura de las producciones,con lo estudiado en el Volumen 1 el lector / la lectora no debe tenerinconvenientes para comprenderlas. Si los tiene, debe repasar el Volumen 1.

    Gramtica Lxica -> uno de

    -> {} -> {dgito>} -> uno de -> una dea-zA-Z

    -> uno de0-9 -> una deinicio fin leer escribir -> uno de+- -> := -> uno de( ) , ;

    * Ejercicio 12 *a) Informe el conjunto de noterminales, el conjunto de terminales y el conjunto de metasmbolos dela Gramtica Lxica cuyas producciones estn dadas.b) Investigue e informe qu ocurre si el programa fuente contiene un carcter que no es un terminalni puede formar parte de un terminal de la Gramtica Lxica descripta.

    Gramtica Sintctica -> inicio fin -> {} -> := ;|

    leer( ) ;|escribir( ) ;

    -> {,} -> {,} -> { } -> | |

    ( )

    * Ejercicio 13 *a) Informe el conjunto de noterminales, el conjunto de terminales y el conjunto de metasmbolos dela Gramtica Sintctica cuyas producciones estn dadas.b) En base a las dos gramticas descriptas, escriba un programa en Micro que sea mnimo ycorrecto.c) En base a las dos gramticas descriptas, escriba un programa en Micro que sea correcto y queutilice todos los elementos definidos. Debe ser diferente al del Ejemplo 4.d) Informe si :=es un operador. Justifique su respuesta.

  • 7/26/2019 Volumen 2 Def.

    41/90

    SSL 2 39 Muchnik

    Para mayor claridad de lectura, en la Gramtica Sintctica encontramos algunos tokens quepermanecen con sus caracteres originales las palabras reservadas, la asignacin, los parntesis yotrostal como aparecen en un programa fuente en Micro. Sin embargo, al construir el compilador,cada uno de estos tokens tendr su propio nombre, como se ve en la siguiente tabla:

    En el Programa Fuente Nombre del TokenInicio INICIOFin FINLeer LEEREscribir ESCRIBIR:= ASIGNACIN( PARENIZQUIERDO) PARENDERECHO, COMA; PUNTOYCOMA+ SUMA- RESTA

    3.2.3 LA ESTRUCTURA DE UN COMPILADOR Y EL LENGUAJE MICRO

    El ANLISIS LXICO es realizado por un mdulo llamado Scanner. Este analizador lee, uno auno, los caracteres que forman un programa fuente, y produce una secuencia de representaciones detokens. Es muy importante tener en cuenta que el Scanneres una rutina que produce y retorna larepresentacin del correspondiente token, uno por vez, en la medida que es invocada por el Parser.

    Existen dos formas principales de implementar un Scanner:a) A travs de la utilizacin de un programa auxiliar tipo lex, en el que los datos son tokens

    representados mediante Expresiones Regulares, como ya hemos visto;

    b) Mediante la construccin de una rutina basada en el diseo de un apropiado AFD; estemtodo es el que utilizaremos en Micro.

    El ANLISIS SINTCTICO es realizado por un mdulo llamado Parser. Este analizadorprocesa los tokens que le entrega el Scanner hasta que reconoce una construccin sintctica querequiere un procesamiento semntico. Entonces, invoca directamente a la rutina semnticaquecorresponde. Algunas de estas rutinas semnticas utilizan, en sus procesamientos, la informacin dela representacin de un token, como veremos ms adelante. Ntese que no existe un mduloindependiente llamado Analizador Semntico, sino que el ANLISIS SEMNTICO se varealizando, en la medida que el Parserlo requiere, a travs de las rutinas semnticas.

    Las rutinas semnticas realizan el Anlisis Semntico y tambin producen una salida en unlenguaje de bajo nivel para una Mquina Virtual, tal como veremos en la seccin 3.2.6; esto ltimoforma parte de la etapa de Sntesisdel compilador.

    Existen dos formas fundamentales de Anlisis Sintctico: el Anlisis Sintctico Descendente(conocido como top-down), que permite ser construido por un programador, y el Anlisis SintcticoAscendente (conocido como bottom-up), que requiere el auxilio de un programa especializado tipoyacc. Para Micro, construiremos un Parser basado en el Anlisis Sintctico Descendente y en elprximo captulo explicaremos ms sobre ambos mtodos y sus diferencias.

  • 7/26/2019 Volumen 2 Def.

    42/90

    SSL 2 40 Muchnik

    En cuanto al ANLISIS SEMNTICO, del cual ya hemos hablado anteriormente, es la tercerafase de anlisis que existe en un compilador. Por un lado, el Anlisis Semntico est inmerso dentrodel Anlisis Sintctico, y, por otro lado, es el comienzo de la etapa de Sntesisdel compilador. Loveremos, con ms precisin, al desarrollar el compilador Micro.

    La TABLA DE SMBOLOS (TS) es una estructura de datos compleja que es utilizada para el

    almacenamiento de todos los identificadores del programa a compilar. Dependiendo del diseo delcompilador, a veces tambin es utilizada para que contenga las palabras reservadas del LP, losliterales-constante y las constantes numricas que existen en el programa, pero stas ltimas enforma de secuencia de caracteres.

    Cada elemento de la TSest formada por una cadena y sus atributos. En el caso de Micro, la TScontendr las palabras reservadas y los identificadores; cada entrada tendr, como nico atributo, uncdigo que indique si la cadena representa una palabra reservada o un identificador.

    En general, la TSes muy utilizada durante toda la compilacin y, especficamente, en la etapa deAnlisispor las rutinas semnticas.

    * Ejercicio 14 *Investigue e informe:a) qu es una mquina virtual;b) qu significa en tiempo de compilacin;c) qu significa en tiempo de ejecucin.d) qu programa se compila;e) qu programa se ejecuta;f) son equivalentes el programa que se compila y el programa que se ejecuta?

    3.2.4 UN ANALIZADOR LXICO PARA MICRO

    Los lexemasque constituyen un programa fuente en este LP Micro son: identificadores, constantes,las cuatro palabras reservadas ya mencionadas, parntesis izquierdo y derecho, el punto y coma

    (para terminar cada sentencia), la coma (paraformar una lista), el smbolo de asignacin (:=), ylos operadores de suma (+) y de resta (-).

    * Ejercicio 15 *Pregunta: Las gramticas dadas generan la informacin que figura en el prrafo anterior? Justifiquesu respuesta.

    Atencin con la siguiente propiedad: cada lexemaest formado por la mayor secuencia posiblede caracteres para el token correspondiente, y esto requiere, a veces, que se lea el primer carcterque no pertenece a ese lexema, es decir: el carcter que acta como centinela.

    Ejemplo 5En la expresin abc+4, el identificador abces detectado completamente por el Scannercuando lee el carcter +, que es el primer carcter no vlido (un centinela) para el tokenidentificador.

    * Ejercicio 16 *Escriba 4 caracteres que puedan actuar como centinelas para un identificador en Micro.

  • 7/26/2019 Volumen 2 Def.

    43/90

    SSL 2 41 Muchnik

    Este carcter extra que se lee debe ser retornado al flujo de entrada porque ser el primer carcter (onico carcter) del siguiente lexema. Para ello, en ANSI C se utiliza la funcin ungetc.

    * Ejercicio 17 *Investigue e informe sobre la funcin ungetc: cmo es su prototipo, qu significa cada parmetro y

    el valor que retorna, y qu tarea realiza con exactitud.Si, en cualquier momento de la compilacin, el primer carcter del flujo de entrada que lee el

    Scanner para detectar el prximo lexema no es un carcter vlido para ningn lexema en el LPMicro, entonces se detect un error lxico. En este caso, se despliega un mensaje de error y sereparael error para continuar con el proceso. La reparacin ms sencilla consiste en ignorar estecarcter espreo y reiniciar el Anlisis Lxico a partir del carcter siguiente.

    Ejemplo 6_Abc := 3;

    El supuesto identificador comienza con un carcter espreo para Micro, el guin bajo. Estoproduce un error lxico.

    * Ejercicio 18 *Informe, formalmente, porqu el guin bajo es un carcter espreoen Micro.

    * Ejercicio 19 *Si el Scannerde Micro debe procesar el texto abc*ab.Qu produce? Descrbalo con precisin.

    Otra tarea del Scanner es ignorar los espaciosya sea espacios en blanco, tabulados o marcas de finde lneaque acten como separadores de lexemas dentro del texto del programa fuente.

    * Ejercicio 20 *Investigue e informe:a) qu sucede si el programa fuente comienza con muchos espacios;b) qu sucede si, en ANSI C, un literal-cadena tiene espacios, como "H O \n L\tA ";c) qu sucede si el programa ANSI C tiene un carcter constante que es un espacio, como ''o'\n'.

    El Scanner para Micro estar basado en la construccin de un AFD que reconoce los LRs queforman los tokens de Micro.

    En cuanto al reconocimiento de las palabras reservadas, el primer problema es que sonidentificadores. Existen varias soluciones; veamos dos de ellas.

    Una solucin es que cada palabra reservada sea reconocida, por el AFD diseado, mediante unestado final propio para cada una de ellas, independiente del estado final para el reconocimiento delos identificadores generales.

    Otra solucin es que las palabras reservadas sean colocadas, previamente, en las primeras entradasde la Tabla de Smbolosy con el atributo reservada; es decir, la TS ya contiene las palabrasreservadas antes de comenzar elAnlisis Lxico.

  • 7/26/2019 Volumen 2 Def.

    44/90

    SSL 2 42 Muchnik

    En la segunda solucin, que es la que usaremos, el AFD estar diseado con un nico estado finalpara reconocer a todos los identificadores, incluyendo las palabras reservadas. Entonces, cuando unidentificador es reconocido por el Scanner, lo busca en la TS. Si lo encuentra y tiene el atributoreservada, sabe que es una palabra reservada y cul es; caso contrario, y si el identificadordetectado todava no se encuentra almacenado en la TS, lo agrega con el atributo id.

    * Ejercicio 21 *Sea el siguiente programa Micro:inicio a := 23; escribir (a, b+2); fin

    a) Describa el contenido que queda en la Tabla de Smbolosuna vez que el Anlisis Lxico hayafinalizado.b) Cmo hace el Scanner de Micro para reconocer que el identificador inicio es una PalabraReservada?

    Por ltimo, el Parserdebe saber cundo el Scannerle pas el ltimo token detectado en el flujo deentrada. Para ello, se crea un token que llamaremos fdt(fin del texto). En consecuencia, cuando elScannerllegue al final del flujo que contiene al programa fuente, retornar el token fdt.

    El Scanner ser implementado como una funcin sin parmetros que retorna valores de tipoTOKEN. Por ello, definimos los siguientes tipos de tokens en ANSI C:

    typedef enum {INICIO, FIN, LEER, ESCRIBIR, ID, CONSTANTE, PARENIZQUIERDO,PARENDERECHO, PUNTOYCOMA, COMA, ASIGNACION, SUMA, RESTA, FDT

    } TOKEN;

    Suponemos que el prototipo de la funcin que implementa al Scanneres:TOKEN Scanner (void);

    Nota 4El compilador Micro es muy simple. No obstante, la funcin Scannerno puede retornar solo unvalor por enumeracin y pretender que el compilador pueda seguir desarrollando el trabajo necesariocon su Parsery con las rutinas de anlisis semntico. Si la funcin Scannerretorna ID, los otrosanalizadores necesitan saber a qu identificador se refiere. Lo mismo ocurre cuando Scannerretorna CONSTANTE: los otros analizadores necesitan conocer su valor. Por ello, supondremos queexisten variables globales que contendrn esta informacin y que podrn ser accedidas por los otrosanalizadores.

    * Ejercicio 22 *Investigue e informe:

    a) Qu es typedef;b) Qu es enum;c) Qu diferencia hay entre el prototipo de una funcin y la definicin de la misma funcin.

    3.2.4.1 EL AFD PARA IMPLEMENTAR EL SCANNER

    Dado que el Scanner debe reconocer palabras de diferentes Lenguajes Regulares, es lgicosuponer que el diseo de un AFD adecuado sea una buena solucin.

  • 7/26/2019 Volumen 2 Def.

    45/90

    SSL 2 43 Muchnik

    Tal como expresamos antes, construiremos un AFD con un nico estado final para todos losidentificadores, incluyendo las palabras reservadas; de esta manera, el AFD ser ms compacto.Adems, este AFD deber realizar ciertas acciones en varios estados, como veremos acontinuacin.

    El AFD ser representado mediante su Tabla de Transiciones. En la TT hay una fila por cada estado

    del AFD y una columna por cada carcter o conjunto de caracteres que tienen el mismo estado dellegada para cualquier transicin. Qu ocurre en el caso de Micro?

    1 Todas las letras son equivalentes en cuanto a su funcionalidad, por lo que llamaremos L a lacolumna correspondiente. Estos caracteres se detectan en ANSI C por medio de la funcin isalpha;

    2 Todos los dgitos, que se detectan en ANSI C con isdigit, cumplen la misma funcin.Llamaremos D a la columnacorrespondiente;

    3 Los caracteres +,, (, ), punto y coma, :, = y comatienen, cada uno, una funcin particular;por lo tanto, habr una columna para cada uno de ellos;

    4 El centinela de fin de texto, al que llamamos fdt, tiene una funcin especial y muy importante,ya que le indica al Parser que se terminaron los tokens. Por lo tanto, deber tener su propia

    columna en la TT del AFD;5 El AFD ignorar los espacios. En consecuencia habr una columna, a la que llamaremos sp, paralos tres caracteres especiales que ya analizamos anteriormente. Estos caracteres son reconocidos enANSI C con la funcin isspace.

    6 Finalmente, habr una columna llamada otropara cualquier otro carcter no mencionado en lospuntos anteriores. Estos caracteres no pueden intervenir en ningn lexema vlido en Micro, por loque su deteccin producir un error lxico.

    *