An - PowerPoint PPT Presentation

About This Presentation
Title:

An

Description:

Pila: s mbolo $ y en la cima el s mbolo inicial de la gram tica ... X: Cima de la pila. A: s mbolo de la entrada (preanalisis) ... – PowerPoint PPT presentation

Number of Views:102
Avg rating:3.0/5.0
Slides: 49
Provided by: almamarapi
Category:
Tags: la | pila

less

Transcript and Presenter's Notes

Title: An


1
Análisis Sintáctico
  • Teoría de Autómatas y Lenguajes Formales
  • Alma María Pisabarro, 2007

2
ANÁLISIS SINTÁCTICO
  • Función
  • Entrada sucesión de componentes léxicos ltclex,
    vlexgt
  • Salida la entrada es o no correcta
    sintácticamente
  • Además
  • si la entrada es correcta, árbol de derivación
  • si no indicación de errores

3
  • Uso de gramáticas independientes de contexto
  • Especificación precisa y fácil de entender
  • Construcción automática de analizadores
    sintácticos
  • Imparten una estructura al programa fuente, a la
    que se asigna el significado. Detección adecuada
    de errores
  • Fácil mantenimiento evolución del lenguaje
  • ltprogramagt ? ltcabeceragt ltbloquegt
  • ltcabeceragt ? program ltidentificadorgt
  • ltcabeceragt ? program ltidentificadorgt
    (ltids.archivosgt)
  • ltbloquegt ? ltdeclaraciones y definiciones de
    entornogt
  • ltdef. de subprogramasgt ltsent.
    secuencialgt.
  • ltsent. secuencialgt ? begin ltsentenciasgt end
  • ...

4
TIPOS DE ANÁLISIS SINTÁCTICOS
  • Universales (CYK, Earley, ...)
  • Descendentes. Subclases de gramáticas adecuadas
    (LL)
  • Ascendentes. Subclases de gramáticas adecuadas
    (LR)

