La descarga está en progreso. Por favor, espere

La descarga está en progreso. Por favor, espere

Clasificación de Gramáticas y Manejo de Errores

Presentaciones similares


Presentación del tema: "Clasificación de Gramáticas y Manejo de Errores"— Transcripción de la presentación:

1 Clasificación de Gramáticas y Manejo de Errores

2 Oscar Bonilla 2 Universidad Galileo
Resumen Repaso de parseo LR y algunas clarificaciones Clasificación de gramáticas Lenguajes LR Eliminando Ambiguedad Manejo de errores y recuperación de errores Oscar Bonilla Universidad Galileo

3 LR(0) y LR(1), ¿donde está el look ahead?
Tanto LR(0) como LR(1) tienen el mismo engine de ejecución, la diferencia está en la construcción de la tabla de parseo Entonces, ¿dónde está el look ahead? Oscar Bonilla Universidad Galileo

4 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 Bonilla Universidad Galileo

5 Oscar Bonilla 5 Universidad Galileo
LR(0) SL (1) Oscar Bonilla Universidad Galileo

6 Oscar Bonilla 6 Universidad Galileo
Algunas Definiciones ¿Qué es una gramática XY(k)? (X, Y  {L, R}) Una gramática G es una gramática XY(k) si y sólo si podemos crear una tabla de parseo XY(k) sin ningún conflicto shift/reduce o reduce/reduce Oscar Bonilla Universidad Galileo

7 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 Bonilla Universidad Galileo

8 Construcción de un parse engine SLR(1)
Agregamos la producción especial S’  S $ Calcular el conjunto follow para todos los no-terminales Encontrar los ítems LR(0) de la CFG Crear el DFA Comenzamos con el ítem S’  • S $ Usando las funciones closure y goto Construir la tabla de parseo Usando el DFA y la información del conjunto follow SLR Parser Engine Oscar Bonilla Universidad Galileo

9 Construcción de un parse engine LR(1)
Agregamos la producción especial S’  S $ Encontramos los ítems LR(1) de la CFG Creamos el DFA Comenzamos con el ítem [S’  • S $, ?] Usamos las funciones closure y goto Construimos la tabla de parseo LR(1) Parser Engine Oscar Bonilla Universidad Galileo

10 Oscar Bonilla 10 Universidad Galileo
Resumen Repaso de parseo LR y algunas clarificaciones Clasificación de gramáticas Lenguajes LR Eliminando Ambiguedad Manejo de errores y recuperación de errores Oscar Bonilla Universidad Galileo

11 Clasificación de Gramáticas
Context free Oscar Bonilla Universidad Galileo

12 Clasificación de Gramáticas
Context free G0 regular Oscar Bonilla Universidad Galileo

13 Oscar Bonilla 13 Universidad Galileo
Gramáticas Regulares Una gramática que puede ser expresada usando una expresión regular es una gramática regular Lenguaje Ejemplo: Cero o más paréntesis abiertos seguidos de cero o más paréntesis cerrados G0 = { (a )b | a, b >= 0 } Gramática S  X Y $ X  ( X |  Y  ) Y |  Oscar Bonilla Universidad Galileo

14 Clasificación de Gramáticas
Context free LR(0) G0 G1 regular Oscar Bonilla Universidad Galileo

15 Oscar Bonilla 15 Universidad Galileo
Gramáticas LR(0) Una gramática que puede crear una tabla de parseo LR(0) sin ningún conflicto shift/reduce o reduce/reduce Lenguaje Ejemplo: Uno o más paréntesis abiertos seguidos de un número igual de paréntesis cerrados G1 = { (n )n | n > 0 } La gramática <S>  <X> $ <X>  ( <X> ) | ( ) Oscar Bonilla Universidad Galileo

16 Clasificación de Gramáticas
Context free SLR(1) LR(0) G0 G1 G2 regular Oscar Bonilla Universidad Galileo

