S10 - 1 Manejo de Errores Sintacticos

18
Teoría de lenguajes y compiladores Analizador Sintáctico Semana 10 Unidad II Errores Sintácticos

description

lenguaje de maquinas y compiladores

Transcript of S10 - 1 Manejo de Errores Sintacticos

  • Teora de lenguajes y compiladores

    Analizador Sintctico

    Semana 10

    Unidad II

    Errores Sintcticos

  • Objetivo General

    El alumno al finalizar el curso desarrollar

    aplicaciones que le permitan determinar si

    una sentencia corresponde a la estructura

    gramatical de un lenguaje de

    programacin. As mismo estar

    capacitado para proponer nuevas formas

    estructurales en la definicin de lenguajes

    de programacin.

  • Objetivo Especfico

    Desarrollar un analizador sintctico

  • Objetivo Instruccional

    Implementa procedimientos para el

    tratamiento de errores sintcticos

  • Contenidos Procedimentales

    Implementa procedimientos para el

    tratamiento de errores sintcticos

  • Co

    nte

    nid

    os

    Generalidades

    Recuperacin de errores en analizadores sintcticos descendentes recursivos

    Recuperacin de errores en analizadores sintcticos LL(1)

  • 1. Un analizador sintctico debera intentar

    determinar que ha ocurrido un error tan pronto

    como fuera posible. Esperar demasiado tiempo

    antes de la declaracin del error significa que la

    ubicacin del error puede haberse perdido.

    2. Despus de que se ha presentado un error, el

    analizador sintctico deber seleccionar un lugar

    probable para reanudar el anlisis. Un analizador

    sintctico siempre debera intentar analizar tanto

    cdigo como fuera posible, a fin de encontrar

    tantos errores reales como sea posible durante

    una traduccin simple.

    Algunas consideraciones G

    en

    era

    lida

    de

    s

  • 3. Un analizador sintctico debera intentar evitar

    el problema de cascada de errores, en la cual

    un error genera una secuencia de mensajes de

    error falsos.

    4. Un analizador sintctico debe evitar bucles

    infinitos en los errores, en los que se genera una

    cascada sin fin de mensajes de error sin

    consumir ninguna entrada.

    Otras consideraciones G

    en

    era

    lida

    de

    s

  • Tipos de Errores

    Lxicos (a!b, begon)

    Sintcticos (X := a *(b-(c+d);;)

    Semnticos (3 div sqrt(2))

    Lgicos (bucle infinito)

    Consideraciones:

    La mayora de los errores son simples

    La mayora son o se manifiestan en la fase de anlisis sintctico

    La deteccin de errores lgicos es muy difcil o imposible

    A veces el error est mucho antes de que se pueda detectar

    Ge

    ne

    ralid

    ad

    es

  • Objetivos del gestor de errores

    Informar con claridad y exactitud lnea, posicin, mensajes (falta un ;)

    Recuperarse con rapidez No se abandona al primer error

    Introduccin de errores espurios (sintcticos o semnticos): inhibir mensajes de demasiado cercanos

    Se abandona si hay muchos errores

    No retrasar significativamente la traduccin de programas correctos Mecanismos sencillos de recuperacin

    Ge

    ne

    ralid

    ad

    es

  • Estrategias para la gestin de

    errores En modo pnico: descartar smbolos de entrada

    (hasta que alguno permita la recuperacin: elementos de sincronizacin)

    A nivel de frase: correccin local segn el error concreto (borrar, sustituir, insertar: peligro de bucle infinito)

    De producciones de error: prever errores (frecuentes o probables) ampliando la gramtica con reglas especficas de error

    De correccin global: hallar el programa correcto ms cercano al de entrada: costoso y no necesariamente se encuentra el deseado

    Ge

    ne

    ralid

    ad

    es

  • En situaciones complejas, el manejador de errores consumir un numero posible grande de tokens en un intento de hallar un lugar para reanudar el anlisis sintctico.

    Este modo de alarma tiene, adems, la

    ventaja de que virtualmente asegura que el analizador sintctico no caiga en un bucle infinito durante la recuperacin de errores.

    Modo de Alarma R

    ec

    up

    era

    ci

    n d

    e e

    rro

    res

    en

    an

    aliz

    ad

    ore

    s

    sin

    tc

    tic

    os

    de

    sce

    nd

    en

    tes

    re

    cu

    rsiv

    os

  • El mecanismo bsico es proporcionar a cada procedimiento recursivo un parmetro extra compuesto de un

    conjunto de tokens de sincronizacin.

    Si se encuentra un error, el analizador

    sintctico explora hacia delante, desechando los tokens hasta que ve en la entrada uno del conjunto de tokens de sincronizacin, en donde se reanuda el anlisis sintctico.

    Mecanismo del Modo de

    Alarma

    Re

    cu

    pe

    rac

    in

    de

    err

    ore

    s e

    n a

    na

    liza

    do

    res

    sin

    tc

    tic

    os

    de

    sce

    nd

    en

    tes

    re

    cu

    rsiv

    os

  • Las decisiones importantes que se tienen que

    tomar en este modo de recuperacin de errores

    consisten en determinar que tokens agregar al

    conjunto de sincronizacin en cada punto del

    anlisis sintctico.

    Por lo general los conjuntos siguiente son

    candidatos importantes para tales tokens de

    sincronizacin. Los conjuntos primero tambin se

    pueden utilizar para evitar que el manejador de

    errores omita tokens importantes que inicien

    nuevas construcciones principales (sentencias o

    expresiones).

    Mecanismo del Modo de

    Alarma

    Re

    cu

    pe

    rac

    in

    de

    err

    ore

    s e

    n a

    na

    liza

    do

    res

    sin

    tc

    tic

    os

    de

    sce

    nd

    en

    tes

    re

    cu

    rsiv

    os

  • Es importante darse cuenta que el modo de

    alarma funciona mejor cuando el compilador

    sabe cuando no alarmarse.

    Por ejemplo, los smbolos de puntuacin perdidos,

    tales como los de punto y coma, y las comas, e

    incluso los parntesis derechos olvidados, no

    siempre deberan provocar que un manejador de

    errores consuma tokens. Naturalmente, debe

    tener cuidado para asegurar que no se presente

    un bucle infinito.

    Mecanismo del Modo de

    Alarma

    Re

    cu

    pe

    rac

    in

    de

    err

    ore

    s e

    n a

    na

    liza

    do

    res

    sin

    tc

    tic

    os

    de

    sce

    nd

    en

    tes

    re

    cu

    rsiv

    os

  • 1. La recuperacin de errores en modo de alarma se puede implementar en analizadores sintcticos LL(1) de manera semejante a como se implementaron en el anlisis sintctico recursivo.

    2. Se advierte que la situacin de error se

    da cuando un no terminal A esta en la parte superior de la pila y el token de entrada actual no esta en primero(A) (o siguiente(A); si esta en Primero(A)).

    Re

    cu

    pe

    rac

    in

    de

    err

    ore

    s e

    n a

    na

    liza

    do

    res

    sin

    tc

    tic

    os

    LL(1

    )

  • 3. Si se esta en el caso expuesto anteriormente se tienen tres alternativas posibles de recuperacin:

    i. Extraer A de la pila ii. Extraer de manera sucesiva tokens de

    la entrada hasta que se vea un token para el cual se pueda reiniciar el anlisis sintctico

    iii. Insertar un nuevo no terminal en la pila.

    Re

    cu

    pe

    rac

    in

    de

    err

    ore

    s e

    n a

    na

    liza

    do

    res

    sin

    tc

    tic

    os

    LL(1

    )

  • Teora de lenguajes y compiladores

    Analizador Sintctico

    Semana 10

    Unidad II

    Errores Sintcticos