Académique Documents
Professionnel Documents
Culture Documents
Clasificacin de Gramticas y
Manejo de Errores
Resumen
Repaso de parseo LR y algunas clarificaciones
Clasificacin de gramticas
Lenguajes LR
Eliminando Ambiguedad
Manejo de errores y recuperacin de errores
Oscar Bonilla
Universidad Galileo
LR(0) y LR(1),
donde est el look ahead?
Tanto LR(0) como LR(1) tienen el mismo
engine de ejecucin, la diferencia est en la
construccin de la tabla de parseo
Entonces, dnde est el look ahead?
LR(0) y LR(1),
donde est el look ahead?
Shift sn
ve el smbolo de entrada,
ya sea lo consume o termina de parsear (accept o error)
no es un look ahead
Goto sn
slo ve el stack
Reduce n
LR(0) misma reduccin para todos los inputs no look ahead
LR(1) necesitamos el smbolo de entrada un look ahead
SL (1)
LR(0)
State
s0
s1
s2
s3
s4
s5
State
s0
s1
s2
s3
s4
s5
s6
Oscar Bonilla
(
shift to s2
error
shift to s2
error
reduce (2)
reduce (3)
(
shift to s1
shift to s2
shift to s2
error
error
error
error
ACTION
)
error
error
shift to s5
shift to s4
reduce (2)
reduce (3)
ACTION
)
reduce (5)
reduce (5)
reduce (5)
shift to s4
reduce (4)
error
error
Goto
$
error
accept
error
error
reduce (2)
reduce (3)
X
goto s1
goto s3
Goto
$
reduce (5)
reduce (5)
reduce (5)
error
reduce (4)
accept
reduce (2)
5
X
goto s5
Y
goto s6
goto s3
goto s3
Universidad Galileo
Algunas Definiciones
Qu es una gramtica XY(k)?
(X, Y {L, R})
Una gramtica G es una gramtica XY(k) si y
slo si podemos crear una tabla de parseo
XY(k) sin ningn conflicto shift/reduce o
reduce/reduce
LR(0)
Parser
Engine
SLR
Parser
Engine
LR(1)
Parser
Engine
Resumen
Repaso de parseo LR y algunas clarificaciones
Clasificacin de gramticas
Lenguajes LR
Eliminando Ambiguedad
Manejo de errores y recuperacin de errores
Oscar Bonilla
10
Universidad Galileo
Clasificacin de Gramticas
Context free
Clasificacin de Gramticas
Context free
regular
G0
Gramticas Regulares
Una gramtica que puede ser expresada usando
una expresin regular es una gramtica regular
Lenguaje Ejemplo:
Cero o ms parntesis abiertos seguidos de cero o
ms parntesis cerrados
G0 = { (a )b | a, b >= 0 }
Gramtica
S XY$
X (X |
Y )Y |
Clasificacin de Gramticas
Context free
LR(0)
regular
G0
G1
Gramticas LR(0)
Una gramtica que puede crear una tabla de parseo
LR(0) sin ningn conflicto shift/reduce o
reduce/reduce
Lenguaje Ejemplo:
Uno o ms parntesis abiertos seguidos de un nmero
igual de parntesis cerrados
G1 = { (n )n | n > 0 }
La gramtica
<S> <X> $
<X> ( <X> ) | ( )
Clasificacin de Gramticas
Context free
SLR(1)
LR(0)
regular
G0
G1 G2
Gramticas SLR(1)
Una gramtica que puede crear una tabla de parseo
SLR(1) sin ningn conflicto shift/reduce o
reduce/reduce
Lenguaje Ejemplo:
Cero o ms parntesis abiertos seguidos de un nmero
igual de parntesis cerrados
G2 = { (n )n | n >= 0 }
La gramtica
<S> <X> $
<X> ( <X> ) |
Clasificacin de Gramticas
Context free
LALR(1)
SLR(1)
LR(0)
regular
G0
G1 G2 G3
Gramticas LALR(1)
Una gramtica que puede crear una tabla de parseo
LALR(1) sin ningn conflicto shift/reduce o
reduce/reduce
Lenguaje Ejemplo:
???
G3 = { ??? }
La gramtica
Clasificacin de Gramticas
Context free
LR(1)
LALR(1)
SLR(1)
LR(0)
regular
G0
G1 G2 G3 G4
Gramticas LR(1)
Una gramtica que puede crear una tabla de parseo LR(1)
sin ningn conflicto shift/reduce o reduce/reduce
Lenguaje Ejemplo:
Cero o ms parntesis abiertos seguidos de un nmero igual de
parntesis cerrados o un solo parntesis abierto
G4 = { (n )n | n >= 0 } { ( }
La gramtica
<S> <X> $
<X> ( | <Y>
<Y> ( <Y> )
Clasificacin de Gramticas
Context free
LR(k)
LR(1)
LALR(1)
SLR(1)
LR(0)
regular
G0
G1 G2 G3 G4 G5
Gramticas LR(k)
Una gramtica que puede crear una tabla de parseo LR(k)
sin ningn conflicto shift/reduce o reduce/reduce
Lenguaje Ejemplo:
Cero o ms parntesis abiertos seguidos de un nmero igual de
parntesis cerrados o un nmero igual de corchetes cerrados
G5 = { (n )n | n >= 0 } { (n ]n | n >= 0 }
La gramtica
<S>
<X>
<Y>
<Z>
<X> $
<Y> | <Z>
( <Y> )
|
( <Z> ]
|
Clasificacin de Gramticas
Context free
unambiguous
LR(k)
LR(1)
LALR(1)
SLR(1)
LR(0)
regular
G0
G1 G2 G3 G4 G5 G6
Gramticas no Ambiguas
Una gramtica es no ambigua s y slo s tiene una
secuencia de derivacin derecha (rightmost) nica
(parse tree)
Ejemplo:
G6 = { [(n )n | n >= 0 } { ](n )2n | n >= 0 }
La gramtica
<S>
<X>
<Y>
<Z>
<X> $
[ <Y> | ] <Z>
( <Y> ) |
( <Z> )) |
Clasificacin de Gramticas
Context free
unambiguous
LR(k)
LR(1)
LALR(1)
SLR(1)
LR(0)
regular
G0
G1 G2 G3 G4 G5 G6 G7
Gramticas Ambiguas
Una gramtica es ambigua s y slo s tiene ms de
una secuencia de derivacin por la derecha
Ejemplo:
G7 = { (i )j (k | i = j or j = k }
La gramtica
<S> <X> $
<X> <P> <Q> | <R> <S>
<P> ( <P> ) |
<Q> ( <Q> |
<R> ( <R> |
<S> ) <S> ( |
Clasificacin de Gramticas
Context free
unambiguous
LR(k)
LR(1)
LALR(1)
SLR(1)
LR(0)
regular
G0
G1 G2 G3 G4 G5 G6 G7
Clasificacin de Gramticas
Context free
unambiguous
LR(k)
LR(1)
LALR(1)
SLR(1)
LR(0)
regular
G0
LL(0)
G1 G2 G3 G4 G5 G6 G7
Clasificacin de Gramticas
Context free
unambiguous
LR(k)
LR(1)
LALR(1)
SLR(1)
LR(0)
regular
G0
LL(0)
LL(1)
G1 G2 G3 G4 G5 G6 G7
Pregunta
Qu hay acerca del lenguaje?
G8 = { (i )j (k | i = j = k }
Oscar Bonilla
31
Universidad Galileo
Resumen
Repaso de parseo LR y algunas clarificaciones
Clasificacin de gramticas
Lenguajes LR
Eliminando Ambiguedad
Manejo de errores y recuperacin de errores
Oscar Bonilla
32
Universidad Galileo
Lenguajes LR
Un lenguaje libre de contexto es un lenguaje
LR s y slo s puede ser generado por una
gramtica LR(k) para algn k
Lenguajes LR
El conjunto de lenguajes LR es independiente
de la distancia de lookahead k
Dada cualquier gramtica LR(k) Gk, existe una
gramtica LR(0) G0 tal que L(Gk) = L(G0)
Para todos los lenguajes que vimos con
gramticas SLR(1), LALR(1) y LR(1),
podramos haber encontrado una gramtica
LR(0)!!!
Ejemplo
Lenguaje
Cero o ms parntesis abiertos seguidos de un nmero igual de
parntesis cerrados
o un solo parntesis abierto
Gramtica LR(1)
<S>
<X>
<X>
<Y>
<Y>
<X> $
<Y>
(
( <Y> )
Oscar Bonilla
35
Universidad Galileo
26
<X> $
<Y>
(
( <Y> )
<X> $
Y
(
( <Y> )
s5
<S> <X> $
Oscar Bonilla
(
Y
s1
<X>
<Y>
<Y>
<Y>
(
( <Y> )
( <Y> )
s2
<Y> ( <Y> )
<Y> ( <Y> )
<Y>
Y
s3
<Y> ( <Y> )
s6
<X> <Y>
36
s4
<Y> ( <Y> )
Universidad Galileo
26
<X> $
<Y>
(
( <Y> )
<X> $
Y
(
( <Y> )
s5
<S> <X> $
Oscar Bonilla
(
Y
s1
<X>
<Y>
<Y>
<Y>
(
( <Y> )
( <Y> )
s2
<Y> ( <Y> )
<Y> ( <Y> )
<Y>
Y
s3
<Y> ( <Y> )
s6
<X> <Y>
37
s4
<Y> ( <Y> )
Universidad Galileo
Ejemplo
Lenguaje
Cero o ms parntesis abiertos seguidos de un nmero igual de
parntesis cerrados
o un solo parntesis abierto
Gramtica LR(1)
<S>
<X>
<X>
<Y>
<Y>
Oscar Bonilla
Gramtica LR(0)
<X> $
<Y>
(
( <Y> )
<S>
<X>
<X>
<X>
<Y>
<Y>
<Z>
38
<X> $
<Y>
( <Z>
<Z>
( <Y> )
<Z>
Universidad Galileo
<X> $
<Y>
( <Z>
<Z>
( <Y> )
<Z>
s7
s0
<S>
<X>
<X>
<X>
<Y>
<Y>
<Z>
s5
<S> <X> $
Oscar Bonilla
<X> $
<Y>
( <Z>
<Z>
( <Y> )
<Z>
s1
(
Y
<Y>
<X>
<Y>
<Y>
( <Y> )
( <Z>
( <Y> )
<Z>
s2
<Y> ( <Y> )
<Y> ( <Y> )
<Y> <Z>
(
Y
s3
<Y> ( <Y> )
s6
<X> <Y>
39
s4
<Y> ( <Y> )
Universidad Galileo
<X> $
<Y>
( <Z>
<Z>
( <Y> )
<Z>
s7
s0
<S>
<X>
<X>
<X>
<Y>
<Y>
<Z>
s5
<S> <X> $
Oscar Bonilla
<X> $
<Y>
( <Z>
<Z>
( <Y> )
<Z>
s1
(
Y
<Y>
<X>
<Y>
<Y>
( <Y> )
( <Z>
( <Y> )
<Z>
s2
<Y> ( <Y> )
<Y> ( <Y> )
<Y> <Z>
(
Y
s3
<Y> ( <Y> )
s6
<X> <Y>
40
s4
<Y> ( <Y> )
Universidad Galileo
Lenguajes LR
El conjunto de lenguajes LR es independiente de la
distancia de lookahead k
Dada cualquier gramtica LR(k) Gk, existe una
gramtica LR(0) G0 tal que L(Gk) = L(G0)
Para todos los lenguajes que vimos con gramticas
SLR(1), LALR(1) y LR(1), podramos haber
encontrado una gramtica LR(0)!!!
Pero esto puede ser muy difcil!!!
Resumen
Repaso de parseo LR y algunas clarificaciones
Clasificacin de gramticas
Lenguajes LR
Eliminando Ambiguedad
Manejo de errores y recuperacin de errores
Oscar Bonilla
42
Universidad Galileo
Lenguajes Ambiguos
Un lenguaje libre de contexto es
inherentemente ambiguo si toda gramtica que
genera el lenguaje es ambigua
Sin embargo, la mayora de gramticas
ambiguas encontradas en la prctica son para
lenguajes no ambiguos
Queremos hacerlas no ambiguas
Gramticas Ambiguas
Si tenemos una gramtica ambigua para un
lenguaje no ambiguo, podemos:
Escribir una gramtica no ambigua
Usar precedencia y asociatividad para resolver los
conflictos en las acciones del parser
Ejemplo
<E> <E> + <E> | <E> * <E> | ( <E> ) | id
Oscar Bonilla
45
Universidad Galileo
Ejemplo
<E> <E> + <E> | <E> * <E> | ( <E> ) | id
Oscar Bonilla
46
Universidad Galileo
Ejemplo
<E> <E> + <E> | <E> * <E> | ( <E> ) | id
Oscar Bonilla
47
Universidad Galileo
<S> <E> $
<E> <E> + <E> | <E> * <E> | ( <E> ) | id
Oscar Bonilla
48
Universidad Galileo
<S> <E> $
<E> <E> + <E> | <E> * <E> | ( <E> ) | id
s2
s0
<S>
<E>
<E>
<E>
<E>
<E>
<E> + <E>
<E> * <E>
( <E> )
id
s1
<S> <E>
<E> <E> + <E>
<E> <E> * <E>
<S>
<E>
<E>
<E>
<E>
s6
( <E> )
<E> + <E>
<E> * <E>
( <E> )
id
s3
s7
<E> id
s8
s5
s4
<S>
<E>
<E>
<E>
<E>
<E> + <E>
<E> + <E>
<E> * <E>
( <E> )
id
Oscar Bonilla
<S>
<E>
<E>
<E>
<E>
<E> * <E>
<E> + <E>
<E> * <E>
( <E> )
id
49
s9
<E> ( <E> )
Universidad Galileo
s0
id
Oscar Bonilla
id
50
id
Universidad Galileo
s7
s4
s1
s0
<E>
+
<E>
$
id
Oscar Bonilla
id
51
id
Universidad Galileo
s7
<E> <E> + <E>
<E> <E> + <E>
<E> <E> * <E>
Shift or reduce
s7
s4
s1
s0
<E>
+
<E>
$
id
Oscar Bonilla
id
52
id
Universidad Galileo
Otro Ejemplo
<stmt> if <expr> then <stmt> else <stmt>
<stmt> if <expr> then <stmt>
<stmt> other
Oscar Bonilla
54
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
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
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
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
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
Oscar Bonilla
59
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>
Oscar Bonilla
60
Universidad Galileo
<S> <E> $
<E> i <E> o <E> | i <E> | <A>
s0
<S>
<E>
<E>
<E>
s1
<E>
<E>
<E>
<E>
<E>
<E>
i <E> o <E>
<I> <E>
<A>
Oscar Bonilla
s3
<S> <A>
s6
A
i
<S> <E>
i <E> o <E>
i <E>
i <E> o <E>
i <E>
<A>
s4
s2
s5
<E>
<E>
<E>
<E>
61
i <E> o <E>
i <E> o <E>
i <E>
<A>
Universidad Galileo
<S> <E> $
<E> i <E> o <E> | i <E> | <A>
s0
<S>
<E>
<E>
<E>
s1
<E>
<E>
<E>
<E>
<E>
<E>
i <E> o <E>
<I> <E>
<A>
Oscar Bonilla
s3
<S> <A>
s6
A
i
<S> <E>
i <E> o <E>
i <E>
i <E> o <E>
i <E>
<A>
s4
s2
s5
<E>
<E>
<E>
<E>
62
i <E> o <E>
i <E> o <E>
i <E>
<A>
Universidad Galileo
<S> <E> $
<E> i <E> o <E> | i <E> | <A>
State
s0
s1
s2
s3
s4
s5
s6
Oscar Bonilla
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
ACTION
o
error
error
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
63
E
goto s2
goto s4
A
goto s3
goto s3
goto s3
Universidad Galileo
<S> <E> $
<E> i <E> o <E> | i <E> | <A>
State
s0
s1
s2
s3
s4
s5
s6
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
ACTION
o
error
error
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
Follow(<E>) = { i, o, $ }
Oscar Bonilla
64
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
65
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
66
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s1
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
i
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
67
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s3
s1
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
A
i
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
68
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s1
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
E
i
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
69
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s4
s1
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
E
i
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
70
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s4
s1
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
E
i
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
71
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s4
s1
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
E
i
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
72
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s5
s4
s1
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
o
E
i
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
73
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s3
s5
s4
s1
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
A
o
E
i
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
74
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s5
s4
s1
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
E
o
E
i
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
75
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s6
s5
s4
s1
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
E
o
E
i
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
76
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
E
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
77
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s4
s1
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
E
i
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
78
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
E
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
79
a
Universidad Galileo
State
s0
s1
s2
s3
s4
s5
s6
s3
s0
i
shift to s1
shift to s2
error
reduce
reduce
error
reduce
Goto
$
error
error
accept
reduce
shift to s5/reducereduce
shift to s6
error
reduce
reduce
E
goto s2
goto s4
A
goto s3
goto s3
goto s6
goto s3
E
$
i
Oscar Bonilla
ACTION
o
error
error
error
reduce
a
80
a
Universidad Galileo
Resumen
Repaso de parseo LR y algunas clarificaciones
Clasificacin de gramticas
Lenguajes LR
Eliminando Ambiguedad
Manejo de errores y recuperacin de errores
Oscar Bonilla
81
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 rpido
para poder detectar errores subsiguientes
Tratar de evitar mensajes falsos de error
Tipos de Errores
Lxicos
Sintcticos
Semnticos
Lgicos
Errores Lxicos
Un error que produce un token erroneo
Errores lxicos posibles
Un identificador, palabra reservada u operador mal
escrito (typo)
Errores Sintcticos
Un programa que no satisface la CFG del
lenguaje
Ejemplos
Expresin aritmtica con parntesis no balanceados
Un punto y coma faltante
Errores Semnticos
Un error que necesita informacin sensitiva al
contexto para ser identificado
Ejemplos
Un operador aplicado a un tipo incompatible de
operando
Accesar una variable no declarada
Errores Lgicos
Errores en el modelo de ejecucin
Ejemplos
Recursin infinita
Accesar un arreglo fuera de los lmites
Dereferenciar un null pointer
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s0
Oscar Bonilla
91
Universidad Galileo
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s0
id
Oscar Bonilla
id
92
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s3
s0
id
$
id
Oscar Bonilla
id
93
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s6
s0
<X>
$
id
Oscar Bonilla
id
94
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s4
s6
s0
;
<X>
$
id
Oscar Bonilla
id
95
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s2
s0
<Y>
$
id
Oscar Bonilla
id
96
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s3
s2
s0
id
<E>
$
id
Oscar Bonilla
id
97
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s6
s2
s0
<X>
<E>
$
id
Oscar Bonilla
id
98
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s3
s6
s2
s0
id
<X>
<E>
$
id
Oscar Bonilla
id
99
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s6
s6
s2
s0
<X>
<X>
<E>
$
id
Oscar Bonilla
id
100
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s6
s6
s2
s0
PANIC
<X>
<X>
<E>
$
id
Oscar Bonilla
id
101
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s6
s6
s2
s0
PANIC
<X>
<X>
<E>
$
id
Oscar Bonilla
id
102
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s6
s6
s2
s0
<X>
<X>
PANIC
<E>
$
id
Oscar Bonilla
id
103
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
PANIC
s2
s0
<E>
$
id
Oscar Bonilla
id
104
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
PANIC
s2
s0
<E>
$
id
Oscar Bonilla
id
105
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
PANIC
s2
s0
<E>
$
id
Oscar Bonilla
id
106
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s2
s0
<E>
$
id
Oscar Bonilla
id
107
id
id
id
Universidad Galileo
id
<S> <E> $
<E> <X> ; <E> | <X>
<X> id | <X> = <X>
s3
s2
s0
id
<E>
$
id
Oscar Bonilla
id
108
id
id
id
Universidad Galileo
id
Ejemplo
Reemplazar una coma por un punto y coma
s0
(
shift to s2
error
shift to s2
error
reduce (2)
reduce (3)
Goto
$
error
accept
error
error
reduce (2)
reduce (3)
X
goto s1
goto s3
(
Oscar Bonilla
ACTION
)
error
error
shift to s5
shift to s4
reduce (2)
reduce (3)
)
110
$
Universidad Galileo
s3
s2
s0
(
shift to s2
error
shift to s2
error
reduce (2)
reduce (3)
Goto
$
error
accept
error
error
reduce (2)
reduce (3)
X
goto s1
goto s3
X
(
$
(
Oscar Bonilla
ACTION
)
error
error
shift to s5
shift to s4
reduce (2)
reduce (3)
)
111
$
Universidad Galileo
s3
s2
s0
(
shift to s2
error
shift to s2
error
reduce (2)
reduce (3)
Goto
$
error
accept
error
error
reduce (2)
reduce (3)
X
goto s1
goto s3
X
(
$
(
Oscar Bonilla
ACTION
)
error
error
shift to s5
shift to s4
reduce (2)
reduce (3)
)
112
$
Universidad Galileo
s3
s2
s0
X
(
$
(
shift to s2
error
shift to s2
error
reduce (2)
reduce (3)
Goto
$
error
accept
error
error
reduce (2)
reduce (3)
X
goto s1
goto s3
(
Oscar Bonilla
ACTION
)
error
error
shift to s5
shift to s4
reduce (2)
reduce (3)
)
113
$
Universidad Galileo
s3
s2
s0
X
(
$
(
shift to s2
error
shift to s2
error
reduce (2)
reduce (3)
Goto
$
error
accept
error
error
reduce (2)
reduce (3)
X
goto s1
goto s3
(
Oscar Bonilla
ACTION
)
error
error
shift to s5
shift to s4
reduce (2)
reduce (3)
)
114
$
Universidad Galileo
s3
s2
s0
(
shift to s2
error
shift to s2
error
reduce (2)
reduce (3)
Goto
$
error
accept
error
error
reduce (2)
reduce (3)
X
goto s1
goto s3
X
(
$
(
Oscar Bonilla
ACTION
)
error
error
shift to s5
shift to s4
reduce (2)
reduce (3)
)
115
$
Universidad Galileo
s4
s3
s2
s0
(
shift to s2
error
shift to s2
error
reduce (2)
reduce (3)
Goto
$
error
accept
error
error
reduce (2)
reduce (3)
X
goto s1
goto s3
)
X
(
$
(
Oscar Bonilla
ACTION
)
error
error
shift to s5
shift to s4
reduce (2)
reduce (3)
)
116
$
Universidad Galileo
Producciones de Error
Agregamos producciones especiales de la forma A
error para manejar errores.
error se trata como un smbolo 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
accin de parseo legal a partir del estado F
Oscar Bonilla
118
Universidad Galileo
Oscar Bonilla
119
Universidad Galileo
s0
Oscar Bonilla
120
Universidad Galileo
s0
id
Oscar Bonilla
id
121
id
id
id
Universidad Galileo
id
s0
id
Oscar Bonilla
id
122
id
id
id
Universidad Galileo
id
s3
s0
id
$
id
Oscar Bonilla
id
123
id
id
id
Universidad Galileo
id
s6
s0
<X>
$
id
Oscar Bonilla
id
124
id
id
id
Universidad Galileo
id
s4
s6
s0
;
<X>
$
id
Oscar Bonilla
id
125
id
id
id
Universidad Galileo
id
s2
s0
<Y>
$
id
Oscar Bonilla
id
126
id
id
id
Universidad Galileo
id
s3
s2
s0
id
<E>
$
id
Oscar Bonilla
id
127
id
id
id
Universidad Galileo
id
s6
s2
s0
<X>
<E>
$
id
Oscar Bonilla
id
128
id
id
id
Universidad Galileo
id
s6
s6
s2
s0
<X>
<X>
<E>
$
id
Oscar Bonilla
id
129
id
id
id
Universidad Galileo
id
s6
s6
s2
s0
Error
<X>
<X>
<E>
$
id
Oscar Bonilla
id
130
id
id
id
Universidad Galileo
id
s6
s6
s2
s0
Error
<X>
<X>
<E>
$
id
Oscar Bonilla
id
id
131
error
id
id
Universidad Galileo
id
s6
s6
s2
s0
Error
<X>
<X>
<E>
$
id
Oscar Bonilla
id
id
132
error
id
id
Universidad Galileo
id
Error
s2
s0
<E>
$
id
Oscar Bonilla
id
id
133
error
id
id
Universidad Galileo
id
Error
s5
s2
s0
error
<E>
$
id
Oscar Bonilla
id
id
134
error
id
id
Universidad Galileo
id
Error
s5
s2
s0
error
<E>
$
id
Oscar Bonilla
id
id
135
error
id
id
Universidad Galileo
id
Error
s5
s2
s0
error
<E>
$
id
Oscar Bonilla
id
id
136
error
id
id
Universidad Galileo
id
s5
s2
s0
error
<E>
$
id
Oscar Bonilla
id
id
137
error
id
id
Universidad Galileo
id
s2
s0
<E>
$
id
Oscar Bonilla
id
id
138
error
id
id
Universidad Galileo
id
s3
s2
s0
id
<E>
$
id
Oscar Bonilla
id
id
139
error
id
id
Universidad Galileo
id
Correccin Global
Tratamos de anticipar las acciones del
programador
Hacemos el programa legal elijiendo la mnima
cantidad de cambios
Muchos problemas
Costoso
Los cambios pueden crear un programa
semnticamente correcto, pero no el que el
programador quera escribir!!!
Lecturas
El Tigre
Chapter 5
La Ballena
3.1, 3.2, 3.3, 3.4
El Dragn
Chapter 6
Oscar Bonilla
141
Universidad Galileo