1 / 327

Implementando un Parser LR

Implementando un Parser LR. Contrucción de parser engines SLR(1), LR(1) y LALR(1). Resumen. Resumen de la construcción de un parser LR(0) Limitaciones de los lenguajes LR(0) Construcción de un parser engine SLR(1) Limitaciones de los lenguajes SLR(1)

ownah
Download Presentation

Implementando un Parser LR

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. Implementando un Parser LR Contrucción de parser engines SLR(1), LR(1) y LALR(1)

  2. Resumen • Resumende la construcción de un parser LR(0) • Limitaciones de los lenguajes LR(0) • Construcción de un parser engine SLR(1) • Limitaciones de los lenguajes SLR(1) • Construcción de un parser engine LR(1) • Construcción de un parser engine LALR(1) Oscar Bonilla2Universidad Galileo

  3. Items LR(0) • Tenemos que capturar cuánto de una producción hemos escaneado hasta ahora • Representado por 4 ítems • <X>  • ( <X> ) • <X>  ( • <X> ) • <X>  ( <X> • ) • <X>  ( <X> ) • <X>  ( <X> ) Oscar Bonilla3Universidad Galileo

  4. Ejemplo de ítems • La gramática <S>  <X> $ <X>  ( <X> ) <X>  ( ) • Items <S>  • <X> $ <S>  <X> • $ <X>  •( <X> ) <X>  ( • <X> ) <X>  ( <X> • ) <X>  ( <X> ) • <X>  • ( ) <X>  ( • ) <X>  ( ) • Oscar Bonilla4Universidad Galileo

  5. Idea clave de los Items • Si el “estado actual” contiene el ítemA   • c  y el símbolo actual en el buffer de entrada es c • El estado le dice al parser que ejecute un shift • El siguiente estado va a contener A   c •  • Si el “estado” contiene el ítem A   • • El estado le dice al parser que ejecute un reduce • Si el “estado” contiene el ítem S  • $ y el buffer de entrada está vacío • El estado le dice al parser que ejecute un accept Oscar Bonilla5Universidad Galileo

  6. Closure() de un conjunto de ítems • Closure encuentra todos los ítems en el mismo “estado” • Algoritmoparaclosure(I) • Todo ítem en I es también un ítem en closure(I) • Si A  • B  está enclosure(I)yB •  es unítem, entonces agregamosB •  aclosure(I) • Repetir hasta que no se puedan agregar más ítems a closure(I) Oscar Bonilla6Universidad Galileo

  7. Ejemplo de Closure • Encontrarclosure(<X>  ( • <X> ) ) • Items <S>  • <X> $ <S>  <X> • $ <X>  •( <X> ) <X>  ( • <X> ) <X>  ( <X> • ) <X>  ( <X> ) • <X>  • ( ) <X>  ( • ) <X>  ( ) • <X>  ( • <X> ) <X>  •( <X> ) <X>  • ( ) Oscar Bonilla7Universidad Galileo

  8. Goto() de un conjunto deítems • Goto encuentra el nuevo estado después de consumir un símbolo de la gramática mientras estamos en el estado actual • Algoritmo paragoto(I, X)donde I es un conjunto de ítemsy X es un símbolo de la gramática goto(I, X) = closure( {A  X •  |A  • X  en I }) • Goto es el nuevo conjunto obtenido al “mover el punto” sobre X Oscar Bonilla8Universidad Galileo

  9. Ejemplo de Goto • Encontrargoto(<X>  ( • <X> ), <X> ) Items <S>  • <X> $ <S>  <X> • $ <X>  •( <X> ) <X>  ( • <X> ) <X>  ( <X> • ) <X>  ( <X> ) • <X>  • ( ) <X>  ( • ) <X>  ( ) • <X>  ( <X> • ) Oscar Bonilla9Universidad Galileo

  10. Construyendo los estados del DFA • Comenzamos con la producción <S’>  • <S> $ • El primer estado es closure(<S’>  • <S> $) • Elegimos un estadoI • Para cada A  •X  enI • encontrargoto(I, X) • sigoto(I, X)no es ya un estado, creamos uno • Agregamos una arista X del estadoIal estado goto(I, X) • Repetimos hasta que no sea posible agregar nada más Oscar Bonilla10Universidad Galileo

  11. Ejemplo de construcción de los estados del DFA s1 X <S>  <X> • $ s0 s2 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( ) ( <X>  ( • <X> ) <X>  ( • ) <X>  • ( <X> ) <X>  • ( ) ( s3 <X>  ( <X> • ) X ) ) s5 s4 <X>  ( ) • <X>  ( <X> ) • Oscar Bonilla11Universidad Galileo

  12. Creando las tablas de parseo • Para cada estado • Transición a otro estado usando un símbolo terminal es un shift a ese estado (shift to sn) • Transición a otro estado usando un no-terminal es un goto a ese estado (goto sn) • Si hay un ítem A  • en el estado hacemos una reducción con esa producción para todos los terminales (reduce k) Oscar Bonilla12Universidad Galileo

  13. Ejemplo de Construcción de Parse Table s1 X <S>  <X> • $ s0 s2 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( ) ( <X>  ( • <X> ) <X>  ( • ) <X>  • ( <X> ) <X>  • ( ) ( s3 <X>  ( <X> • ) X ) ) s5 s4 <X>  ( ) • <X>  ( <X> ) • Oscar Bonilla13Universidad Galileo

  14. Construcción de un Parse Engine LR(0) • Agregamos la producción especial S’  S $ • Encontramos los ítems de la CFG • Creamos el DFA • Usando las funciones closure y goto • Construimos la tabla de parseo LR(0) Parser Engine Oscar Bonilla14Universidad Galileo

  15. Resumen • Resumende la construcción de un parser LR(0) • Limitaciones de los lenguajes LR(0) • Construcción de un parser engine SLR(1) • Limitaciones de los lenguajes SLR(1) • Construcción de un parser engine LR(1) • Construcción de un parser engine LALR(1) Oscar Bonilla15Universidad Galileo

  16. Ejemplo • Strings de uno o más paréntesis izquierdos seguidos del mismo número de paréntesis derechos <S>  <X> $ <X>  ( <X> ) <X>  ( ) • Strings de cero o más paréntesis izquierdos seguidos del mismo número de paréntesis derechos Oscar Bonilla16Universidad Galileo

  17. Ejemplo • Strings de uno o más paréntesis izquierdos seguidos del mismo número de paréntesis derechos <S>  <X> $ <X>  ( <X> ) <X>  ( ) • Strings de cero o más paréntesis izquierdos seguidos del mismo número de paréntesis derechos<S>  <X> $<X>  ( <X> )<X>   Oscar Bonilla17Universidad Galileo

  18. Ejemplo • La gramática <S>  <X> $ <X>  ( <X> ) <X>   • Items <S>  • <X> $ <S>  <X> • $ <X>  •( <X> ) <X>  ( • <X> ) <X>  ( <X> • ) <X>  ( <X> ) • <X>  ???? Oscar Bonilla18Universidad Galileo

  19. Ejemplo • La gramática <S>  <X> $ <X>  ( <X> ) <X>   • Items <S>  • <X> $ <S>  <X> • $ <X>  •( <X> ) <X>  ( • <X> ) <X>  ( <X> • ) <X>  ( <X> ) • <X>  • Oscar Bonilla19Universidad Galileo

  20. Construcción del DFA para el Ejemplo s0 <S>  • <X> $ <X>  • ( <X> ) <X>  • Oscar Bonilla20Universidad Galileo

  21. Construcción del DFA para el Ejemplo s1 X <S>  <X> • $ s0 <S>  • <X> $ <X>  • ( <X> ) <X>  • Oscar Bonilla21Universidad Galileo

  22. Construcción del DFA para el Ejemplo s1 X <S>  <X> • $ s0 s2 <S>  • <X> $ <X>  • ( <X> ) <X>  • <X>  ( • <X> ) <X>  • ( <X> ) <X>  • ( Oscar Bonilla22Universidad Galileo

  23. Construcción del DFA para el Ejemplo s1 X <S>  <X> • $ s0 s2 <S>  • <X> $ <X>  • ( <X> ) <X>  • <X>  ( • <X> ) <X>  • ( <X> ) <X>  • ( Oscar Bonilla23Universidad Galileo

  24. Construcción del DFA para el Ejemplo s1 X <S>  <X> • $ s0 s2 <S>  • <X> $ <X>  • ( <X> ) <X>  • <X>  ( • <X> ) <X>  • ( <X> ) <X>  • ( Oscar Bonilla24Universidad Galileo

  25. Construcción del DFA para el Ejemplo s1 X <S>  <X> • $ s0 s2 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • ( Oscar Bonilla25Universidad Galileo

  26. Construcción del DFA para el Ejemplo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( X Oscar Bonilla26Universidad Galileo

  27. Construcción del DFA para el Ejemplo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( X Oscar Bonilla27Universidad Galileo

  28. Construcción del DFA para el Ejemplo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) X s4 <X>  ( <X> ) • Oscar Bonilla28Universidad Galileo

  29. Construcción del DFA para el Ejemplo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) X s4 <X>  ( <X> ) • Oscar Bonilla29Universidad Galileo

  30. Construcción del DFA para el Ejemplo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) X s4 <X>  ( <X> ) • Oscar Bonilla30Universidad Galileo

  31. Construcción de la tabla de parseo para el Ejemplo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) X s4 <X>  ( <X> ) • Oscar Bonilla31Universidad Galileo

  32. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) X s4 <X>  ( <X> ) • Oscar Bonilla32Universidad Galileo

  33. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) X s4 <X>  ( <X> ) • Oscar Bonilla33Universidad Galileo

  34. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) X s4 <X>  ( <X> ) • Oscar Bonilla34Universidad Galileo

  35. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) X s4 <X>  ( <X> ) • Oscar Bonilla35Universidad Galileo

  36. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) X s4 <X>  ( <X> ) • Oscar Bonilla36Universidad Galileo

  37. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) X s4 <X>  ( <X> ) • Oscar Bonilla37Universidad Galileo

  38. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 <X>  ( <X> ) • Oscar Bonilla38Universidad Galileo

  39. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 <X>  ( <X> ) • Oscar Bonilla39Universidad Galileo

  40. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 <X>  ( <X> ) • Oscar Bonilla40Universidad Galileo

  41. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 <X>  ( <X> ) • Oscar Bonilla41Universidad Galileo

  42. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 <X>  ( <X> ) • Oscar Bonilla42Universidad Galileo

  43. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 <X>  ( <X> ) • Oscar Bonilla43Universidad Galileo

  44. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 <X>  ( <X> ) • Oscar Bonilla44Universidad Galileo

  45. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 <X>  ( <X> ) • Oscar Bonilla45Universidad Galileo

  46. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 Conflicto shift/reduce <X>  ( <X> ) • Oscar Bonilla46Universidad Galileo

  47. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 Conflicto shift/reduce <X>  ( <X> ) • Oscar Bonilla47Universidad Galileo

  48. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 Conflicto shift/reduce <X>  ( <X> ) • Oscar Bonilla48Universidad Galileo

  49. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 Conflicto shift/reduce <X>  ( <X> ) • Oscar Bonilla49Universidad Galileo

  50. Construcción de la tabla de parseo s1 X <S>  <X> • $ s0 s2 s3 <S>  • <X> $ <X>  • ( <X> ) <X>  • ( <X>  ( • <X> ) <X>  • ( <X> ) <X>  • <X>  ( <X> • ) ( ) Conflicto shift/reduce X s4 Conflicto shift/reduce <X>  ( <X> ) • Oscar Bonilla50Universidad Galileo

More Related