141
Compiladores Clasificación de Gramáticas y Manejo de Errores

10_Clasificacion_de_Gramaticas

Embed Size (px)

Citation preview

Page 1: 10_Clasificacion_de_Gramaticas

Compiladores

Clasificación de Gramáticas y Manejo de Errores

Page 2: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 2 Universidad Galileo

Resumen

• Repaso de parseo LR y algunas clarificaciones

• Clasificación de gramáticas

• Lenguajes LR

• Eliminando Ambiguedad

• Manejo de errores y recuperación de errores

Page 3: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 3 Universidad Galileo

LR(0) y LR(1), ¿donde está el look ahead?

• Tanto LR(0) como LR(1) tienen el mismo engine de ejecución, la diferencia está en la construcción de la tabla de parseo– Entonces, ¿dónde está el look ahead?

Page 4: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 4 Universidad Galileo

LR(0) y LR(1), ¿donde está el look ahead?

• Shift sn– ve el símbolo de entrada,

– ya sea lo consume o termina de parsear (accept o error) no es un look ahead

• Goto sn– sólo ve el stack

• Reduce n– LR(0) misma reducción para todos los inputs no look ahead

– LR(1) necesitamos el símbolo de entrada un look ahead

Page 5: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 5 Universidad Galileo

ACTION GotoState ( ) $ X Ys0 shift to s1 reduce (5) reduce (5) goto s5 goto s6s1 shift to s2 reduce (5) reduce (5) goto s3s2 shift to s2 reduce (5) reduce (5) goto s3s3 error shift to s4 error s4 error reduce (4) reduce (4) s5 error error accept s6 error error reduce (2)

SL

(1)

LR

(0)

ACTION GotoState ( ) $ Xs0 shift to s2 error error goto s1s1 error error accept s2 shift to s2 shift to s5 error goto s3s3 error shift to s4 error s4 reduce (2) reduce (2) reduce (2) s5 reduce (3) reduce (3) reduce (3)

Page 6: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 6 Universidad Galileo

Algunas Definiciones

• ¿Qué es una gramática XY(k)?(X, Y {L, R})

• Una gramática G es una gramática XY(k) si y sólo si podemos crear una tabla de parseo XY(k) sin ningún conflicto shift/reduce o reduce/reduce

Page 7: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 7 Universidad Galileo

Construcción de un Parse Engine LR(0)

• Agregamos la producción especial S’ S $

• Encontramos los ítems de la CFG

• Creamos el DFA– Comenzamos con el ítem S’ • S $

– Usando las funciones closure y goto

• Construimos la tabla de parseo

LR(0)ParserEngine

Page 8: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 8 Universidad Galileo

Construcción de un parse engine SLR(1)

• Agregamos la producción especial S’ S $• Calcular el conjunto follow para todos los no-

terminales• Encontrar los ítems LR(0) de la CFG• Crear el DFA

– Comenzamos con el ítem S’ • S $

– Usando las funciones closure y goto

• Construir la tabla de parseo– Usando el DFA y la información del conjunto

follow

SLRParserEngine

Page 9: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 9 Universidad Galileo

Construcción de un parse engine LR(1)

• Agregamos la producción especial S’ S $

• Encontramos los ítems LR(1) de la CFG

• Creamos el DFA– Comenzamos con el ítem [S’ • S $, ?]– Usamos las funciones closure y goto

• Construimos la tabla de parseo

LR(1)ParserEngine

Page 10: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 10 Universidad Galileo

Resumen

• Repaso de parseo LR y algunas clarificaciones

• Clasificación de gramáticas

• Lenguajes LR

• Eliminando Ambiguedad

• Manejo de errores y recuperación de errores

Page 11: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 11 Universidad Galileo

Clasificación de Gramáticas

Context free

Page 12: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 12 Universidad Galileo

Clasificación de Gramáticas

regular

Context free

G0

Page 13: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 13 Universidad Galileo

Gramáticas Regulares• Una gramática que puede ser expresada usando

una expresión regular es una gramática regular• Lenguaje Ejemplo:

– Cero o más paréntesis abiertos seguidos de cero o más paréntesis cerrados

• G0 = { (a )b

| a, b >= 0 }• Gramática

S X Y $X ( X | Y ) Y |

Page 14: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 14 Universidad Galileo

Clasificación de Gramáticas

regular

