clasificaci n de gram ticas y manejo de errores l.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Clasificación de Gramáticas y Manejo de Errores PowerPoint Presentation
Download Presentation
Clasificación de Gramáticas y Manejo de Errores

Loading in 2 Seconds...

play fullscreen
1 / 141

Clasificación de Gramáticas y Manejo de Errores - PowerPoint PPT Presentation


  • 233 Views
  • Uploaded on

Clasificación de Gramáticas y Manejo de Errores. 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. LR(0) y LR(1), ¿donde está el look ahead?.

loader
I am the owner, or an agent authorized to act on behalf of the owner, of the copyrighted work described.
capcha
Download Presentation

PowerPoint Slideshow about 'Clasificación de Gramáticas y Manejo de Errores' - Leo


An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -
Presentation Transcript
resumen
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

Oscar Bonilla2Universidad Galileo

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

Oscar Bonilla3Universidad Galileo

lr 0 y lr 1 donde est el look ahead4
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

Oscar Bonilla4Universidad Galileo

slide5

LR(0)

SL (1)

Oscar Bonilla5Universidad Galileo

algunas definiciones
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

Oscar Bonilla6Universidad Galileo

construcci n de un parse engine lr 0
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)

Parser

Engine

Oscar Bonilla7Universidad Galileo

construcci n de un parse engine slr 1
Construcción de un parse engine SLR(1)
  • Agregamos la producción especial S’  S $
  • Calcular el conjunto followpara 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

SLR

Parser

Engine

Oscar Bonilla8Universidad Galileo

construcci n de un parse engine lr 1
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 funcionesclosureygoto
  • Construimos la tabla de parseo

LR(1)

Parser

Engine

Oscar Bonilla9Universidad Galileo

resumen10
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

Oscar Bonilla10Universidad Galileo

clasificaci n de gram ticas
Clasificación de Gramáticas

Context free

Oscar Bonilla11Universidad Galileo

clasificaci n de gram ticas12
Clasificación de Gramáticas

Context free

G0

regular

Oscar Bonilla12Universidad Galileo

gram ticas regulares
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 | 

Oscar Bonilla13Universidad Galileo

clasificaci n de gram ticas14
Clasificación de Gramáticas

Context free

LR(0)

G0

G1

regular

Oscar Bonilla14Universidad Galileo

gram ticas lr 0
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> ) | ( )

Oscar Bonilla15Universidad Galileo

clasificaci n de gram ticas16
Clasificación de Gramáticas

Context free

SLR(1)

LR(0)

G0

G1

G2

regular

Oscar Bonilla16Universidad Galileo

gram ticas slr 1
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> ) | 

Oscar Bonilla17Universidad Galileo

clasificaci n de gram ticas18
Clasificación de Gramáticas

Context free

LALR(1)

SLR(1)

LR(0)

G0

G1

G2

G3

regular

Oscar Bonilla18Universidad Galileo

gram ticas lalr 1
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

Oscar Bonilla19Universidad Galileo

clasificaci n de gram ticas20
Clasificación de Gramáticas

Context free

LR(1)

LALR(1)

SLR(1)

LR(0)

G0

G1

G2

G3

G4

regular

Oscar Bonilla20Universidad Galileo

gram ticas lr 1
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> ) | 

Oscar Bonilla21Universidad Galileo

clasificaci n de gram ticas22
Clasificación de Gramáticas

Context free

LR(k)

LR(1)

LALR(1)

SLR(1)

LR(0)

G0

G1

G2

G3

G4

G5

regular

Oscar Bonilla22Universidad Galileo

gram ticas lr k
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> ] | 

Oscar Bonilla23Universidad Galileo

clasificaci n de gram ticas24
Clasificación de Gramáticas

Context free

unambiguous

LR(k)

LR(1)

LALR(1)

SLR(1)

LR(0)

G0

G1

G2

G3

G4

G5

G6

regular

Oscar Bonilla24Universidad Galileo

gram ticas no ambiguas
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> )) | 

Oscar Bonilla25Universidad Galileo

clasificaci n de gram ticas26
Clasificación de Gramáticas