5
ERRORES TIPOS
  • Léxicos (a!b, begon)
  • Sintácticos (X a (b-(cd))
  • Semánticos (3 div sqrt(2))
  • Lógicos (bucle infinito)
  • Consideraciones
  • La mayoría de los errores son simples
  • La mayoría son o se manifiesten en la fase de
    análisis sintáctico
  • La detección de errores lógicos es muy difícil o
    imposible
  • A veces el error está mucho antes de que se pueda
    detectar

6
ERRORES OBJETIVOS DEL GESTOR DE ERRORES
  • Informar con claridad y exactitud
  • línea, posición, mensajes (falta un )
  • Recuperarse con rapidez
  • No se abandona al primer error
  • Introducción de errores espurios (sintácticos o
    semánticos) inhibir mensajes de demasiado
    cercanos
  • Se abandona si hay muchos errores
  • No retrasar significativamente la traducción de
    programas correctos
  • Mecanismos sencillos de recuperación

7
ERRORES ESTRATEGIAS
  • En modo pánico descartar símbolos de entrada
    (hasta que alguno permita la recuperación
    elementos de sincronización)
  • A nivel de frase corrección local según el error
    concreto (borrar, sustituir, insertar peligro de
    bucle infinito)
  • De producciones de error prever errores
    (frecuentes o probables) ampliando la gramática
    con reglas específicas de error
  • De corrección global hallar el programa correcto
    más cercano al de entrada costoso y no
    necesariamente se encuentra el deseado

8
ANÁLISIS SINTÁCTICO DESCENDENTE
  • tipo ? simple
  • simple
  • array simple of tipo
  • simple ? integer
  • char
  • num ptpt num
  • tipo tipo
    tipo
  • simple simple array
    simple of tipo
  • simple simple
    simple
  • integer char num
    ptpt num

9
Análisis Sintáctico Predictivo
  • Análisis Sintáctico Descendente Recursivo
  • Conjunto de procedimientos recursivos
  • Cada no terminal de la gramática tiene asociado
    un procedimiento
  • El símbolo de preanálisis determina sin
    ambigüedad el procedimiento seleccionado para
    cada no terminal
  • Procedimiento adicional parea

10
  • procedimiento tipo según que regla se aplique
  • ? lttipogt ? ltsimplegt
  • simple
  • ? lttipogt ? ltsimplegt
  • parea () simple
  • ? lttipogt ? array ltsimplegt of lttipogt
  • parea (array) parea ( ) simple parea (
    ) parea (of) tipo
  • procedimiento simple según que regla se aplique
  • ? ltsimplegt ? integer
  • parea (integer)
  • ? ltsimplegt ? char
  • parea (char)
  • ? ltsimplegt ? num ptpt num
  • parea (num) parea (ptpt) parea (num)

11
  • parea (num) parea(ptpt) parea(num)
  • procedure parea (tTCompLex)
  • begin
  • if preanalisis t then
  • preanalisis SgteCompLex()
  • else error
  • end
  • simple
    simple
    simple
  • ?

  • num ptpt num num
    ptpt num
  • num ptpt num ... ... num ptpt num
    ... .... num ptpt num ... ...

parea
parea
parea
12
  • parea( ) simple
  • tipo tipo
    tipo
  • ?

  • simple simple
  • ?
  • char char
    char

parea
13
  • parea (array) parea () simple parea ()
    parea(of) tipo
  • parea() simple
  • tipo tipo

    tipo
  • ?
  • array simple
    of tipo array simple
    of tipo

  • ?
  • array num ptpt num of char array num
    ptpt num of char array num ptpt
    num of char
  • tipo
    tipo
  • array simple of
    tipo array simple
    of tipo
  • ?
  • array num ptpt num of char
    array num ptpt num of char

14
  • Elección de regla a aplicar
  • tipo ? simple simple array simple of
    tipo
  • simple ? integer char num ptpt num
  • tipo
  • regla 1 preanalisis in integer, char, num
  • regla 2 preanalisis
  • regla 3 preanalisis array
  • simple
  • regla 4 preanalisis integer
  • regla 5 preanalisis char
  • regla 6 preanalisis num

15
  • const INTEGER 257 CHAR 258 ...
  • var preanalisis TCompLex
  • function StgteCompLex() TCompLex
  • procedure parea(...)...
  • procedure simple
  • begin
  • if preanalisis INTEGER then
  • parea (INTEGER)
  • else if preanalisis CHAR then
  • parea (CHAR)
  • else if preanalisis NUM then
  • begin parea(NUM) parea(PTPT)
    parea(NUM) end
  • else
  • error
  • end

16
  • procedure tipo
  • begin
  • if preanalisis in INTEGER, CHAR, NUM then
    simple
  • else if preanalisis then
  • begin parea() simple end
  • else if preanalisis ARRAY then
  • begin
  • parea(ARRAY) parea() simple
  • parea (OF) tipo
  • end
  • else error
  • end
  • begin
  • preanalisis SgteCompLex() tipo
  • end.

17
Análisis Sintáctico Predictivo no Recursivo
  • Utilizan una pila en lugar de llamadas recursivas
  • Guiado por una tabla
  • Las tablas se construyen directamente sólo para
    ciertos tipos de gramáticas

18
Tabla de análisis Sintáctico M
19
Inicialmente
  • Buffer cadena de entrada finalizada con el
    símbolo
  • Pila símbolo y en la cima el símbolo inicial
    de la gramática
  • Tabla M Si A es un no terminal y a un terminal,
    MA,a contiene una regla de producción de la
    gramática
  • X Cima de la pila
  • A símbolo de la entrada (preanalisis)

20
Análisis Sintáctico Predictivo no recursivo
  • Si X terminal
  • Si X ltgt a
  • Llamar a la rutina de recuperación de error
  • Si X a
  • Si X a
  • Fin con éxito
  • Si X a ltgt
  • Sacar X de la pila
  • Obtener siguiente símbolo de la entrada
  • Si X no terminal
  • Si M X, a contiene una regla
  • Sacar X de la pila
  • Meter en la pila la parte derecha de la regla en
    orden inverso
  • Si M X, a no contiene una regla
  • Llamar a la rutina de recuperación de error

21
No terminal Símbolo de entrada Símbolo de entrada Símbolo de entrada Símbolo de entrada Símbolo de entrada Símbolo de entrada
No terminal id ( )
E E ? TE E ? TE
E E ? TE E ? e E ? e
T T ? FT T ? FT
T T ? e T ? FT T ? e T ? e
F F ? id F ? (E)
PILA ENTRADA SALIDA
E ET ETF ETid ET E ET ET ETF ETid ET ETF ETF ETid ET E id id id id id id id id id id id id id id id id id id id id id id id id id id id id E ? TE T ? FT F ? id T ? e E ? TE T ? FT F ? id T ? FT F ? id T ? e E ? e
  • Gramática
  • E ? TE
  • E ? TE e
  • T ? FT
  • T ? FT e
  • F ? (E) id

22
Algoritmo de Análisis Sintáctico Predictivo no
recursivo
  • apuntar ae al primer símbolo de w
  • repetir
  • X ? símbolo de la cima de la pila
  • a ? símbolo apuntado por ae
  • si x es un terminal o entonces
  • si X a entonces
  • extraer X de la pila
  • avanzar ae
  • si_no error fin_si
  • si_no
  • si Mx,a X ? Y1Y2...Yk entonces
  • extraer X de la pila
  • meter Yk, Yk-1, ..., Y1 en la pila, con Y1 en
    la cima
  • emitir la producción X ? Y1Y2...Yk
  • si_no error fin_si
  • fin_si
  • hasta_que X /la pila está vacia/

23
Funciones PRIMERO y SIGUIENTE
  • La función PRIMERO(a) devuelve el conjunto de
    terminales que inician las cadenas derivadas de a
  • La función SIGUIENTE(a) devuelve el conjunto de
    terminales que pueden aparecer inmediatamente a
    la derecha de a en alguna forma de frase
  • Son funciones asociadas a una gramática G
  • Permiten rellenar las entradas de una tabla de
    ASP para G
  • Los conjuntos de componentes léxicos devueltos
    por la función SIGUIENTE se pueden utilizar como
    elementos de sincronización durante la
    recuperación de errores en modo pánico

24
FUNCIÓN PRIMERO (X)
  • Para todos los símbolos X de la gramática
  • Repetir hasta que no se puedan añadir más
    símbolos a ningún conjunto
  • Si existe la regla x ? e
  • PRIMERO (X) PRIMERO(X) U e
  • Si x es un símbolo terminal
  • PRIMERO (X) X
  • Si x es un símbolo no terminal
  • Para cada producción x ? y1y2...yk
  • PRIMERO (X) PRIMERO (X) U PRIMERO (Y1)
  • si existe la regla y1 ? e
  • PRIM (X) PRIM (X) U PRIM (Y1) U PRIM (Y2)
  • si existen las reglas y1 ? e y y2 ? e
  • PRIM (X) PRIM (X) U PRIM (Y1) U PRIM (Y2)
    U PRIM (Y3)
  • ....
  • si existe la regla yn ? e ? n1...k
  • PRIM (X) PRIM (X) U PRIM (Y1) U PRIM (Y2)
    U .... U PRIM (Yk) U e

25
FUNCIÓN SIGUIENTE (X)
  • Para todos los símbolos A no terminales de la
    gramática
  • Repetir hasta que no se puedan añadir más
    símbolos a ningún conjunto
  • Si S es el símbolo inicial de la gramática
  • SIGUIENTE (S) SIGUIENTE (S) U
  • Si existe una regla A ? aBß
  • SIGUIENTE (B) PRIMERO (ß) - e
  • Si existe una regla A ? aB
  • SIGUIENTE (B) SIGUIENTE (B) U SIGUIENTE
    (A)
  • Si existe una regla A ? aBß y e ? PRIMERO
    (ß)
  • SIGUIENTE (B) SIGUIENTE (B) U SIGUIENTE (A)

26
  • Gramática
  • E ? TE T ? FT e
  • E ? TE e F ? (E) id
  • T ? FT

SIGUIENTES
PRIMEROS
E E T T F ( ) id E E T T F
( ( ( ( ) id
id e id e id ) )
) )
)
27
ALGORITMO DE CONSTRUCCIÓN DE TASP
  • Entrada Una gramática G
  • Salida La tabla de análisis sintáctico M
  • Para cada regla X ? a de G
  • Para terminal t de PRIMERO (a)
  • Añadir X ? a a MX, t
  • Si e ? PRIMERO (a)
  • Añadir X ? a a MX, b, ? b ? SIGUIENTE (x)
  • Si e ? PRIMERO (a) y ? SIGUIENTE (X)
  • Añadir X ? a a MX,
  • Poner error en todas las entradas no definidas de
    M