LR(0)

Context free

G0 G1

Page 15: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 15 Universidad Galileo

Gramáticas LR(0)

• Una gramática que puede crear una tabla de parseo LR(0) sin ningún conflicto shift/reduce o reduce/reduce

• Lenguaje Ejemplo:– Uno o más paréntesis abiertos seguidos de un número

igual de paréntesis cerrados

• G1 = { (n )n

| n > 0 }• La gramática

<S> <X> $<X> ( <X> ) | ( )

Page 16: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 16 Universidad Galileo

Clasificación de Gramáticas

regular

LR(0)SLR(1)

Context free

G0 G1 G2

Page 17: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 17 Universidad Galileo

Gramáticas SLR(1)

• Una gramática que puede crear una tabla de parseo SLR(1) sin ningún conflicto shift/reduce o reduce/reduce

• Lenguaje Ejemplo:– Cero o más paréntesis abiertos seguidos de un número

igual de paréntesis cerrados

• G2 = { (n )n

| n >= 0 }• La gramática

<S> <X> $<X> ( <X> ) |

Page 18: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 18 Universidad Galileo

Clasificación de Gramáticas

regular

LR(0)SLR(1)

LALR(1)

Context free

G0 G1 G2 G3

Page 19: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 19 Universidad Galileo

Gramáticas LALR(1)

• Una gramática que puede crear una tabla de parseo LALR(1) sin ningún conflicto shift/reduce o reduce/reduce

• Lenguaje Ejemplo:– ???

• G3 = { ??? }

• La gramática

Page 20: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 20 Universidad Galileo

Clasificación de Gramáticas

regular

LR(0)SLR(1)

LALR(1)LR(1)

Context free

G0 G1 G2 G3 G4

Page 21: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 21 Universidad Galileo

Gramáticas LR(1)

• Una gramática que puede crear una tabla de parseo LR(1) sin ningún conflicto shift/reduce o reduce/reduce

• Lenguaje Ejemplo:– Cero o más paréntesis abiertos seguidos de un número igual de

paréntesis cerrados o un solo paréntesis abierto

