Clasificaci n de gram ticas y manejo de errores l.jpg
This presentation is the property of its rightful owner.
Sponsored Links
1 / 141

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


  • 173 Views
  • Uploaded on
  • Presentation posted in: General

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?.

Download Presentation

Clasificación de Gramáticas y Manejo de Errores

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


Clasificaci n de gram ticas y manejo de errores l.jpg

Clasificación de Gramáticas y Manejo de Errores


Resumen l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

LR(0)

SL (1)

Oscar Bonilla5Universidad Galileo


Algunas definiciones l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

Clasificación de Gramáticas

Context free

Oscar Bonilla11Universidad Galileo


Clasificaci n de gram ticas12 l.jpg

Clasificación de Gramáticas

Context free

G0

regular

Oscar Bonilla12Universidad Galileo


Gram ticas regulares l.jpg

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 l.jpg

Clasificación de Gramáticas

Context free

LR(0)

G0

G1

regular

Oscar Bonilla14Universidad Galileo


Gram ticas lr 0 l.jpg

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 l.jpg

Clasificación de Gramáticas

Context free

SLR(1)

LR(0)

G0

G1

G2

regular

Oscar Bonilla16Universidad Galileo


Gram ticas slr 1 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

Pregunta

  • ¿Qué hay acerca del lenguaje?

  • G8 = { (i)j(k | i = j = k }

Oscar Bonilla31Universidad Galileo


Resumen32 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

(

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 l.jpg

(

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 l.jpg

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 l.jpg

(

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 l.jpg

(

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

Ejemplo

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

Oscar Bonilla45Universidad Galileo


Ejemplo46 l.jpg

Ejemplo

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

  • Escribiendo una gramática no ambigua

Oscar Bonilla46Universidad Galileo


Ejemplo47 l.jpg

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 l.jpg

<S>  <E> $

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

Oscar Bonilla48Universidad Galileo


Slide49 l.jpg

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 l.jpg

s0

$

id

+

id

*

id

Oscar Bonilla50Universidad Galileo


Slide51 l.jpg

s7

<E>

s4

+

s1

<E>

s0

$

id

+

id

*

id

Oscar Bonilla51Universidad Galileo


Slide52 l.jpg

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 l.jpg

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 l.jpg

Otro Ejemplo

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

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

<stmt>  other

Oscar Bonilla54Universidad Galileo


Otro ejemplo55 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

<S>  <E> $

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

Oscar Bonilla63Universidad Galileo


Slide64 l.jpg

<S>  <E> $

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

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

Oscar Bonilla64Universidad Galileo


Slide65 l.jpg

s0

$

i

i

a

o

a

Oscar Bonilla65Universidad Galileo


Slide66 l.jpg

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla66Universidad Galileo


Slide67 l.jpg

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla67Universidad Galileo


Slide68 l.jpg

s3

A

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla68Universidad Galileo


Slide69 l.jpg

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla69Universidad Galileo


Slide70 l.jpg

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla70Universidad Galileo


Slide71 l.jpg

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla71Universidad Galileo


Slide72 l.jpg

Como asocia por la izquierda,

hacemos el shift

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla72Universidad Galileo


Slide73 l.jpg

s5

o

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla73Universidad Galileo


Slide74 l.jpg

s3

A

s5

o

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla74Universidad Galileo


Slide75 l.jpg

E

s5

o

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla75Universidad Galileo


Slide76 l.jpg

s6

E

s5

o

s4

E

s1

i

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla76Universidad Galileo


Slide77 l.jpg

E

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla77Universidad Galileo


Slide78 l.jpg

s4

E

s1

i

s0

$

i

i

a

o

a

Oscar Bonilla78Universidad Galileo


Slide79 l.jpg

E

s0

$

i

i

a

o

a

Oscar Bonilla79Universidad Galileo


Slide80 l.jpg

s3

E

s0

$

i

i

a

o

a

Oscar Bonilla80Universidad Galileo


Resumen81 l.jpg

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 l.jpg

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 l.jpg

Tipos de Errores

  • Léxicos

  • Sintácticos

  • Semánticos

  • Lógicos

Oscar Bonilla83Universidad Galileo


Errores l xicos l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

Ejemplo de parser level error recovery

  • Action Table

s0

$

(

(

)

(

$

Oscar Bonilla110Universidad Galileo


Ejemplo de parser level error recovery111 l.jpg

Ejemplo de parser level error recovery

  • Action Table

s3

X

s2

(

s0

$

(

(

)

(

$

Oscar Bonilla111Universidad Galileo


Ejemplo de parser level error recovery112 l.jpg

Ejemplo de parser level error recovery

  • Action Table

s3

X

s2

(

s0

$

(

(

)

(

$

Oscar Bonilla112Universidad Galileo


Ejemplo de parser level error recovery113 l.jpg

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 l.jpg

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 l.jpg

Ejemplo de parser level error recovery

  • Action Table

s3

X

s2

(

s0

$

(

(

)

)

$

Oscar Bonilla115Universidad Galileo


Ejemplo de parser level error recovery116 l.jpg

Ejemplo de parser level error recovery

  • Action Table

s4

)

s3

X

s2

(

s0

$

(

(

)

)

$

Oscar Bonilla116Universidad Galileo


Producciones de error l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

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 l.jpg

Lecturas

  • El Tigre

    • Chapter 5

  • La Ballena

    • 3.1, 3.2, 3.3, 3.4

  • El Dragón

    • Chapter 6

Oscar Bonilla141Universidad Galileo


  • Login