28
  • regla E ? TE PRIMERO (TE) PRIMERO (T) (,
    id M E, ( E ? TE M E, id E
    ? TE
  • regla E ? TE PRIMERO (TE) PRIMERO ()
    M E, E ? TE
  • regla E ? e SIGUIENTE (E) ),
  • M E, ) E ? e
  • M E, E ? e
  • regla T ? FT PRIMERO (FT) PRIMERO (F) (,
    id
  • M T, ( T ? FT M T, id T ?
    FT
  • regla T ? FT PRIMERO (FT) PRIMERO ()
    M T, T ? FT
  • regla T ? e SIGUIENTE (T) ), ,
  • M T, ) T ? e
  • M T, T ? e
  • M T, T ? e
  • regla F ? (E) PRIMERO ((E)) PRIMERO (() (
  • M F, ( F ? (E)
  • regla F ? id PRIMERO (id) id
  • M F, id F ? id

29
No terminal Símbolo de entrada Símbolo de entrada Símbolo de entrada Símbolo de entrada Símbolo de entrada Símbolo de entrada
No terminal id ( )
E E ? TE error error E ? TE error error
E error E ? TE error error E ? e E ? e
T T ? FT error error T ? FT error error
T error T ? e T ? FT error T ? e T ? e
F F ? id error error F ? (E) error error
30
GRAMÁTICAS LL(1)
  • Si una gramática es recursiva por la izquierda o
    ambigua la TASP tendrá al menos una entrada con
    definición múltiple. Recurso Transformar la
    gramática
  • Una gramática cuya TASP no tiene entradas con
    definiciones múltiples se define como LL(1)
  • Ninguna gramática ambigua o recursiva por la
    izquierda puede ser LL(1)
  • G es LL(1), si y solo si, cuando A ? aß siendo
    dos reglas distintas de G se cumple
  • PRIMERO (a) n PRIMERO (ß) ?
  • Solo puede derivarse e de a o de ß
  • Si ß deriva e, a no deriva ninguna cadena que
    comience con un terminal de SIGUIENTE (A)

31
ANÁLISIS ASCENDENTE
  • Estilo general Análisis sintáctico por
    desplazamiento y reducción
  • Por precedencia de operadores (gramáticas muy
    específicas)
  • LR (generadores automáticos de AS)
  • Se construye el árbol de AS para una cadena w a
    partir de las hojas y se avanza hacia la raíz
  • Proceso reducir w al símbolo inicial de la
    gramática
  • Cada reducción sustituye una subcadena (asidero o
    mango) que concuerde con el lado derecho de un
    regla de producción por el símbolo no terminal
    del lado izquierdo de esa regla

32
ASIDEROS O MANGOS
  • Un asidero de una cadena es una subcadena que
    concuerda con el lado derecho de una producción y
    cuya reducción al no terminal del lado izquierdo
    de la regla es un paso de una derivación por la
    derecha
  • Ejemplo
  • S ? aABe
  • A ? Abc
  • A ? b
  • B ? d

a b b c d e asidero posición 2 (regla A ?
b) a A b c d e asidero posición 2 (regla A ?
Abc) a A d e asidero posición 3 (regla B
? d) a A B e asidero posición 1 (regla S
? aABe) S
33
ASIDEROS O MANGOS
  • La producción situada más a la izquierda de ß que
    concuerda con el lado derecho de una producción A
    ? ß no es un asidero si la reducción por esa
    regla genera una cadena no reducible al símbolo
    inicial
  • Ejemplo
  • S ? aABe
  • A ? Abc
  • A ? b
  • B ? d

a A b c d e aunque b es la subcadena situada
más a la izquierda que concuerda
con una parte derecha (regla A ? b) no es
un asidero a A A c d e No se puede reducir a S
34
ASIDEROS O MANGOS
  • Formalmente, un asidero de una forma de frase
    derecha µ es una regla A ? ß y una posición de µ
    donde la cadena ß podría encontrarse y
    sustituirse por A para producir la forma de frase
    derecha previa en una derivación por la derecha
    de µ
  • Ejemplo
  • E ? E E
  • E ? E E
  • E ? ( E )
  • E ? id

Formas de Frase Derecha Asidero Regla de Reducción
id1 id2 id3 id1 E ? id
E id2 id3 id2 E ? id
E E id3 id3 E ? id
E E E E E E ? E E
E E E E E ? E E
E
35
USO DE UNA PILA EN AS POR DESPLAZAMIENTO Y
REDUCCIÓN
  • Problemas de implantación del AS por
    desplazamiento y reducción
  • Situar la subcadena a reducir
  • Elegir la regla adecuada en caso de que haya más
    de una con esa subcadena en la parte derecha
  • Posible solución utilizar
  • Una pila para manejar los símbolos gramaticales
  • Buffer de entrada para gestionar la cadena w a
    analizar

36
FUNCIONAMIENTO DEL ANALIZADOR
  • Inicialmente
  • En la pila el símbolo de fin de cadena ()
  • En el buffer la cadena a analizar seguida de la
    marca de fin de línea (w)
  • Repetir hasta que se detecte un error o en la
    pila solo haya el símbolo inicial (E) y la
    entrada está vacía ()
  • Desplazar cero o más símbolos de la entrada a la
    pila hasta que en la cima haya un asidero ß
  • Reducir ß al lado izquierdo de la regla adecuada

37
OPERACIONES DEL ANALIZADOR
  • Desplazar Mover el siguiente símbolo de entrada
    a la cima de la pila
  • Reducir (En este momento el extremo derecho del
    asidero está en la cima de la pila) Localizar el
    extremo izquierdo del asidero dentro de la pila y
    decidir el no terminal con el que se debe
    sustituir el asidero.
  • Aceptar Anunciar el fin con éxito del análisis
  • Error Llamar a la rutina de recuperación de
    errores

38
pila entrada acción
id1 id2 id3 desplazar
id1 id2 id3 reducir por E ? id
E id2 id3 desplazar
E id2 id3 desplazar
E id2 id3 reducir por E ? id
E E id3 desplazar
E E id3 desplazar
E E id3 reducir por E ? id
E E E reducir por E ? E E
E E reducir por E ? E E
E aceptar
39
PREFIJOS VIABLES
  • Este método de análisis garantiza que el asidero
    siempre aparecerá en la cima de la pila, nunca
    dentro
  • Los prefijos de las formas de frase derecha que
    pueden aparecer en la pila se denominan prefijos
    viables
  • Un prefijo viable es un prefijo de una forma de
    frase derecha que no continua más allá del
    extremo derecho del asidero situado más a la
    derecha de esta forma de frase

40
CONFLICTOS
  • Existen gramáticas independientes de contexto
    para las que no se pueden utilizar analizadores
    sintácticos por desplazamiento y reducción
    (gramáticas no LR)
  • En esas gramáticas se puede llegar a una
    configuración en la que, conociendo el contenido
    de la pila y el siguiente símbolo de entrada, no
    se puede decidir si
  • Desplazar o reducir (conflicto de
    desplazamiento/reducción)
  • Que tipo de reducción efectuar (conflicto de
    reducción/reducción)

41
ANALIZADORES SINTÁCTICOS LR
  • Se pueden construir AS LR para casi todos los
    lenguajes que se pueden describir con GLC
  • Es el método de análisis por desplazamiento y
    reducción sin retroceso más general pero
    eficiente
  • La clase de gramáticas aplicables es un
    supraconjunto de las que se pueden analizar con
    ASP
  • Detectan los errores sintácticos tan pronto como
    sea posible en un examen de izquierda a derecha
  • Inconveniente costosos de construir a mano

42
ALGORITMO DE ANÁLISIS SINTÁCTICO LR
43
ALGORITMO DE ANÁLISIS SINTÁCTICO LR
  • Entrada
  • Cadena de entrada w
  • Tabla de AS LR con las funciones acción e ir_a
    para la gramática G
  • Salida
  • Si w está en L(G) una derivación ascendente
  • Si no indicación de error
  • Método
  • Inicialmente
  • La pila contiene S0 (estado inicial)
  • El buffer de entrada contiene w (la cadena de
    entrada seguida de la marca de fin de cadena)
  • Ejecución del programa de análisis hasta
    encontrar una acción de aceptación o de error

44
PROGRAMA DE ANÁLISIS
  • apuntar ae al primer símbolo de w
  • repetir
  • sea S el estado en la cima de la pila y
  • a el símbolo apuntado por ae
  • si accion S,a desplazar S entonces
  • meter a y después S en la cima de la pila
  • avanzar ae al siguiente símbolo de entrada
  • si_no
  • si acción S, a reducir A ? ß entonces
  • sacar 2 ß símbolos de la pila
  • sea S el estado que hay ahora en la cima de
    la pila
  • meter en la cima de la pila A y después ir_a
    S, A
  • emitir la producción A ? ß
  • si_no
  • si acción S, a aceptar entonces
  • fin con éxito
  • si_no error
  • fin_repetir

45
EJEMPLO
  • Gramática
  • (1) E ? E T
  • (2) E ? T
  • (3) T ? T F
  • (4) T ? F
  • (5) F ? (E)
  • (6) F ? id
  • Códigos de las acciones
  • di significa desplazar y meter en la pila el
    estado i
  • rj significa reducir por la regla de número j
  • Acep significa aceptar
  • El espacio en blanco significa error

46
TABLA DE ANÁLISIS SINTÁCTICO LR (para la
gramática del ejemplo)
Estado acción acción acción acción acción acción ir_a ir_a ir_a
Estado id ( ) E T F
0 d5 d4 1 2 3
1 d6 acep
2 r2 d7 r2 r2
3 r4 r4 r4 r4
4 d5 d4 8 2 3
5 r6 r6 r6 r6
6 d5 d4 9 3
7 d5 d4 10
8 d6 d11
9 r1 d7 r1 r1
10 r3 r3 r3 r3
11 r5 r5 r5 r5
47
MOVIMIENTOS DEL ANALIZADOR SINTÁCTICO LR DEL
EJEMPLO (para la entrada id id id)
PILA PILA ENTRADA ACCION
(1) 0 id id id desplazar
(2) 0 id 5 id id reducir por F ? id
(3) 0 F 3 id id reducir por T ? F
(4) 0 T 2 id id desplazar
(5) 0 T 2 7 id id desplazar
(6) 0 T 2 7 id 5 id reducir por F ? id
(7) 0 T 2 7 F 10 id reducir por T ? T F
(8) 0 T 2 id reducir por E ? T
(9) 0 E 1 id desplazar
(10) 0 E 1 6 id desplazar
(11) 0 E 1 6 id 5 reducir por F ? id
(12) 0 E 1 6 F 3 reducir por T ? F
(13) 0 E 1 6 T 9 reducir por E ? E T
(14) 0 E 1 aceptar
48
GENERADORES DE AS YACC
  • Yacc es un generador de analizadores sintácticos
    LALR
  • Resolución de conflictos en Yacc
  • Un conflicto reducción/reducción se resuelve
    eligiendo la regla en conflicto que se haya
    listado primero en la especificación en Yacc
  • Un conflicto de desplazamiento/reducción se
    resuelve a favor del desplazamiento
  • Invocando a Yacc con la opción v se genera el
    archivo y.output que contiene
  • Los núcleos de los conjuntos de elementos
    encontrados por el analizador sintáctico
  • Una descripción de los conflictos en las acciones
    del análisis generados por el algoritmo LALR
  • Una representación legible de la tabla de
    análisis sintáctico LR que muestra como se
    resolvieron los conflictos de las acciones del
    análisis sintáctico
Write a Comment
User Comments (0)
About PowerShow.com