23
Compiladores: Análisis Sintáctico Pontificia Universidad Javeriana Cali Ingenieria de Sistemas y Computación Prof. Gloria Inés Alvarez V.

Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

  • Upload
    ledieu

  • View
    237

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Compiladores:

Análisis Sintáctico

Pontificia Universidad Javeriana Cali

Ingenieria de Sistemas y Computación

Prof. Gloria Inés Alvarez V.

Page 2: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Parsing LR:Ejemplo:

Pontificia U. Javeriana Cali - Ingeniería de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

21s3I0

GotoAction

r3

r1

r4

r2

Acc

$ E

r3r3I7

s5r1I6

s7I5

6s3I4

r4r4I3

s5r2I2

s4I1

T*+Id• E → E + T• E → T• T → T * id• T → id

Sn : shift al estado nRm: reduce con la

regla (m)Acc: acceptEspacio en blanco:

error.

Page 3: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Algoritmo LR [Aho p. 251]

Page 4: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Autómata LR(0) [Aho p.244]

Page 5: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción tabla SLR(0) Para I

0 Action[0,(] = desplazar 4

Action[0,id] = desplazar 5 Para I

1 Action[1,$] = aceptar

Action[1,+] = desplazar 6 Para I

2 se sabe que follow(E) = {$,+,)}

Action[2,$] = reducir E → T Action[2,+] = reducir E → T Action[2,)] = reducir E → T Action[2,*] = desplazar 7

Page 6: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción de Tabla LR Canonica

Es la técnica más general para construir tablas de parsing LR.

Permite llevar mas información en los estados, lo cual evitará realizar reducciones invalidas.

Este item es llamado Item LR(1), “1” se refiere a la longitud del segundo componente (el “lookahead” del item).

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Page 7: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Items Canónicos LR(1) Se extienden los items para incluir información

acerca del símbolo siguiente en la entrada. La información adicional se incorpora incluyendo en

el item símbolos terminales como segundos componentes:

[ A → α•β, a],

donde A → αβ es una regla de producción y a es un símbolo terminal o $ (marcador de

finalización)

Page 8: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción de los conjuntos de items LR(1)

Clausura (I):repita

para cada item [A→α•Bβ, a] en Ipara cada producción B → γ en G’

para cada terminal b en FIRST(βa)agregue [B →•γ, b] a I

hasta que no sea posible agregar mas items a Iretorne I

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Page 9: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción de los conjuntos de items LR(1)

Goto (I, X):

J = conjunto de items [A→αX•β, a], tales que [A→α•Xβ, a] está en I

retorne (Clausura (J));

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Page 10: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción de los conjuntos de items LR(1)

Items (G’): C = Clausura ({ [S’→•S, $] })

repita

para cada conjunto de items I en C

para cada símbolo gramatical X tal que

goto(I, X) no es vacío, y no está en C

agregue goto(I, X) a C

hasta que no se puedan agregar más conjuntos de items a C

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Page 11: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Tabla LR(1)[Aho p. 265]

Page 12: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción de Tabla LALR

Produce tablas más pequeñas que el LR Canonico.

Las construcciones sintácticas mas comunes de lenguajes de programación pueden ser expresadas con gramáticas LALR.

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Page 13: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción de tabla LALR(1)[Aho p.268]

Page 14: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Tabla LALR(1)[Aho p. 265]

Page 15: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción de Tabla LALR. Ejemplo Gramatica aumentada:

S’ → S

S → C C

C → e C

C → d

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Page 16: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción de Tabla LALR. Ejemplo: Estados

I0 = { S’ → •S, $

S → •CC, $C → •eC, e/dC → •d, e/d }

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

I1 = { S’ → S•, $ }

I2 = { S → C•C, $

C → •eC, $C → •d, $ }

I3 = { C → e•C, e/d

C → •eC, e/dC → •d, e/d }

I4 = { C → d•, e/d }

I5 = { S → CC•, $ }

I6 = { C → e•C, $

C → •eC, $C → •d, $ }

I7 = { C → d•, $ }

I8 = { C → eC•, e/d }

I9 = { C → eC•, $ }

Page 17: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción tabla LALREjemplo [Aho p.262]

Page 18: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Construcción tabla LALREjemplo [Aho p.269]

Page 19: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

FIN

Page 20: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Recuperación de Error en parsing LR

Los errores se detectan en la tabla de acciones (no en la tabla de goto)

El parsing LR canónico no realiza reducciones antes de anunciar el error.

Los parsing SLR y LALR realizan reducciones, pero no hacen shift de un símbolo de entrada erroneo en la pila.

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Page 21: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Recuperación de Error en parsing LR

Recuperación de error en modo pánico: Desciende por la pila buscando un estado s que tenga un goto a un no terminal A (que represente una pieza importante del programa ej. Instrucción, bloque, expresión...)

Se descartan símbolos de la entrada, hasta encontrar un símbolo a que pertenece a FOLLOW (A)

El parser realiza goto[s,A]

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Page 22: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Recuperación de Error en parsing LR

Recuperación de error a nivel de frase: Crea rutinas de recuperación de error para cada entrada erronea de la tabla de parsing, decidiendo con base en los errores usuales que los programadores cometen.

La rutina modifica los símbolos en el tope de la pila.

Los cambios deben garantizar que el parser no entre en un ciclo infinito.

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón

Page 23: Compiladores: Análisis Sintáctico - DECCcic.puj.edu.co/wiki/lib/exe/fetch.php?media=materias:compi:comp... · Análisis Sintáctico Pontificia Universidad Javeriana Cali ... Este

Análizador Sintáctico Ascendente: Conflictos

Una gramática ambigua no puede ser LR(k)

Pero el analizador puede ser adaptado para reconocer ciertas gramáticas ambiguas, usando reglas que especifican la solución al conflicto: Usando precedencia y asociatividad Resolver el conflicto desplazamiento-reducción

optando por el desplazamiento

Pontificia U. Javeriana Cali - Ingenieria de Sistemas y Computación – Compiladores – Prof. Ma. Constanza Pabón