17 Oscar Bonilla 17 Universidad Galileo
Gramáticas SLR(1) Una gramática que puede crear una tabla de parseo SLR(1) sin ningún conflicto shift/reduce o reduce/reduce Lenguaje Ejemplo: Cero o más paréntesis abiertos seguidos de un número igual de paréntesis cerrados G2 = { (n )n | n >= 0 } La gramática <S>  <X> $ <X>  ( <X> ) |  Oscar Bonilla Universidad Galileo

18 Clasificación de Gramáticas
Context free LALR(1) SLR(1) LR(0) G0 G1 G2 G3 regular Oscar Bonilla Universidad Galileo

19 Oscar Bonilla 19 Universidad Galileo
Gramáticas LALR(1) Una gramática que puede crear una tabla de parseo LALR(1) sin ningún conflicto shift/reduce o reduce/reduce Lenguaje Ejemplo: ??? G3 = { ??? } La gramática Oscar Bonilla Universidad Galileo

20 Clasificación de Gramáticas
Context free LR(1) LALR(1) SLR(1) LR(0) G0 G1 G2 G3 G4 regular Oscar Bonilla Universidad Galileo

21 Oscar Bonilla 21 Universidad Galileo
Gramáticas LR(1) Una gramática que puede crear una tabla de parseo LR(1) sin ningún conflicto shift/reduce o reduce/reduce Lenguaje Ejemplo: Cero o más paréntesis abiertos seguidos de un número igual de paréntesis cerrados o un solo paréntesis abierto G4 = { (n )n | n >= 0 }  { ( } La gramática <S>  <X> $ <X>  ( | <Y> <Y>  ( <Y> ) |  Oscar Bonilla Universidad Galileo

22 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 Bonilla Universidad Galileo

23 Oscar Bonilla 23 Universidad Galileo
Gramáticas LR(k) Una gramática que puede crear una tabla de parseo LR(k) sin ningún conflicto shift/reduce o reduce/reduce Lenguaje Ejemplo: Cero o más paréntesis abiertos seguidos de un número igual de paréntesis cerrados o un número igual de corchetes cerrados G5 = { (n )n | n >= 0 }  { (n ]n | n >= 0 } La gramática <S>  <X> $ <X>  <Y> | <Z> <Y>  ( <Y> ) |  <Z>  ( <Z> ] |  Oscar Bonilla Universidad Galileo

24 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 Bonilla Universidad Galileo

25 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 Bonilla Universidad Galileo

26 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 Bonilla Universidad Galileo

27 Oscar Bonilla 27 Universidad Galileo
Gramáticas Ambiguas Una gramática es ambigua sí y sólo sí tiene más de una secuencia de derivación por la derecha Ejemplo: G7 = { (i )j (k | i = j or j = k } La gramática <S>  <X> $ <X>  <P> <Q> | <R> <S> <P>  ( <P> ) |  <Q>  ( <Q> |  <R>  ( <R> |  <S>  ) <S> ( |  Oscar Bonilla Universidad Galileo

28 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 Bonilla Universidad Galileo

29 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 Bonilla Universidad Galileo

30 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 Bonilla Universidad Galileo

31 Oscar Bonilla 31 Universidad Galileo
Pregunta ¿Qué hay acerca del lenguaje? G8 = { (i )j (k | i = j = k } Oscar Bonilla Universidad Galileo

32 Oscar Bonilla 32 Universidad Galileo
Resumen Repaso de parseo LR y algunas clarificaciones Clasificación de gramáticas Lenguajes LR Eliminando Ambiguedad Manejo de errores y recuperación de errores Oscar Bonilla Universidad Galileo

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

34 Oscar Bonilla 34 Universidad Galileo
Lenguajes LR El conjunto de lenguajes LR es independiente de la distancia de lookahead k Dada cualquier gramática LR(k) Gk, existe una gramática LR(0) G0 tal que L(Gk) = L(G0) Para todos los lenguajes que vimos con gramáticas SLR(1), LALR(1) y LR(1), ¡¡¡podríamos haber encontrado una gramática LR(0)!!! Oscar Bonilla Universidad Galileo

35 Oscar Bonilla 35 Universidad Galileo
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 Bonilla Universidad Galileo

36 Oscar Bonilla 36 Universidad Galileo
26 Ejemplo Expandido DFA <S>  <X> $ <X>  <Y> <X>  ( <Y>  ( <Y> ) <Y>   ( <Y>  ( • <Y> ) <Y>  • ( <Y> ) <Y>  • s2 <S>  • <X> $ <X>  • Y <X>  • ( <Y>  • ( <Y> ) <Y>  • s0 ( <X>  ( • <Y>  ( • <Y> ) <Y>  • ( <Y> ) <Y>  • s1 ( Y Y <Y>  ( <Y> • ) s3 Y X ) <X>  <Y> • s6 <S>  <X> • $ s5 s4 <Y>  ( <Y> ) • Oscar Bonilla Universidad Galileo

37 Oscar Bonilla 37 Universidad Galileo
26 Ejemplo Expandido DFA <S>  <X> $ <X>  <Y> <X>  ( <Y>  ( <Y> ) <Y>   ( <Y>  ( • <Y> ) <Y>  • ( <Y> ) <Y>  • s2 <S>  • <X> $ <X>  • Y <X>  • ( <Y>  • ( <Y> ) <Y>  • s0 ( <X>  ( • <Y>  ( • <Y> ) <Y>  • ( <Y> ) <Y>  • s1 ( Y Y <Y>  ( <Y> • ) s3 Y X ) <X>  <Y> • s6 <S>  <X> • $ s5 s4 <Y>  ( <Y> ) • Oscar Bonilla Universidad Galileo

38 Oscar Bonilla 38 Universidad Galileo
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 Bonilla Universidad Galileo

39 Oscar Bonilla 39 Universidad Galileo
DFA del Ejemplo <S>  <X> $ <X>  <Y> <X>  ( <Z> <X>  <Z> <Y>  ( <Y> ) <Y>  <Z> <Z>   <Z>  • s7 ( <Y>  ( • <Y> ) <Y>  • ( <Y> ) <Y>  • <Z> s2 Z <S>  • <X> $ <X>  • <Y> <X>  • ( <Z> <X>  • <Z> <Y>  • ( <Y> ) <Y>  • <Z> s0 ( Z Z <Y>  ( • <Y> ) <X>  ( • <Z> <Y>  • ( <Y> ) <Y>  • <Z> s1 ( Y Y <Y>  ( <Y> • ) s3 Y X ) <X>  <Y> • s6 <S>  <X> • $ s5 s4 <Y>  ( <Y> ) • Oscar Bonilla Universidad Galileo

40 Oscar Bonilla 40 Universidad Galileo
DFA del Ejemplo <S>  <X> $ <X>  <Y> <X>  ( <Z> <X>  <Z> <Y>  ( <Y> ) <Y>  <Z> <Z>   <Z>  • s7 ( <Y>  ( • <Y> ) <Y>  • ( <Y> ) <Y>  • <Z> s2 Z <S>  • <X> $ <X>  • <Y> <X>  • ( <Z> <X>  • <Z> <Y>  • ( <Y> ) <Y>  • <Z> s0 ( Z Z <Y>  ( • <Y> ) <X>  ( • <Z> <Y>  • ( <Y> ) <Y>  • <Z> s1 ( Y Y <Y>  ( <Y> • ) s3 Y X ) <X>  <Y> • s6 <S>  <X> • $ s5 s4 <Y>  ( <Y> ) • Oscar Bonilla Universidad Galileo

41 Oscar Bonilla 41 Universidad Galileo
Lenguajes LR El conjunto de lenguajes LR es independiente de la distancia de lookahead k Dada cualquier gramática LR(k) Gk, existe una gramática LR(0) G0 tal que L(Gk) = L(G0) Para todos los lenguajes que vimos con gramáticas SLR(1), LALR(1) y LR(1), ¡¡¡podríamos haber encontrado una gramática LR(0)!!! ¡¡¡Pero esto puede ser muy difícil!!! Oscar Bonilla Universidad Galileo

42 Oscar Bonilla 42 Universidad Galileo
Resumen Repaso de parseo LR y algunas clarificaciones Clasificación de gramáticas Lenguajes LR Eliminando Ambiguedad Manejo de errores y recuperación de errores Oscar Bonilla Universidad Galileo

43 Oscar Bonilla 43 Universidad Galileo
Lenguajes Ambiguos Un lenguaje libre de contexto es inherentemente ambiguo si toda gramática que genera el lenguaje es ambigua Sin embargo, la mayoría de gramáticas ambiguas encontradas en la práctica son para lenguajes no ambiguos Queremos hacerlas no ambiguas Oscar Bonilla Universidad Galileo

44 Oscar Bonilla 44 Universidad Galileo
Gramáticas Ambiguas Si tenemos una gramática ambigua para un lenguaje no ambiguo, podemos: Escribir una gramática no ambigua Usar precedencia y asociatividad para resolver los conflictos en las acciones del parser Oscar Bonilla Universidad Galileo

45 Oscar Bonilla 45 Universidad Galileo
Ejemplo <E>  <E> + <E> | <E> * <E> | ( <E> ) | id Oscar Bonilla Universidad Galileo

46 Oscar Bonilla 46 Universidad Galileo
Ejemplo <E>  <E> + <E> | <E> * <E> | ( <E> ) | id Escribiendo una gramática no ambigua Oscar Bonilla Universidad Galileo

47 Oscar Bonilla 47 Universidad Galileo
Ejemplo <E>  <E> + <E> | <E> * <E> | ( <E> ) | id Escribiendo una gramática no ambigua <E>  <E> + <T> | <T> <T>  <T> * <F> | <F> <F>  ( <E> ) | id Oscar Bonilla Universidad Galileo

48 Oscar Bonilla 48 Universidad Galileo
<S>  <E> $ <E>  <E> + <E> | <E> * <E> | ( <E> ) | id Oscar Bonilla Universidad Galileo

49 Oscar Bonilla 49 Universidad Galileo
<S>  <E> $ <E>  <E> + <E> | <E> * <E> | ( <E> ) | id <S>  ( • <E> ) <E>  • <E> + <E> <E>  • <E> * <E> <E>  • ( <E> ) <E>  • id s2 <S>  • <E> <E>  • <E> + <E> <E>  • <E> * <E> <E>  • ( <E> ) <E>  • id s0 <E>  <E> • + <E> <E>  <E> • * <E> <E>  ( <E> •) s6 <E>  id • s3 <E>  <E> + <E> • <E>  <E> • + <E> <E>  <E> • * <E> s7 <S>  <E> • <E>  <E> • + <E> <E>  <E> • * <E> s1 <S>  <E> * <E> • <E>  <E> • + <E> <E>  <E> • * <E> s8 <S>  <E> * • <E> <E>  • <E> + <E> <E>  • <E> * <E> <E>  • ( <E> ) <E>  • id s5 <S>  <E> + • <E> <E>  • <E> + <E> <E>  • <E> * <E> <E>  • ( <E> ) <E>  • id s4 <E>  ( <E> ) • s9 Oscar Bonilla Universidad Galileo

50 Oscar Bonilla 50 Universidad Galileo
$ id + id * id Oscar Bonilla Universidad Galileo

51 Oscar Bonilla 51 Universidad Galileo
+ s1 <E> s0 $ id + id * id Oscar Bonilla Universidad Galileo

52 Oscar Bonilla 52 Universidad Galileo
<E>  <E> + <E> • <E>  <E> • + <E> <E>  <E> • * <E> s7 Shift or reduce s7 <E> s4 + s1 <E> s0 $ id + id * id Oscar Bonilla Universidad Galileo

53 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 Bonilla Universidad Galileo

54 Oscar Bonilla 54 Universidad Galileo
Otro Ejemplo <stmt>  if <expr> then <stmt> else <stmt> <stmt>  if <expr> then <stmt> <stmt>  other Oscar Bonilla Universidad Galileo

55 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 Universidad Galileo

56 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 Universidad Galileo

57 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 Universidad Galileo

58 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 Universidad Galileo

59 Oscar Bonilla 59 Universidad Galileo
Otro Ejemplo <stmt>  if <expr> then <stmt> else <stmt> <stmt>  if <expr> then <stmt> <stmt>  other if then if then … else if then … else … Asociatividad izquierda, ¡esto es lo que queremos! Oscar Bonilla Universidad Galileo

60 Oscar Bonilla 60 Universidad Galileo
Otro Ejemplo <stmt>  if <expr> then <stmt> else <stmt> <stmt>  if <expr> then <stmt> <stmt>  other <S>  <E> $ <E>  i <E> o <E> <E>  i <E> <E>  <A> Oscar Bonilla Universidad Galileo

61 Oscar Bonilla 61 Universidad Galileo
<S>  <E> $ <E>  i <E> o <E> | i <E> | <A> <S>  <E> • s2 <S>  • <E> <E>  • i <E> o <E> <E>  • <I> <E> <E>  • <A> s0 E A <S>  <A> • s3 i i <E>  i • <E> o <E> <E>  i • <E> <E>  • i <E> o <E> <E>  • i <E> <E>  • <A> s1 <E>  i <E> o <E> • s6 A A E i <E>  i <E> o • <E> <E>  • i <E> o <E> <E>  • i <E> <E>  • <A> s5 E <E>  i <E> • o <E> <E>  i <E> • s4 o Oscar Bonilla Universidad Galileo

62 Oscar Bonilla 62 Universidad Galileo
<S>  <E> $ <E>  i <E> o <E> | i <E> | <A> <S>  <E> • s2 <S>  • <E> <E>  • i <E> o <E> <E>  • <I> <E> <E>  • <A> s0 E A <S>  <A> • s3 i i <E>  i • <E> o <E> <E>  i • <E> <E>  • i <E> o <E> <E>  • i <E> <E>  • <A> s1 <E>  i <E> o <E> • s6 A A E i <E>  i <E> o • <E> <E>  • i <E> o <E> <E>  • i <E> <E>  • <A> s5 E <E>  i <E> • o <E> <E>  i <E> • s4 o Oscar Bonilla Universidad Galileo

63 Oscar Bonilla 63 Universidad Galileo
<S>  <E> $ <E>  i <E> o <E> | i <E> | <A> Oscar Bonilla Universidad Galileo

64 Oscar Bonilla 64 Universidad Galileo
<S>  <E> $ <E>  i <E> o <E> | i <E> | <A> Follow(<E>) = { i, o, $ } Oscar Bonilla Universidad Galileo

65 Oscar Bonilla 65 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

66 Oscar Bonilla 66 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

67 Oscar Bonilla 67 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

68 Oscar Bonilla 68 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

69 Oscar Bonilla 69 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

70 Oscar Bonilla 70 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

71 Oscar Bonilla 71 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

72 Oscar Bonilla 72 Universidad Galileo
Como asocia por la izquierda, hacemos el shift s4 E s1 i s1 i s0 $ i i a o a Oscar Bonilla Universidad Galileo

73 Oscar Bonilla 73 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

74 Oscar Bonilla 74 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

75 Oscar Bonilla 75 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

76 Oscar Bonilla 76 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

77 Oscar Bonilla 77 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

78 Oscar Bonilla 78 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

79 Oscar Bonilla 79 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

80 Oscar Bonilla 80 Universidad Galileo
$ i i a o a Oscar Bonilla Universidad Galileo

81 Oscar Bonilla 81 Universidad Galileo
Resumen Repaso de parseo LR y algunas clarificaciones Clasificación de gramáticas Lenguajes LR Eliminando Ambiguedad Manejo de errores y recuperación de errores Oscar Bonilla Universidad Galileo

82 Oscar Bonilla 82 Universidad Galileo
Manejo de Errores ¡¡Los programas no siempre son correctos!! El compilador tiene que: Reportar clara y exactamente la presencia de errores Recuperarse de cada error lo suficientemete rápido para poder detectar errores subsiguientes Tratar de evitar mensajes falsos de error Oscar Bonilla Universidad Galileo

83 Oscar Bonilla 83 Universidad Galileo
Tipos de Errores Léxicos Sintácticos Semánticos Lógicos Oscar Bonilla Universidad Galileo

84 Oscar Bonilla 84 Universidad Galileo
Errores Léxicos Un error que produce un token erroneo Errores léxicos posibles Un identificador, palabra reservada u operador mal escrito (typo) Oscar Bonilla Universidad Galileo

85 Oscar Bonilla 85 Universidad Galileo
Errores Sintácticos Un programa que no satisface la CFG del lenguaje Ejemplos Expresión aritmética con paréntesis no balanceados Un punto y coma faltante Oscar Bonilla Universidad Galileo

86 Oscar Bonilla 86 Universidad Galileo
Errores Semánticos Un error que necesita información sensitiva al contexto para ser identificado Ejemplos Un operador aplicado a un tipo incompatible de operando Accesar una variable no declarada Oscar Bonilla Universidad Galileo

87 Oscar Bonilla 87 Universidad Galileo
Errores Lógicos Errores en el modelo de ejecución Ejemplos Recursión infinita Accesar un arreglo fuera de los límites Dereferenciar un null pointer Oscar Bonilla Universidad Galileo

88 Tipos de recuperación de errores de sintáxis
Panic mode recovery Parse level recovery Producciones de error Corrección global Oscar Bonilla Universidad Galileo

89 Oscar Bonilla 89 Universidad Galileo
Panic mode recovery Al descubrir un error pop cero o más estados/símbolos del stack descartar cero o más símbolos de entrada hasta que lleguemos a un punto donde podemos continuar parseando Usamos no-terminales definidos para el panic Ejemplo: cerrar llave, punto y coma Oscar Bonilla Universidad Galileo

90 Oscar Bonilla 90 Universidad Galileo
Panic mode recovery En error pop del stack hasta que lleguemos a un estado X de donde se pueda hacer un goto para alguno de los no-terminales de pánico Se termina el parseo si no se encuentra ninguno Descartamos tokens del buffer de entrada hasta que encontremos un token sincronizador Un token que pertenece a follow(A) del no-terminal de pánico A que encontramos en el paso anterior Push de A y del estado goto(S,A) en los stacks y seguimos parseando Oscar Bonilla Universidad Galileo

91 Ejemplo de panic mode error recovery
Gramática: <S>  <E> $ <E>  <X> ; <E> | <X> <X>  id | <X> = <X> s0 $ Oscar Bonilla Universidad Galileo

92 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 Bonilla Universidad Galileo

93 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 Bonilla Universidad Galileo

94 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 Bonilla Universidad Galileo

95 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 Bonilla Universidad Galileo

96 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 Bonilla Universidad Galileo

97 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 Bonilla Universidad Galileo

98 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 Bonilla Universidad Galileo

99 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 Bonilla Universidad Galileo

100 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 Bonilla Universidad Galileo

101 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 Bonilla Universidad Galileo

102 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 Bonilla Universidad Galileo

103 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 Bonilla Universidad Galileo

104 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 Bonilla Universidad Galileo

105 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 Bonilla Universidad Galileo

106 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 Bonilla Universidad Galileo

107 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 Bonilla Universidad Galileo

108 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 Bonilla Universidad Galileo

109 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 Bonilla Universidad Galileo

110 Ejemplo de parser level error recovery
Action Table s0 $ ( ( ) ( $ Oscar Bonilla Universidad Galileo

111 Ejemplo de parser level error recovery
Action Table s3 X s2 ( s0 $ ( ( ) ( $ Oscar Bonilla Universidad Galileo

112 Ejemplo de parser level error recovery
Action Table s3 X s2 ( s0 $ ( ( ) ( $ Oscar Bonilla Universidad Galileo

113 Ejemplo de parser level error recovery
Action Table s3 X Invocamos rutina de recuperación de error s2 ( s0 $ ( ( ) ( $ Oscar Bonilla Universidad Galileo

114 Ejemplo de parser level error recovery
Action Table s3 X Invocamos rutina de recuperación de error s2 ( s0 $ ( ( ) ) $ Oscar Bonilla Universidad Galileo

115 Ejemplo de parser level error recovery
Action Table s3 X s2 ( s0 $ ( ( ) ) $ Oscar Bonilla Universidad Galileo

116 Ejemplo de parser level error recovery
Action Table s4 ) s3 X s2 ( s0 $ ( ( ) ) $ Oscar Bonilla Universidad Galileo

117 Oscar Bonilla 117 Universidad Galileo
Producciones de Error Agregamos producciones especiales de la forma A   error  para manejar errores. error se trata como un símbolo terminal especial En error Insertamos el terminal error como el primer token de entrada Pop del stack hasta que lleguemos a un estado E en el que se pueda hacer un goto para el terminal error El parser hace shift del terminal error, el estado actual es es F = goto(E, error) Descartamos los tokens del buffer de entrada hasta que encontremos un token para el que se pueda ejecutar una acción de parseo legal a partir del estado F Oscar Bonilla Universidad Galileo

118 Ejemplo de Producciones de Error
Gramática <S>  <E> $ <E>  <X> ; <E> | <X> <X>  id | <X> = <X> Oscar Bonilla Universidad Galileo

119 Ejemplo de Producciones de Error
Gramática <S>  <E> $ <E>  <X> ; <E> | <X> <X>  id | <X> = <X> | error Oscar Bonilla Universidad Galileo

120 Ejemplo de Producciones de Error
Gramática <S>  <E> $ <E>  <X> ; <E> | <X> <X>  id | <X> = <X> | error s0 $ Oscar Bonilla Universidad Galileo

121 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 Bonilla Universidad Galileo

122 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 Bonilla Universidad Galileo

123 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 Bonilla Universidad Galileo

124 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 Bonilla Universidad Galileo

125 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 Bonilla Universidad Galileo

126 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 Bonilla Universidad Galileo

127 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 Bonilla Universidad Galileo

128 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 Bonilla Universidad Galileo

129 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 Bonilla Universidad Galileo

130 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 Bonilla Universidad Galileo

131 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 Bonilla Universidad Galileo

132 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 Bonilla Universidad Galileo

133 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 Bonilla Universidad Galileo

134 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 Bonilla Universidad Galileo

135 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 Bonilla Universidad Galileo

136 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 Bonilla Universidad Galileo

137 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 Bonilla Universidad Galileo

138 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 Bonilla Universidad Galileo

139 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 Bonilla Universidad Galileo

140 Oscar Bonilla 140 Universidad Galileo
Corrección Global Tratamos de anticipar las acciones del programador Hacemos el programa legal elijiendo la mínima cantidad de cambios Muchos problemas Costoso Los cambios pueden crear un programa semánticamente correcto, ¡¡¡pero no el que el programador quería escribir!!! Oscar Bonilla Universidad Galileo

141 Oscar Bonilla 141 Universidad Galileo
Lecturas El Tigre Chapter 5 La Ballena 3.1, 3.2, 3.3, 3.4 El Dragón Chapter 6 Oscar Bonilla Universidad Galileo


Descargar ppt "Clasificación de Gramáticas y Manejo de Errores"

Presentaciones similares


Anuncios Google