1 / 141

Clasificación de Gramáticas y Manejo de Errores

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

Leo
Télécharger la présentation

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

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

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

  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 Bonilla4Universidad Galileo

  5. LR(0) SL (1) Oscar Bonilla5Universidad Galileo

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

  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 Bonilla7Universidad Galileo

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

  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 funcionesclosureygoto • Construimos la tabla de parseo LR(1) Parser Engine Oscar Bonilla9Universidad Galileo

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

  11. Clasificación de Gramáticas Context free Oscar Bonilla11Universidad Galileo

  12. Clasificación de Gramáticas Context free G0 regular Oscar Bonilla12Universidad Galileo

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

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

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

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

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

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

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

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

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

  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 Bonilla22Universidad Galileo

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

  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 Bonilla24Universidad 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 Bonilla25Universidad 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 Bonilla26Universidad Galileo

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

  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 Bonilla28Universidad 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 Bonilla29Universidad 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 Bonilla30Universidad Galileo

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

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

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

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

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

  36. ( 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

  37. ( 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

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

  39. ( 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

  40. ( 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

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

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

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

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

  45. Ejemplo <E>  <E> + <E> | <E> * <E> | ( <E> ) | id Oscar Bonilla45Universidad Galileo

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

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

  48. <S>  <E> $ <E>  <E> + <E> | <E> * <E> | ( <E> ) | id Oscar Bonilla48Universidad Galileo

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

  50. s0 $ id + id * id Oscar Bonilla50Universidad Galileo

More Related