Context free

unambiguous

LR(k)

LR(1)

LALR(1)

SLR(1)

LR(0)

G0

G1

G2

G3

G4

G5

G6

G7

regular

Oscar Bonilla26Universidad Galileo

gram ticas ambiguas
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> ( | 

Oscar Bonilla27Universidad Galileo

clasificaci n de gram ticas28
Clasificación de Gramáticas

Context free

unambiguous

LR(k)

LR(1)

LALR(1)

SLR(1)

LR(0)

G0

G1

G2

G3

G4

G5

G6

G7

regular

Oscar Bonilla28Universidad Galileo

clasificaci n de gram ticas29
Clasificación de Gramáticas

Context free

unambiguous

LR(k)

LR(1)

LALR(1)

SLR(1)

LR(0)

G0

G1

G2

G3

G4

G5

G6

G7

regular

LL(0)

Oscar Bonilla29Universidad Galileo

clasificaci n de gram ticas30
Clasificación de Gramáticas

Context free

unambiguous

LR(k)

LR(1)

LALR(1)

SLR(1)

LR(0)

G0

G1

G2

G3

G4

G5

G6

G7

regular

LL(0)

LL(1)

Oscar Bonilla30Universidad Galileo

pregunta
Pregunta
  • ¿Qué hay acerca del lenguaje?
  • G8 = { (i)j(k | i = j = k }

Oscar Bonilla31Universidad Galileo

resumen32
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

Oscar Bonilla32Universidad Galileo

lenguajes l r
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

Oscar Bonilla33Universidad Galileo

lenguajes lr
Lenguajes LR
  • El conjunto de lenguajes LR es independiente de la distancia de lookahead k
  • Dada cualquier gramática LR(k) Gk, existe unagramática LR(0) G0tal 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)!!!

Oscar Bonilla34Universidad Galileo

ejemplo
Ejemplo
  • Lenguaje
    • Cero o más paréntesis abiertos seguidos de un número igual de paréntesis cerrados
    • o 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?

Oscar Bonilla35Universidad Galileo

ejemplo expandido dfa

(

s0

s1

s2

<S>  • <X> $

<X>  • Y

<X>  • (

<Y>  • ( <Y> )

<Y>  •

<X>  ( •

<Y>  ( • <Y> )

<Y>  • ( <Y> )

<Y>  •

<Y>  ( • <Y> )

<Y>  • ( <Y> )

<Y>  •

s3

s4

s6

s5

<Y>  ( <Y> • )

<Y>  ( <Y> ) •

<S>  <X> • $

<X>  <Y> •

26

Ejemplo Expandido DFA

<S>  <X> $

<X>  <Y>

<X>  (

<Y>  ( <Y> )

<Y>  

(

(

Y

Y

Y

X

)

Oscar Bonilla36Universidad Galileo

ejemplo expandido dfa37

(

s0

s1

s2

<S>  • <X> $

<X>  • Y

<X>  • (

<Y>  • ( <Y> )

<Y>  •

<X>  ( •

<Y>  ( • <Y> )

<Y>  • ( <Y> )

<Y>  •

<Y>  ( • <Y> )

<Y>  • ( <Y> )

<Y>  •

s3

s4

s6

s5

<Y>  ( <Y> • )

<Y>  ( <Y> ) •

<S>  <X> • $

<X>  <Y> •

26

Ejemplo Expandido DFA

<S>  <X> $

<X>  <Y>

<X>  (

<Y>  ( <Y> )

<Y>  

(

(

Y

Y

Y

X

)

Oscar Bonilla37Universidad Galileo

ejemplo38
Ejemplo
  • Lenguaje
    • Cero o más paréntesis abiertos seguidos de un número igual de paréntesis cerrados
    • o un solo paréntesis abierto
  • Gramática LR(1)
    • <S>  <X> $
    • <X>  <Y>
    • <X>  (
    • <Y>  ( <Y> )
    • <Y>  
  • Gramática LR(0)
    • <S>  <X> $
    • <X>  <Y>
    • <X>  ( <Z>
    • <X>  <Z>
    • <Y>  ( <Y> )
    • <Y>  <Z>
    • <Z>  

Oscar Bonilla38Universidad Galileo

dfa del ejemplo

(

s0

s1

s2

<S>  • <X> $

<X>  • <Y>

<X>  • ( <Z>

<X>  •<Z>

<Y>  • ( <Y> )

<Y>  • <Z>

<Y>  ( • <Y> )

<X>  ( • <Z>

<Y>  • ( <Y> )

<Y>  • <Z>

<Y>  ( • <Y> )

<Y>  • ( <Y> )

<Y>  • <Z>

s3

s4

s6

s7

s5

<Y>  ( <Y> • )

<Y>  ( <Y> ) •

<S>  <X> • $

<Z>  •

<X>  <Y> •

DFA del Ejemplo

<S>  <X> $

<X>  <Y>

<X>  ( <Z>

<X>  <Z>

<Y>  ( <Y> )

<Y>  <Z>

<Z>  

Z

(

Z

Z

(

Y

Y

Y

X

)

Oscar Bonilla39Universidad Galileo

dfa del ejemplo40

(

s0

s1

s2

<S>  • <X> $

<X>  • <Y>

<X>  • ( <Z>

<X>  •<Z>

<Y>  • ( <Y> )

<Y>  • <Z>

<Y>  ( • <Y> )

<X>  ( • <Z>

<Y>  • ( <Y> )

<Y>  • <Z>

<Y>  ( • <Y> )

<Y>  • ( <Y> )

<Y>  • <Z>

s3

s4

s6

s7

s5

<Y>  ( <Y> • )

<Y>  ( <Y> ) •

<S>  <X> • $

<Z>  •

<X>  <Y> •

DFA del Ejemplo

<S>  <X> $

<X>  <Y>

<X>  ( <Z>

<X>  <Z>

<Y>  ( <Y> )

<Y>  <Z>

<Z>  

Z

(

Z

Z

(

Y

Y

Y

X

)

Oscar Bonilla40Universidad Galileo

lenguajes lr41
Lenguajes LR
  • El conjunto de lenguajes LR es independiente de la distancia de lookahead k
  • Dada cualquier gramática LR(k) Gk, existe unagramática LR(0) G0tal 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!!!

Oscar Bonilla41Universidad Galileo

resumen42
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

Oscar Bonilla42Universidad Galileo

lenguajes ambiguos
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

Oscar Bonilla43Universidad Galileo

gram ticas ambiguas44
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

Oscar Bonilla44Universidad Galileo

ejemplo45
Ejemplo

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

Oscar Bonilla45Universidad Galileo

ejemplo46
Ejemplo

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

  • Escribiendo una gramática no ambigua

Oscar Bonilla46Universidad Galileo

ejemplo47
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

Oscar Bonilla47Universidad Galileo

slide48
<S>  <E> $

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

Oscar Bonilla48Universidad Galileo

slide49

s2

s0

s6

<S>  ( • <E> )

<E>  • <E> + <E>

<E>  • <E> * <E>

<E>  • ( <E> )

<E>  • id

<S>  • <E>

<E>  • <E> + <E>

<E>  • <E> * <E>

<E>  • ( <E> )

<E>  • id

<E>  <E> • + <E>

<E>  <E> • * <E>

<E>  ( <E> •)

s9

s3

s7

s1

<E>  ( <E> ) •

<E>  id •

<E>  <E> + <E> •

<E>  <E> • + <E>

<E>  <E> • * <E>

<S>  <E> •

<E>  <E> • + <E>

<E>  <E> • * <E>

s5

s8

s4

<S>  <E> * • <E>

<E>  • <E> + <E>

<E>  • <E> * <E>

<E>  • ( <E> )

<E>  • id

<S>  <E> * <E>•

<E>  <E> • + <E>

<E>  <E> • * <E>

<S>  <E> + • <E>

<E>  • <E> + <E>

<E>  • <E> * <E>

<E>  • ( <E> )

<E>  • id

<S>  <E> $

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

Oscar Bonilla49Universidad Galileo

slide50

s0

$

id

+

id

*

id

Oscar Bonilla50Universidad Galileo

slide51

s7

<E>

s4

+

s1

<E>

s0

$

id

+

id

*

id

Oscar Bonilla51Universidad Galileo

slide52

s7

<E>  <E> + <E> •

<E>  <E> • + <E>

<E>  <E> • * <E>

Shift or reduce

s7

<E>

s4

+

s1

<E>

s0

$

id

+

id

*

id

Oscar Bonilla52Universidad Galileo

usando precedencia y asociatividad
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

Oscar Bonilla53Universidad Galileo

otro ejemplo
Otro Ejemplo

<stmt>  if <expr> then <stmt> else <stmt>

<stmt>  if <expr> then <stmt>

<stmt>  other

Oscar Bonilla54Universidad Galileo

otro ejemplo55
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 Bonilla55Universidad Galileo

otro ejemplo56
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 Bonilla56Universidad Galileo

otro ejemplo57
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 Bonilla57Universidad Galileo

otro ejemplo58
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 Bonilla58Universidad Galileo

otro ejemplo59
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!

Oscar Bonilla59Universidad Galileo

otro ejemplo60
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 Bonilla60Universidad Galileo

slide61

s2

s0

s6

<S>  <E> •

<S>  • <E>

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

<E>  • <I> <E>

<E>  •<A>

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

s3

s1

<S>  <A> •

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

<E>  i • <E>

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

<E>  • i <E>

<E>  •<A>

s5

s4

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

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

<E>  • i <E>

<E>  •<A>

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

<E>  i <E> •

E

<S>  <E> $

<E>  i <E> o <E> | i <E> | <A>

A

i

i

A

A

E

i

E

o

Oscar Bonilla61Universidad Galileo

slide62

s2

s0

s6

<S>  <E> •

<S>  • <E>

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

<E>  • <I> <E>

<E>  •<A>

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

s3

s1

<S>  <A> •

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

<E>  i • <E>

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

<E>  • i <E>

<E>  •<A>

s5

s4

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

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

<E>  • i <E>

<E>  •<A>

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

<E>  i <E> •

E

<S>  <E> $

<E>  i <E> o <E> | i <E> | <A>

A

i

i

A

A

E

i

E

o

Oscar Bonilla62Universidad Galileo

slide63
<S>  <E> $

<E>  i <E> o <E> | i <E> | <A>

Oscar Bonilla63Universidad Galileo

slide64
<S>  <E> $

<E>  i <E> o <E> | i <E> | <A>

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

Oscar Bonilla64Universidad Galileo

slide65

s0

$

i

i

a

o

a

Oscar Bonilla65Universidad Galileo

slide66

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla66Universidad Galileo

slide67

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla67Universidad Galileo

slide68

s3

A

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla68Universidad Galileo

slide69

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla69Universidad Galileo

slide70

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla70Universidad Galileo

slide71

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla71Universidad Galileo

slide72

Como asocia por la izquierda,

hacemos el shift

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla72Universidad Galileo

slide73

s5

o

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla73Universidad Galileo

slide74

s3

A

s5

o

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla74Universidad Galileo

slide75

E

s5

o

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla75Universidad Galileo

slide76

s6

E

s5

o

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla76Universidad Galileo

slide77

E

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla77Universidad Galileo

slide78

s4

E

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla78Universidad Galileo

slide79

E

s0

$

i

i

a

o

a

Oscar Bonilla79Universidad Galileo

slide80

s3

E

s0

$

i

i

a

o

a

Oscar Bonilla80Universidad Galileo

resumen81
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

Oscar Bonilla81Universidad Galileo

manejo de errores
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

Oscar Bonilla82Universidad Galileo

tipos de errores
Tipos de Errores
  • Léxicos
  • Sintácticos
  • Semánticos
  • Lógicos

Oscar Bonilla83Universidad Galileo

errores l xicos
Errores Léxicos
  • Un error que produce un token erroneo
  • Errores léxicos posibles
    • Un identificador, palabra reservada u operador mal escrito (typo)

Oscar Bonilla84Universidad Galileo

errores sint cticos
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

Oscar Bonilla85Universidad Galileo

errores sem nticos
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

Oscar Bonilla86Universidad Galileo

errores l gicos
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

Oscar Bonilla87Universidad Galileo

tipos de recuperaci n de errores de sint xis
Tipos de recuperación de errores de sintáxis
  • Panic mode recovery
  • Parse level recovery
  • Producciones de error
  • Corrección global

Oscar Bonilla88Universidad Galileo

panic mode recovery
Panic mode recovery
  • Al descubrir un error
    • pop ceroomásestados/símbolosdel stack
    • descartarcero o mássí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

Oscar Bonilla89Universidad Galileo

panic mode recovery90
Panic mode recovery
  • En error
    • pop del stack hasta que lleguemos a un estado X de donde se pueda hacer ungotopara 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 estadogoto(S,A)en los stacksy seguimos parseando

Oscar Bonilla90Universidad Galileo

ejemplo de panic mode error recovery
Ejemplo de panic mode error recovery

Gramática:

<S>  <E> $

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

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

s0

$

Oscar Bonilla91Universidad Galileo

ejemplo de panic mode error recovery92
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla92Universidad Galileo

ejemplo de panic mode error recovery93
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s3

id

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla93Universidad Galileo

ejemplo de panic mode error recovery94
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s6

<X>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla94Universidad Galileo

ejemplo de panic mode error recovery95
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s4

;

s6

<X>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla95Universidad Galileo

ejemplo de panic mode error recovery96
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s2

<Y>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla96Universidad Galileo

ejemplo de panic mode error recovery97
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s3

id

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla97Universidad Galileo

ejemplo de panic mode error recovery98
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s6

<X>

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla98Universidad Galileo

ejemplo de panic mode error recovery99
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s3

id

s6

<X>

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla99Universidad Galileo

ejemplo de panic mode error recovery100
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s6

<X>

s6

<X>

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla100Universidad Galileo

ejemplo de panic mode error recovery101
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

PANIC

s6

<X>

s6

<X>

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla101Universidad Galileo

ejemplo de panic mode error recovery102
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

no-terminales de pánico = { <E> ... }

follow(<E>) = { ; }

PANIC

s6

<X>

s6

<X>

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla102Universidad Galileo

ejemplo de panic mode error recovery103
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

no-terminales de pánico = { <E> ... }

follow(<E>) = { ; }

PANIC

s6

<X>

s6

<X>

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla103Universidad Galileo

ejemplo de panic mode error recovery104
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

no-terminales de pánico = { <E> ... }

follow(<E>) = { ; }

PANIC

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla104Universidad Galileo

ejemplo de panic mode error recovery105
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

no-terminales de pánico = { <E> ... }

follow(<E>) = { ; }

PANIC

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla105Universidad Galileo

ejemplo de panic mode error recovery106
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

no-terminales de pánico = { <E> ... }

follow(<E>) = { ; }

PANIC

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla106Universidad Galileo

ejemplo de panic mode error recovery107
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla107Universidad Galileo

ejemplo de panic mode error recovery108
Ejemplo de panic mode error recovery

Gramática :

<S>  <E> $

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

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

s3

id

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla108Universidad Galileo

parse level error recovery
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

Oscar Bonilla109Universidad Galileo

ejemplo de parser level error recovery
Ejemplo de parser level error recovery
  • Action Table

s0

$

(

(

)

(

$

Oscar Bonilla110Universidad Galileo

ejemplo de parser level error recovery111
Ejemplo de parser level error recovery
  • Action Table

s3

X

s2

(

s0

$

(

(

)

(

$

Oscar Bonilla111Universidad Galileo

ejemplo de parser level error recovery112
Ejemplo de parser level error recovery
  • Action Table

s3

X

s2

(

s0

$

(

(

)

(

$

Oscar Bonilla112Universidad Galileo

ejemplo de parser level error recovery113
Ejemplo de parser level error recovery
  • Action Table

s3

X

Invocamos rutina de recuperación de error

s2

(

s0

$

(

(

)

(

$

Oscar Bonilla113Universidad Galileo

ejemplo de parser level error recovery114
Ejemplo de parser level error recovery
  • Action Table

s3

X

Invocamos rutina de recuperación de error

s2

(

s0

$

(

(

)

)

$

Oscar Bonilla114Universidad Galileo

ejemplo de parser level error recovery115
Ejemplo de parser level error recovery
  • Action Table

s3

X

s2

(

s0

$

(

(

)

)

$

Oscar Bonilla115Universidad Galileo

ejemplo de parser level error recovery116
Ejemplo de parser level error recovery
  • Action Table

s4

)

s3

X

s2

(

s0

$

(

(

)

)

$

Oscar Bonilla116Universidad Galileo

producciones de error
Producciones de Error
  • Agregamos producciones especiales de la forma A   error para manejar errores.
    • errorse 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

Oscar Bonilla117Universidad Galileo

ejemplo de producciones de error
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

Oscar Bonilla118Universidad Galileo

ejemplo de producciones de error119
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

Oscar Bonilla119Universidad Galileo

ejemplo de producciones de error120
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s0

$

Oscar Bonilla120Universidad Galileo

ejemplo de producciones de error121
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla121Universidad Galileo

ejemplo de producciones de error122
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla122Universidad Galileo

ejemplo de producciones de error123
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s3

id

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla123Universidad Galileo

ejemplo de producciones de error124
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s6

<X>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla124Universidad Galileo

ejemplo de producciones de error125
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s4

;

s6

<X>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla125Universidad Galileo

ejemplo de producciones de error126
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s2

<Y>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla126Universidad Galileo

ejemplo de producciones de error127
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s3

id

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla127Universidad Galileo

ejemplo de producciones de error128
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s6

<X>

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla128Universidad Galileo

ejemplo de producciones de error129
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s6

<X>

s6

<X>

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla129Universidad Galileo

ejemplo de producciones de error130
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

Error

s6

<X>

s6

<X>

s2

<E>

s0

$

id

;

id

id

id

;

id

=

id

Oscar Bonilla130Universidad Galileo

ejemplo de producciones de error131
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

Error

s6

<X>

s6

<X>

s2

<E>

s0

$

id

;

id

id

error

id

;

id

=

id

Oscar Bonilla131Universidad Galileo

ejemplo de producciones de error132
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

Error

s6

<X>

s6

<X>

s2

<E>

s0

$

id

;

id

id

error

id

;

id

=

id

Oscar Bonilla132Universidad Galileo

ejemplo de producciones de error133
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

Error

s2

<E>

s0

$

id

;

id

id

error

id

;

id

=

id

Oscar Bonilla133Universidad Galileo

ejemplo de producciones de error134
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

Error

s5

error

s2

<E>

s0

$

id

;

id

id

error

id

;

id

=

id

Oscar Bonilla134Universidad Galileo

ejemplo de producciones de error135
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

Error

s5

error

s2

<E>

s0

$

id

;

id

id

error

id

;

id

=

id

Oscar Bonilla135Universidad Galileo

ejemplo de producciones de error136
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

Error

s5

error

s2

<E>

s0

$

id

;

id

id

error

id

;

id

=

id

Oscar Bonilla136Universidad Galileo

ejemplo de producciones de error137
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s5

error

s2

<E>

s0

$

id

;

id

id

error

id

;

id

=

id

Oscar Bonilla137Universidad Galileo

ejemplo de producciones de error138
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s2

<E>

s0

$

id

;

id

id

error

id

;

id

=

id

Oscar Bonilla138Universidad Galileo

ejemplo de producciones de error139
Ejemplo de Producciones de Error
  • Gramática

<S>  <E> $

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

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

s3

id

s2

<E>

s0

$

id

;

id

id

error

id

;

id

=

id

Oscar Bonilla139Universidad Galileo

correcci n global
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!!!

Oscar Bonilla140Universidad Galileo

lecturas
Lecturas
  • El Tigre
    • Chapter 5
  • La Ballena
    • 3.1, 3.2, 3.3, 3.4
  • El Dragón
    • Chapter 6

Oscar Bonilla141Universidad Galileo