practica 2

11
Práctica 2 Autómatas, Gramáticas y Lenguajes 2014-2015

Upload: andrests

Post on 18-Dec-2015

214 views

Category:

Documents


0 download

DESCRIPTION

Practica 2 Automatas 2015

TRANSCRIPT

  • Prctica 2

    Autmatas, Gramticas y Lenguajes

    2014-2015

  • Introduccin

    El objetivo de esta prctica es trabajar con los analizadores sintcticos LR(k).

    Para ello se deber conocer qu son los smbolos de preanlisis y el mecanismo de

    construccin de un analizador sintctico LR(k). Puesto que estos dos temas no se

    tratan adecuadamente en el libro base de la asignatura, se recomienda consultarlos

    por cualquier otra bibliografa. En concreto puede ser til consultar el libro de

    la bibliografa complementaria Teora de la Computacin: lenguajes formales,

    autmatas y complejidad o bien el ejemplo que se incluye en el enunciado de

    esta prctica.

    Normas de entrega y calificacin

    La prctica tendr una ponderacin del 15% de la nota definitiva de la

    asignatura, siempre que se obtenga una nota superior o igual a 5 puntos en la

    prueba presencial.

    La prctica slo podr entregarse utilizando la aplicacin de Tareas de los

    cursos virtuales. La entrega de la misma ser un archivo, en formato *.pdf,

    nombrado como Apellido1 Apellido2, Nombre (DNI).pdf, que no pueda ser

    reescrito por ninguna persona. El archivo no puede ser un escaneado transformado

    a PDF.

    Esta prctica tiene dos partes diferenciadas que se calificarn con un mximo

    de 5 puntos cada una. La primera parte consiste en la realizacin de un

    cuestionario. La segunda parte consiste en la realizacin de un ejercicio. La

    evaluacin final de la prctica ser la suma de la nota obtenida en cada una de

    las partes.

    A continuacin y antes de mostrar los ejercicios a realizar en esta prctica

    mostramos un resumen de las ideas fundamentales que se encuentran detrs de la

    construccin de los analizadores sintcticos.

    Introduccin a los analizadores sintcticos LR(k)

    Una de las principales aplicaciones de los autmatas a pila es la construccin

    de analizadores sintcticos. Los analizadores sintcticos son parte fundamental en

    la construccin de compiladores y su objetivo es el anlisis de las estructuras del

    programa dado un determinado lenguaje de programacin.

    Para la construccin de rutinas de anlisis sintctico es necesario apoyarse en

    mquinas deterministas. A diferencia de lo que ocurra con los autmatas finitos,

    1

  • el imponer determinismo a los autmatas a pila restringe el conjunto de lenguajes

    que se pueden aceptar.

    Para superar esta limitacin, se suele utilizar el llamado principio de

    preanlisis. El principio de preanlisis, consiste en visualizar un nmero

    determinado de smbolos de la entrada sin consumirlos. De esta forma, en casos de

    no determinismo, el autmata puede tomar decisiones sobre qu transicin aplicar

    teniendo en cuenta los siguientes k elementos de la entrada.

    En este punto es til la consulta del minivdeo docente titulado Smbolos

    de Preanlisis que encontrar en la carpeta de Minivideos docentes en el

    rea de Documentos del curso virtual

    Analizadores sintcticos LL(k) y LR(k)

    Existen dos tipos diferentes de analizadores sintcticos: los analizadores

    LL(k) y los analizadores LR(k). Ambos se basan en un nmero k de smbolos

    de preanlisis, as, un analizador LL(1) tendr en cuenta un nico smbolo de

    preanlisis, de la misma forma que un analizador LL(2) tendr en cuenta dos

    smbolos de preanlisis.

    Ambos tipos de analizadores se basan en la gramtica independiente del

    contexto que genera el lenguaje a analizar. La diferencia estriba en el tipo

    de derivacin que se realice para obtener cadenas vlidas. As, si se realizan

    derivaciones ms a la izquierda, la cadena se genera derivando siempre el no

    terminal que se encuentra ms a la izquierda. El autmata a pila correspondiente,

    analiza la cadena de entrada produciendo una derivacin por la izquierda

    conforme lee la cadena de izquierda a derecha. Los analizadores sintcticos

    desarrollados de esta manera se conocen como analizadores sintcticos LL. La

    primera L denota que el analizador lee su entrada de izquierda a derecha (left to

    right); la segunda L indica que el objetivo del analizador sintctico es producir

    una derivacin por la izquierda [1].

    La construccin de un analizador sintctico LL(k) se basa en el autmata a

    pila equivalente a una determinada gramtica (ver apartado 6.3.1 del libro base de

    la asignatura).

    No obstante, existen lenguajes dentro de los lmites de los analizadores

    sintcticos de pila que no puede reconocer ningn analizador sintctico LL(k), sin

    importar la magnitud de k. Un ejemplo es el lenguaje L = {xn : n 0}{xnyn :n 0}. L es un lenguaje independiente del contexto determinista. Un ejemplo degramtica que genera L es:

    S xA|xBy|A xA|B xBy|

    2

  • Cualquier gramtica independiente del contexto que genere L debe permitir

    que se derive un no terminal con una cadena que contiene slo xs o una cadena

    que contiene una combinacin equilibrada de xs e ys. Esto quiere decir que

    existirn por lo menos dos reglas posibles a la hora de derivar este no terminal. De

    la misma forma, cualquier analizador sintctico LL(k), se enfrentar al problema

    de decidir cul de estas reglas ser la que se aplique cuando surja el no terminal

    en la superficie de la pila. Por desgracia, independientemente de la magnitud de

    k, siempre podremos encontrar una cadena para la cul no es posible detectar el

    nmero de xs o la ausencia o no de ys sin considerar ms de k smbolos de

    preanlisis. Por tanto, los analizadores sintcticos LL(k) slo son adecuados para

    una subclase de lenguajes independientes del contexto.

    Para paliar las deficiencias de los analizadores predictivos LL(k), se definieron

    los analizadores sintcticos LR(k), que van procesando la cadena de izquierda

    a derecha (del ingls Left to right derivation) mientras van construyendo una

    derivacin por la derecha (del ingls Right derivation) utilizando k smbolos de

    preanlisis.

    La construccin de un analizador sintctico LR(k) para una determinada

    gramtica, consiste en la construccin de un autmata a pila equivalente a dicha

    gramtica y en la construccin de una tabla de anlisis sintctico que tiene en

    cuenta los smbolos de preanlisis que sean necesarios. Dicha tabla se construye

    a su vez, a partir de un autmata finito que tiene en cuenta en qu momento de la

    derivacin de una cadena nos encontramos en cada momento.

    El proceso de construccin de estos elementos se encuentra definido en el

    apartado 2.5 y en el apndice A de [1].

    En este punto es til la consulta de los minivdeos docentes titulados LL(1)

    y LR(1) que encontrarn en la carpeta de Minivideos docentes en el rea

    de Documentos del curso virtual

    El lmite de los analizadores sintcticos LR(k) es el conjunto de lenguajes

    independientes del contexto deterministas

    A continuacin mostramos un ejemplo concreto de construccin de un

    analizador sintctico LR(k).

    Ejemplo de construccin de un analizador sintctico LR(k)

    En este apartado mostramos un ejemplo de construccin de un analizador

    sintctico LR(k) tomado del libro de la bibliografa complementaria Autmatas,

    Gramticas y Lenguajes formales: problemas resueltos.

    Se trata de construir el analizador sintctico LR(k) para la gramtica

    independiente del contexto G = ({S}, {x, y, z}, S, P ), donde P es el siguienteconjunto de producciones:

    3

  • S xSzS ySzS z

    Dada cualquier cadena perteneciente al lenguaje generado por G, a la hora

    de decidir qu produccin utilizar para derivarla, basta con inspeccionar si a

    continuacin viene una x, una y o una z. Por tanto, para esta gramtica se necesita

    un nico smbolo de preanlisis.

    Los estados del autmata finito correspondiente a la tabla de anlisis de un

    analizador sintctico LR, se corresponden con una determinada derivacin de la

    gramtica. Los estados de aceptacin se corresponden con situaciones en las que

    el autmata ha reconocido una derivacin vlida de la gramtica.

    Por tanto, en cada estado se indica para cada produccin de la gramtica, la

    parte que ya se ha reconocido y la parte que queda por identificar. As por ejemplo,

    si se supone que de la produccin S xSz ya se ha reconocido la x, el autmatadebera poder controlar que resta por reconocer la subcadena que se obtendra

    al derivar el no terminal S. Para facilitar la comprensin del funcionamiento

    del autmata, se marcar la produccin con un indicando qu posibilidadesde derivacin hay en ese estado. Por lo tanto, en este ejemplo, la produccin se

    representara de esta forma S xSz.Para el ejemplo de esta produccin, al estado del autmata, se le aadirn

    las transiciones correspondientes a las producciones que contengan el smbolo no

    terminal S en la parte izquierda, por lo tanto el estado del autmata (que ser el

    estado D en la representacin grfica del autmata) queda definido por:

    S xSz

    S xSz

    S ySz

    S z

    A continuacin se describe el proceso de definicin del resto de estados del

    autmata.

    El estado inicial, marcado con A, contendr una produccin extra que

    solamente genera el smbolo inicial de la gramtica, por lo tanto el estado queda

    definido por las siguientes producciones:

    S S

    S xSz

    4

  • S ySz

    S z

    Otro estado, el estado B, indica que se ha reconocido la produccin S S.Para ello, se representar el estado poniendo el smbolo detrs de la produccin(S S). El estado B es un estado de aceptacin (porque es un estado en el queya se ha reconocido una produccin).

    El estado C, es el estado al que se accede cuando en la cinta de entrada hay un

    smbolo y y se est reconociendo la produccin S ySz. Este estado se define:

    S ySz

    S xSz

    S ySz

    S z

    Otro estado, el estadoD se ha definido al principio del ejercicio como ejemplo.

    Estado x y z FDC S

    A desplazar D desplazar C desplazar E B

    B Aceptar

    C desplazar D desplazar C desplazar E F

    D desplazar D desplazar C desplazar E H

    E S z S zF desplazar G

    G S ySz S ySzH desplazar I

    I S xSz S xSz

    Cuadro 1: Tabla de transicin del autmata de un analizador LR(1)

    El estado E, al que se acceder cuando se reconozca un smbolo z de la

    produccin S z, es un estado de aceptacin. Este estado de aceptacinrepresenta la situacin en la que se ha reconocido la produccin S z y portanto, el autmata debe regresar al estado donde se empez a reconocerla y dar

    por reconocido el smbolo no terminal S.

    Al estado F se acceder despus de reconocer el smbolo no terminal S en

    la produccin S ySz y por lo tanto el estado estar definido por S ySz.

    5

  • AB

    C

    D

    E

    F G

    H I

    S

    y

    x

    z

    y

    x

    z

    S

    x

    y

    z

    S

    z

    z

    Figura 1: Autmata del analizador sintctico LR(1) del ejercicio

    Como el nico elemento de la produccin que queda por identificar es un smbolo

    terminal, no se introduce ninguna produccin ms en este estado.

    Al estado G, se llega despus de reconocer el smbolo terminal z en la

    produccin S ySz, y por tanto es un estado de aceptacin que reconoce estaproduccin.

    El estado H , es similar al estado F solo que con la produccin S xSz.Por su parte, el estado I , es equivalente al estadoG solo que con la produccin

    S xSz.Para terminar de representar cada estado se utilizar la tabla 1. En esta tabla, se

    representa qu accin realizar para cada estado y para cada smbolo de preanlisis.

    Los smbolos de preanlisis son los elementos terminales del lenguaje, junto

    con la Marca de Final de Cadena (FDC). Cuando en la tabla aparece la accin

    desplazar el autmata leer de la cinta de entrada el smbolo actual y lo apilar

    en la pila junto con el estado que acompaa a la accin desplazar. Adems,

    se utilizar la pila para ir introduciendo los elementos terminales que se van

    leyendo, de forma que se ir construyendo dentro de la pila la produccin que

    se est resolviendo. Cuando se ha reconocido ntegramente la parte izquierda de

    una produccin, se desapilan todos sus elementos y se apila la parte derecha de la

    produccin. Tambin se introduce en la pila una marca para saber sobre qu estado

    se est realizando el trabajo, ya que cada vez que se reconoce una produccin,

    se debe volver al estado en el cual se ha empezado a reconocer la produccin

    para continuar con el reconocimiento de la cadena. En la figura 1 se muestra el

    diagrama de transiciones del autmata correspondiente al analizador LR(1) del

    enunciado.

    6

  • Ejemplo de ejecucin del autmata construido anteriormente

    A continuacin se va a considerar la cadena de entrada yxyzzzz con el

    objetivo de ilustrar el funcionamiento del autmata.

    Esta cadena pertenece al lenguaje generado por la gramtica del enunciado. En

    la siguiente tabla se muestra la ejecucin del autmata con esta cadena de entrada,

    teniendo en cuenta, adems, la tabla de transiciones de la tabla 1

    En los pasos 5, 8 y 11 se han reconocido derivaciones vlidas de la gramtica,

    razn por la cual la pila se ha vaciado hasta llegar al estado previo al comienzo

    del reconocimiento de estas producciones. En estos pasos, se ha ledo de la pila

    pero no de la entrada. De esta forma, sabiendo en qu estado estaba el autmata y

    cul era el smbolo no terminal de la gramtica, el autmata se ha transladado al

    estado adecuado sin necesidad de leer ningn elemento de la cinta.

    Paso Cinta Estado Pila Tabla de Transicin

    0 yxyzzzz A desplazar C

    1 yxyzzzz C yC desplazar D

    2 yxyzzzz D yCxD desplazar C

    3 yxyzzzz C yCxDyC desplazar E

    4 yxyzzzz E yCxDyCzE S z5 yxyzzzz C yCxDyCSF

    6 yxyzzzz F yCxDyCSF desplazar G

    7 yxyzzzz G yCxDyCSFzG S ySz8 yxyzzzz D yCxDSH

    9 yxyzzzz H yCxDSH desplazar I

    10 yxyzzzz I yCxDSHzI S xSz11 yxyzzzz C yCSF

    12 yxyzzzz F yCSF desplazar G

    13 yxyzzzz G yCSFzG S ySz14 yxyzzzz B SB Aceptar

    7

  • Parte 1: Cuestionario

    El presente cuestionario constituye la primera parte evaluable de la prctica y

    contar 5 puntos en la calificacin final de la prctica.

    Cada acierto suma un punto sobre 5; cada error y cada pregunta no

    contestada no puntan.

    1. Dado un determinado alfabeto, tomemos un lenguaje cualquiera

    independiente del contexto (LIC) que no contiene la cadena vaca Es

    posible construir un analizador sintctico del tipo LR(k)?

    a) S, para todo LIC

    b) Slo es posible para los LICs deterministas que contengan a la cadena

    vaca

    c) Es posible para cualquier LIC determinista independientemente de que

    contenga o no a la cadena vaca

    d) Es posible para todos los LICs deterministas y para algunos LICs no

    deterministas.

    2. Indicar cul de las siguientes afirmaciones es verdadera:

    a) Los lenguajes reconocidos por analizadores sintcticos de tipo LR(k)

    son los lenguajes independientes del contexto deterministas o no

    deterministas

    b) Todo lenguaje regular puede ser reconocido por un analizador

    sintctico de tipo LR(k)

    c) Los analizadores sintcticos de tipo LR(k) slo se pueden utilizar en

    lenguajes regulares.

    d) Ninguna de las afirmaciones anteriores es cierta

    3. Dada la siguiente gramtica:

    S AS xbA aAbA BB x

    Indicar cuntos smbolos de preanlisis seran necesarios para construir un

    analizador sintctico LR(k) sobre esa gramtica:

    8

  • a) 0

    b) 1

    c) 2

    d) 3

    4. Indicar si es verdadera o falsa la siguiente afirmacin: Para todo lenguaje

    independiente del contexto asociado a un alfabeto es posible construirun analizador sintctico del tipo LR(k) con la condicin de que k sea

    suficientemente grande

    a) Verdadero

    b) Falso

    5. Dada la siguiente gramtica:

    S xAyS xByyA xAyA B xByyB

    Indicar cul de las siguientes afirmaciones es verdadera:

    a) El nmero de smbolos de preanlisis necesarios para construir un

    analizador LR(k) para esta gramtica es 1

    b) El nmero de smbolos de preanlisis necesarios para construir un

    analizador LR(k) para esta gramtica es 2

    c) El nmero de smbolos de preanlisis necesarios para construir un

    analiador LR(k)para esta gramtica es 3

    d) No es posible construir un analizar LR(k) para esta gramtica ya que

    genera un lenguaje independiente del contexto no determinista

    Parte 2: Construccin de un analizador LR(k)

    Dado el lenguaje L = {xnymzn|n,m > 0}:

    1. (mximo 0.5 puntos): Construir una gramtica que genere L

    9

  • 2. (mximo 0.5 puntos): Indicar cuntos smbolos de preanlisis son

    necesarios para construir un analizador sintctico LR(k) basado en la

    gramtica construida en el apartado anterior

    3. (mximo 2.5 puntos): Construir el analizador sintctico LR(k)

    correspondiente a la gramtica y los smbolos de preanlisis definidos en

    los apartados anteriores. Para ello, debe indicar el autmata finito y la tabla

    de transiciones correspondientes.

    4. (mximo 1.5 puntos): Indicar paso a paso la ejecucin del autmata

    construido en el apartado anterior para una cadena del lenguaje que tenga

    una longitud de al menos 9 smbolos.

    Referencias

    [1] J.G. Brookshear. Teora de la Computacin: Lenguajes Formales, Autmatas

    y Complejidad. Addison-Wesley Iberoamericana, 1993.

    10