• G4 = { (n )n

| n >= 0 } { ( }

• La gramática<S> <X> $

<X> ( | <Y>

<Y> ( <Y> ) |

Page 22: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 22 Universidad Galileo

Clasificación de Gramáticas

regular

LR(0)SLR(1)

LALR(1)LR(1)LR(k)

Context free

G0 G1 G2 G3 G4 G5

Page 23: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 23 Universidad Galileo

Gramáticas LR(k)• Una gramática que puede crear una tabla de parseo LR(k)

sin ningún conflicto shift/reduce o reduce/reduce• Lenguaje Ejemplo:

– Cero o más paréntesis abiertos seguidos de un número igual de paréntesis cerrados o un número igual de corchetes cerrados

• G5 = { (n )n

| n >= 0 } { (n ]n

| n >= 0 }

• La gramática<S> <X> $

<X> <Y> | <Z>

<Y> ( <Y> ) | <Z> ( <Z> ] |

Page 24: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 24 Universidad Galileo

Clasificación de Gramáticas

regular

LR(0)SLR(1)

LALR(1)LR(1)LR(k)

unambiguousContext free

G0 G1 G2 G3 G4 G5 G6

Page 25: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 25 Universidad Galileo

Gramáticas no Ambiguas• Una gramática es no ambigua sí y sólo sí tiene una

secuencia de derivación derecha (rightmost) única (parse tree)

• Ejemplo:

• G6 = { [(n )n

| n >= 0 } { ](n )2n

| n >= 0 }

• La gramática<S> <X> $<X> [ <Y> | ] <Z><Y> ( <Y> ) | <Z> ( <Z> ))|

Page 26: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 26 Universidad Galileo

Clasificación de Gramáticas

regular

LR(0)SLR(1)

LALR(1)LR(1)LR(k)

unambiguousContext free

G0 G1 G2 G3 G4 G5 G6 G7

Page 27: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 27 Universidad Galileo

Gramáticas Ambiguas• Una gramática es ambigua sí y sólo sí tiene más

de una secuencia de derivación por la derecha• Ejemplo:

• G7 = { (i )j

(k | i = j or j = k }

• La gramática<S> <X> $<X> <P> <Q> | <R> <S><P> ( <P> ) | <Q> ( <Q> | <R> ( <R> | <S> ) <S> ( |

Page 28: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 28 Universidad Galileo

G0

Clasificación de Gramáticas

regular

LR(0)SLR(1)

LALR(1)LR(1)LR(k)

unambiguousContext free

G1 G2 G3 G4 G5 G6 G7

Page 29: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 29 Universidad Galileo

G0

Clasificación de Gramáticas

regular

LR(0)SLR(1)

LALR(1)LR(1)LR(k)

unambiguousContext free

G1 G2 G3 G4 G5 G6 G7

LL(0)

Page 30: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 30 Universidad Galileo

G0

Clasificación de Gramáticas

regular

LR(0)SLR(1)

LALR(1)LR(1)LR(k)

unambiguousContext free

G1 G2 G3 G4 G5 G6 G7

LL(0)

LL(1)

Page 31: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 31 Universidad Galileo

Pregunta• ¿Qué hay acerca del lenguaje?

• G8 = { (i )j

(k | i = j = k }

Page 32: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 32 Universidad Galileo

Resumen

• Repaso de parseo LR y algunas clarificaciones

• Clasificación de gramáticas

• Lenguajes LR

• Eliminando Ambiguedad

• Manejo de errores y recuperación de errores

Page 33: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 33 Universidad Galileo

Lenguajes LR

• Un lenguaje libre de contexto es un lenguaje LR sí y sólo sí puede ser generado por una gramática LR(k) para algún k

Page 34: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 34 Universidad Galileo

Lenguajes LR

• El conjunto de lenguajes LR es independiente de la distancia de lookahead k

• Dada cualquier gramática LR(k) Gk, existe una gramática LR(0) G0 tal que L(Gk) = L(G0)

• Para todos los lenguajes que vimos con gramáticas SLR(1), LALR(1) y LR(1), ¡¡¡podríamos haber encontrado una gramática LR(0)!!!

Page 35: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 35 Universidad Galileo

EjemploLenguaje

Cero o más paréntesis abiertos seguidos de un número igual de paréntesis cerradoso un solo paréntesis abierto

Gramática LR(1)<S> <X> $ <X> <Y> <X> ( <Y> ( <Y> ) <Y>

¿Hay alguna gramática LR(0) para este lenguaje?

Page 36: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 36 Universidad Galileo

<S> • <X> $<X> • Y<X> • ( <Y> • ( <Y> )<Y> •

s0

Y

<S> <X> • $s5

(Y

s4<Y> ( <Y> ) •

)<Y> ( <Y> • )s3

<X> ( •<Y> ( • <Y> ) <Y> • ( <Y> )<Y> •

s1

(<Y> ( • <Y> ) <Y> • ( <Y> )<Y> •

s2(

<X> <Y> •s6

X

Y

Ejemplo Expandido DFA

<S> <X> $<X> <Y>

<X> ( <Y> ( <Y> )

<Y>

26

Page 37: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 37 Universidad Galileo

<S> • <X> $<X> • Y<X> • ( <Y> • ( <Y> )<Y> •

s0

Y

<S> <X> • $s5

(Y

s4<Y> ( <Y> ) •

)<Y> ( <Y> • )s3

<X> ( •<Y> ( • <Y> ) <Y> • ( <Y> )<Y> •

s1

(<Y> ( • <Y> ) <Y> • ( <Y> )<Y> •

s2(

<X> <Y> •s6

X

Y

Ejemplo Expandido DFA

<S> <X> $<X> <Y>

<X> ( <Y> ( <Y> )

<Y>

26

Page 38: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 38 Universidad Galileo

LenguajeCero o más paréntesis abiertos seguidos de un número igual de paréntesis cerradoso un solo paréntesis abierto

Gramática LR(1)<S> <X> $ <X> <Y> <X> ( <Y> ( <Y> ) <Y>

Ejemplo

Gramática LR(0)<S> <X> $

<X> <Y><X> ( <Z><X> <Z> <Y> ( <Y> )<Y> <Z> <Z>

Page 39: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 39 Universidad Galileo

<S> • <X> $<X> • <Y><X> • ( <Z><X> • <Z><Y> • ( <Y> )<Y> • <Z>

s0

<S> <X> • $s5

( Y

s4<Y> ( <Y> ) •

)<Y> ( <Y> • )s3

<Y> ( • <Y> )<X> ( • <Z><Y> • ( <Y> )<Y> • <Z>

s1

(<Y> ( • <Y> )<Y> • ( <Y> )<Y> • <Z>

s2

(

X

Y

DFA del Ejemplo<S> <X> $ <X> <Y> <X> ( <Z><X> <Z> <Y> ( <Y> ) <Y> <Z><Z>

Y

<X> <Y> •s6

<Z> •s7

ZZ

Z

Page 40: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 40 Universidad Galileo

<S> • <X> $<X> • <Y><X> • ( <Z><X> • <Z><Y> • ( <Y> )<Y> • <Z>

s0

<S> <X> • $s5

( Y

s4<Y> ( <Y> ) •

)<Y> ( <Y> • )s3

<Y> ( • <Y> )<X> ( • <Z><Y> • ( <Y> )<Y> • <Z>

s1

(<Y> ( • <Y> )<Y> • ( <Y> )<Y> • <Z>

s2

(

X

Y

DFA del Ejemplo<S> <X> $ <X> <Y> <X> ( <Z><X> <Z> <Y> ( <Y> ) <Y> <Z><Z>

Y

<X> <Y> •s6

<Z> •s7

ZZ

Z

Page 41: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 41 Universidad Galileo

Lenguajes LR

• El conjunto de lenguajes LR es independiente de la distancia de lookahead k

• Dada cualquier gramática LR(k) Gk, existe una gramática LR(0) G0 tal que L(Gk) = L(G0)

• Para todos los lenguajes que vimos con gramáticas SLR(1), LALR(1) y LR(1), ¡¡¡podríamos haber encontrado una gramática LR(0)!!!

• ¡¡¡Pero esto puede ser muy difícil!!!

Page 42: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 42 Universidad Galileo

Resumen

• Repaso de parseo LR y algunas clarificaciones

• Clasificación de gramáticas

• Lenguajes LR

• Eliminando Ambiguedad

• Manejo de errores y recuperación de errores

Page 43: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 43 Universidad Galileo

Lenguajes Ambiguos

• Un lenguaje libre de contexto es inherentemente ambiguo si toda gramática que genera el lenguaje es ambigua

• Sin embargo, la mayoría de gramáticas ambiguas encontradas en la práctica son para lenguajes no ambiguos– Queremos hacerlas no ambiguas

Page 44: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 44 Universidad Galileo

Gramáticas Ambiguas

• Si tenemos una gramática ambigua para un lenguaje no ambiguo, podemos:– Escribir una gramática no ambigua– Usar precedencia y asociatividad para resolver los

conflictos en las acciones del parser

Page 45: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 45 Universidad Galileo

Ejemplo

<E> <E> + <E> | <E> * <E> | ( <E> ) | id

Page 46: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 46 Universidad Galileo

Ejemplo

<E> <E> + <E> | <E> * <E> | ( <E> ) | id

• Escribiendo una gramática no ambigua

Page 47: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 47 Universidad Galileo

Ejemplo

<E> <E> + <E> | <E> * <E> | ( <E> ) | id

• Escribiendo una gramática no ambigua<E> <E> + <T> | <T>

<T> <T> * <F> | <F>

<F> ( <E> ) | id

Page 48: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 48 Universidad Galileo

<S> <E> $

<E> <E> + <E> | <E> * <E> | ( <E> ) | id

Page 49: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 49 Universidad Galileo

<S> <E> $

<E> <E> + <E> | <E> * <E> | ( <E> ) | id

<S> • <E><E> • <E> + <E><E> • <E> * <E><E> • ( <E> )<E> • id

s0

<S> <E> • <E> <E> • + <E><E> <E> • * <E>

s1

<S> ( • <E> )<E> • <E> + <E><E> • <E> * <E><E> • ( <E> )<E> • id

s2

<E> id •

s3

<S> <E> + • <E><E> • <E> + <E><E> • <E> * <E><E> • ( <E> )<E> • id

s4<S> <E> * • <E><E> • <E> + <E><E> • <E> * <E><E> • ( <E> )<E> • id

s5

<E> <E> • + <E><E> <E> • * <E><E> ( <E> •)

s6

<S> <E> * <E> •<E> <E> • + <E><E> <E> • * <E>

s8

<E> <E> + <E> •<E> <E> • + <E><E> <E> • * <E>

s7

<E> ( <E> ) •

s9

Page 50: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 50 Universidad Galileo

s0 $

*id + id id

Page 51: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 51 Universidad Galileo

s1s4s7

<E>+

<E>

s0 $

*id + id id

Page 52: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 52 Universidad Galileo

s1s4s7

<E>+

<E>

s0 $

*id + id id

<E> <E> + <E> •<E> <E> • + <E><E> <E> • * <E>

s7

Shift or reduce

Page 53: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 53 Universidad Galileo

Usando Precedencia y Asociatividad

• Construimos el DFA y construimos la tabla de parseo

• Cuando hay un conflicto usamos la información de precedencia y asociatividad

Page 54: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 54 Universidad Galileo

Otro Ejemplo

<stmt> if <expr> then <stmt> else <stmt><stmt> if <expr> then <stmt> <stmt> other

Page 55: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 55 Universidad Galileo

Otro Ejemplo

<stmt> if <expr> then <stmt> else <stmt><stmt> if <expr> then <stmt> <stmt> other

if ... then if ... then … else if ... then … else …

Page 56: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 56 Universidad Galileo

Otro Ejemplo

<stmt> if <expr> then <stmt> else <stmt><stmt> if <expr> then <stmt> <stmt> other

if ... then if ... then … else if ... then … else …

Page 57: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 57 Universidad Galileo

Otro Ejemplo

<stmt> if <expr> then <stmt> else <stmt><stmt> if <expr> then <stmt> <stmt> other

if ... then if ... then … else if ... then … else …

Page 58: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 58 Universidad Galileo

Otro Ejemplo

<stmt> if <expr> then <stmt> else <stmt><stmt> if <expr> then <stmt> <stmt> other

if ... then if ... then … else if ... then … else …

Page 59: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 59 Universidad Galileo

Otro Ejemplo

<stmt> if <expr> then <stmt> else <stmt><stmt> if <expr> then <stmt> <stmt> other

if ... then if ... then … else if ... then … else …

Asociatividad izquierda, ¡esto es lo que queremos!

Page 60: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 60 Universidad Galileo

Otro Ejemplo

<stmt> if <expr> then <stmt> else <stmt><stmt> if <expr> then <stmt> <stmt> other

<S> <E> $<E> i <E> o <E> <E> i <E><E> <A>

Page 61: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 61 Universidad Galileo

<S> <E> $<E> i <E> o <E> | i <E> | <A>

<S> • <E><E> • i <E> o <E><E> • <I> <E><E> • <A>

s0

<E> i • <E> o <E><E> i • <E><E> • i <E> o <E><E> • i <E><E> • <A>

s1

<S> <E> •

s2

<S> <A> •

s3

<E> i <E> • o <E><E> i <E> •

s4 <E> i <E> o • <E><E> • i <E> o <E><E> • i <E><E> • <A>

s5

<E> i <E> o <E> •

s6

E

A

i i

A

i

A

E

o

E

Page 62: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 62 Universidad Galileo

<S> <E> $<E> i <E> o <E> | i <E> | <A>

<S> • <E><E> • i <E> o <E><E> • <I> <E><E> • <A>

s0

<E> i • <E> o <E><E> i • <E><E> • i <E> o <E><E> • i <E><E> • <A>

s1

<S> <E> •

s2

<S> <A> •

s3

<E> i <E> • o <E><E> i <E> •

s4 <E> i <E> o • <E><E> • i <E> o <E><E> • i <E><E> • <A>

s5

<E> i <E> o <E> •

s6

E

A

i i

A

i

A

E

o

E

Page 63: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 63 Universidad Galileo

<S> <E> $<E> i <E> o <E> | i <E> | <A>

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s3s6 reduce reduce reduce

Page 64: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 64 Universidad Galileo

<S> <E> $<E> i <E> o <E> | i <E> | <A>

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Follow(<E>) = { i, o, $ }

Page 65: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 65 Universidad Galileo

s0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 66: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 66 Universidad Galileo

s1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 67: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 67 Universidad Galileo

s1 is1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 68: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 68 Universidad Galileo

s3 As1 is1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 69: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 69 Universidad Galileo

Es1 is1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 70: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 70 Universidad Galileo

s4 Es1 is1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 71: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 71 Universidad Galileo

s4 Es1 is1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 72: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 72 Universidad Galileo

s4 Es1 is1 is0 $

oi i a a

Como asocia por la izquierda, hacemos el shift

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 73: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 73 Universidad Galileo

s5 os4 Es1 is1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 74: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 74 Universidad Galileo

s3 As5 os4 Es1 is1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 75: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 75 Universidad Galileo

Es5 os4 Es1 is1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 76: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 76 Universidad Galileo

s6 Es5 os4 Es1 is1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 77: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 77 Universidad Galileo

Es1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 78: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 78 Universidad Galileo

s4 Es1 is0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 79: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 79 Universidad Galileo

Es0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 80: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 80 Universidad Galileo

s3 Es0 $

oi i a a

ACTION GotoState i o $ E As0 shift to s1 error error goto s2 goto s3s1 shift to s2 error error goto s4 goto s3s2 error error accept s3 reduce reduce reduce s4 reduce shift to s5/reducereduce s5 error shift to s6 error goto s6 goto s3s6 reduce reduce reduce

Page 81: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 81 Universidad Galileo

Resumen

• Repaso de parseo LR y algunas clarificaciones

• Clasificación de gramáticas

• Lenguajes LR

• Eliminando Ambiguedad

• Manejo de errores y recuperación de errores

Page 82: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 82 Universidad Galileo

Manejo de Errores

• ¡¡Los programas no siempre son correctos!!

• El compilador tiene que:– Reportar clara y exactamente la presencia de errores– Recuperarse de cada error lo suficientemete rápido

para poder detectar errores subsiguientes– Tratar de evitar mensajes falsos de error

Page 83: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 83 Universidad Galileo

Tipos de Errores

• Léxicos

• Sintácticos

• Semánticos

• Lógicos

Page 84: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 84 Universidad Galileo

Errores Léxicos

• Un error que produce un token erroneo

• Errores léxicos posibles– Un identificador, palabra reservada u operador mal

escrito (typo)

Page 85: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 85 Universidad Galileo

Errores Sintácticos

• Un programa que no satisface la CFG del lenguaje

• Ejemplos– Expresión aritmética con paréntesis no balanceados– Un punto y coma faltante

Page 86: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 86 Universidad Galileo

Errores Semánticos

• Un error que necesita información sensitiva al contexto para ser identificado

• Ejemplos– Un operador aplicado a un tipo incompatible de

operando– Accesar una variable no declarada

Page 87: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 87 Universidad Galileo

Errores Lógicos

• Errores en el modelo de ejecución

• Ejemplos– Recursión infinita– Accesar un arreglo fuera de los límites– Dereferenciar un null pointer

Page 88: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 88 Universidad Galileo

Tipos de recuperación de errores de sintáxis

• Panic mode recovery

• Parse level recovery

• Producciones de error

• Corrección global

Page 89: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 89 Universidad Galileo

Panic mode recovery

• Al descubrir un error – pop cero o más estados/símbolos del stack– descartar cero o más símbolos de entrada– hasta que lleguemos a un punto donde podemos

continuar parseando

• Usamos no-terminales definidos para el panic– Ejemplo: cerrar llave, punto y coma

Page 90: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 90 Universidad Galileo

Panic mode recovery

• En error – pop del stack hasta que lleguemos a un estado X de

donde se pueda hacer un goto para alguno de los no-terminales de pánico

• Se termina el parseo si no se encuentra ninguno

– Descartamos tokens del buffer de entrada hasta que encontremos un token sincronizador

• Un token que pertenece a follow(A) del no-terminal de pánico A que encontramos en el paso anterior

– Push de A y del estado goto(S,A) en los stacks y seguimos parseando

Page 91: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 91 Universidad Galileo

s0 $

Ejemplo de panic mode error recoveryGramática:

<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 92: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 92 Universidad Galileo

s0 $

idid id ; =

Ejemplo de panic mode error recovery

idid ; id

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 93: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 93 Universidad Galileo

s3 ids0 $

id id

Ejemplo de panic mode error recovery

id ; id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 94: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 94 Universidad Galileo

s6 <X>s0 $

id id

Ejemplo de panic mode error recovery

id ; id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 95: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 95 Universidad Galileo

s6 <X>s4 ;

s0 $

id id

Ejemplo de panic mode error recovery

id ; id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 96: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 96 Universidad Galileo

s2 <Y>s0 $

id id

Ejemplo de panic mode error recovery

id ; id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 97: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 97 Universidad Galileo

s3 ids2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ; id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 98: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 98 Universidad Galileo

s6 <X>s2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ; id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 99: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 99 Universidad Galileo

s3 ids6 <X>s2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ; id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 100: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 100 Universidad Galileo

s6 <X>s6 <X>s2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ; id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 101: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 101 Universidad Galileo

s6 <X>s6 <X>s2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ;

PANIC

id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 102: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 102 Universidad Galileo

s6 <X>s6 <X>s2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ;

PANICno-terminales de pánico = { <E> ... }follow(<E>) = { ; }

id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 103: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 103 Universidad Galileo

s2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ;

PANIC

id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

s6 <X>s6 <X>

no-terminales de pánico = { <E> ... }follow(<E>) = { ; }

Page 104: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 104 Universidad Galileo

s2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ;

PANIC

id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

no-terminales de pánico = { <E> ... }follow(<E>) = { ; }

Page 105: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 105 Universidad Galileo

s2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ;

PANIC

id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

no-terminales de pánico = { <E> ... }follow(<E>) = { ; }

Page 106: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 106 Universidad Galileo

s2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ;

PANIC

id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

no-terminales de pánico = { <E> ... }follow(<E>) = { ; }

Page 107: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 107 Universidad Galileo

s2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ; id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 108: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 108 Universidad Galileo

s3 ids2 <E>s0 $

id id

Ejemplo de panic mode error recovery

id ; id; = idid

Gramática :<S> <E> $<E> <X> ; <E> | <X> <X> id | <X> = <X>

Page 109: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 109 Universidad Galileo

Parse Level Error Recovery

• En error – invocamos una rutina especial para cambiar el

prefijo de los tokens de entrada que quedan– y continuamos el parseo

• Ejemplo– Reemplazar una coma por un punto y coma

Page 110: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 110 Universidad Galileo

Ejemplo de parser level error recovery

• Action Table

s0 $

(( ( )

ACTION GotoState ( ) $ Xs0 shift to s2 error error goto s1s1 error error accept s2 shift to s2 shift to s5 error goto s3s3 error shift to s4 error s4 reduce (2) reduce (2) reduce (2) s5 reduce (3) reduce (3) reduce (3)

$

Page 111: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 111 Universidad Galileo

s3 Xs2 (

Ejemplo de parser level error recovery

• Action Table

s0 $

(( ( )

ACTION GotoState ( ) $ Xs0 shift to s2 error error goto s1s1 error error accept s2 shift to s2 shift to s5 error goto s3s3 error shift to s4 error s4 reduce (2) reduce (2) reduce (2) s5 reduce (3) reduce (3) reduce (3)

$

Page 112: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 112 Universidad Galileo

s3 Xs2 (

Ejemplo de parser level error recovery

• Action Table

s0 $

(( ( )

ACTION GotoState ( ) $ Xs0 shift to s2 error error goto s1s1 error error accept s2 shift to s2 shift to s5 error goto s3s3 error shift to s4 error s4 reduce (2) reduce (2) reduce (2) s5 reduce (3) reduce (3) reduce (3)

$

Page 113: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 113 Universidad Galileo

s3 Xs2 (

Ejemplo de parser level error recovery

• Action Table

s0 $

(( ( )

ACTION GotoState ( ) $ Xs0 shift to s2 error error goto s1s1 error error accept s2 shift to s2 shift to s5 error goto s3s3 error shift to s4 error s4 reduce (2) reduce (2) reduce (2) s5 reduce (3) reduce (3) reduce (3)

$

Invocamos rutina de recuperación de error

Page 114: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 114 Universidad Galileo

s3 Xs2 (

Ejemplo de parser level error recovery

• Action Table

s0 $

)( ( )

ACTION GotoState ( ) $ Xs0 shift to s2 error error goto s1s1 error error accept s2 shift to s2 shift to s5 error goto s3s3 error shift to s4 error s4 reduce (2) reduce (2) reduce (2) s5 reduce (3) reduce (3) reduce (3)

$

Invocamos rutina de recuperación de error

Page 115: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 115 Universidad Galileo

s3 Xs2 (

Ejemplo de parser level error recovery

• Action Table

s0 $

)( ( )

ACTION GotoState ( ) $ Xs0 shift to s2 error error goto s1s1 error error accept s2 shift to s2 shift to s5 error goto s3s3 error shift to s4 error s4 reduce (2) reduce (2) reduce (2) s5 reduce (3) reduce (3) reduce (3)

$

Page 116: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 116 Universidad Galileo

s4 )s3 Xs2 (

Ejemplo de parser level error recovery

• Action Table

s0 $

)( ( )

ACTION GotoState ( ) $ Xs0 shift to s2 error error goto s1s1 error error accept s2 shift to s2 shift to s5 error goto s3s3 error shift to s4 error s4 reduce (2) reduce (2) reduce (2) s5 reduce (3) reduce (3) reduce (3)

$

Page 117: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 117 Universidad Galileo

Producciones de Error

• Agregamos producciones especiales de la forma A error para manejar errores.– error se trata como un símbolo terminal especial

• En error – Insertamos el terminal error como el primer token de

entrada– Pop del stack hasta que lleguemos a un estado E en el que se

pueda hacer un goto para el terminal error– El parser hace shift del terminal error, el estado actual es es

F = goto(E, error)– Descartamos los tokens del buffer de entrada hasta que

encontremos un token para el que se pueda ejecutar una acción de parseo legal a partir del estado F

Page 118: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 118 Universidad Galileo

Ejemplo de Producciones de Error

• Gramática<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X>

Page 119: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 119 Universidad Galileo

Ejemplo de Producciones de Error

• Gramática<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

Page 120: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 120 Universidad Galileo

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

s0 $

Page 121: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 121 Universidad Galileo

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

s0 $

idid id ; = idid ; id

Page 122: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 122 Universidad Galileo

s0 $

idid id ; = idid ; id

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

Page 123: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 123 Universidad Galileo

s3 ids0 $

id idid ; id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

Page 124: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 124 Universidad Galileo

s6 <X>s0 $

id idid ; id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

Page 125: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 125 Universidad Galileo

s6 <X>s4 ;

s0 $

id idid ; id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

Page 126: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 126 Universidad Galileo

s2 <Y>s0 $

id idid ; id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

Page 127: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 127 Universidad Galileo

s3 ids2 <E>s0 $

id idid ; id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

Page 128: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 128 Universidad Galileo

s6 <X>s2 <E>s0 $

id idid ; id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

Page 129: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 129 Universidad Galileo

s6 <X>s6 <X>s2 <E>s0 $

id idid ; id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

Page 130: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 130 Universidad Galileo

s6 <X>s6 <X>s2 <E>s0 $

id idid ;

Error

id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

Page 131: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 131 Universidad Galileo

s6 <X>s6 <X>s2 <E>s0 $

id idid ;

Error

id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

error

Page 132: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 132 Universidad Galileo

s2 <E>s0 $

id idid ;

Error

id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

error

s6 <X>s6 <X>

Page 133: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 133 Universidad Galileo

s2 <E>s0 $

id idid ;

Error

id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

error

Page 134: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 134 Universidad Galileo

s5 errors2 <E>s0 $

id idid ;

Error

id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

error

Page 135: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 135 Universidad Galileo

s5 errors2 <E>s0 $

id idid ;

Error

id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

error

Page 136: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 136 Universidad Galileo

s5 errors2 <E>s0 $

id idid ;

Error

id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

error

Page 137: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 137 Universidad Galileo

s5 errors2 <E>s0 $

id idid ; id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

error

Page 138: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 138 Universidad Galileo

s2 <E>s0 $

id idid ; id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

error

Page 139: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 139 Universidad Galileo

s3 ids2 <E>s0 $

id idid ; id; = idid

Ejemplo de Producciones de Error• Gramática

<S> <E> $

<E> <X> ; <E> | <X>

<X> id | <X> = <X> | error

error

Page 140: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 140 Universidad Galileo

Corrección Global

• Tratamos de anticipar las acciones del programador

• Hacemos el programa legal elijiendo la mínima cantidad de cambios

• Muchos problemas– Costoso– Los cambios pueden crear un programa

semánticamente correcto, ¡¡¡pero no el que el programador quería escribir!!!

Page 141: 10_Clasificacion_de_Gramaticas

Oscar Bonilla 141 Universidad Galileo

Lecturas

• El Tigre– Chapter 5

• La Ballena– 3.1, 3.2, 3.3, 3.4

• El Dragón– Chapter 6