Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Análisis Sintactico Ascendente

7,249 views

Published on

Profundización y ejemplos sobre análisis sintáctico descendente predictivo, muestra el diagrama de transiciones que puede generarse a partir de la gramática.

Published in: Education
  • Be the first to comment

Análisis Sintactico Ascendente

  1. 1. Análisis Sintáctico Ascendente 4.5 en adelante Leonel Morales Díaz [email_address] Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados Disponible en: http://www.ingenieriasimple.com/compiladores
  2. 2. Por desplazamiento y reducción <ul><li>La entrada se “reduce” al símbolo inicial </li></ul><ul><li>Desplazando elementos de la entrada </li></ul><ul><li>Llegar de las hojas hacia la raíz </li></ul>
  3. 3. Procedimiento <ul><li>A partir de la entrada </li></ul><ul><ul><li>Se sustituye una subcadena </li></ul></ul><ul><ul><ul><li>Adecuadamente elegida </li></ul></ul></ul><ul><ul><ul><li>Que concuerde con un lado derecho </li></ul></ul></ul><ul><ul><li>Por el no terminal del lado izquierdo </li></ul></ul><ul><ul><ul><li>Trazando una derivación inversa </li></ul></ul></ul><ul><ul><ul><li>Por el lado derecho </li></ul></ul></ul>
  4. 4. Ejemplo <ul><li>Gramática </li></ul><ul><li>S => a AB e </li></ul><ul><li>A => A bc | b </li></ul><ul><li>B => d </li></ul><ul><li>Entrada “abbcde” se reduce a S por: </li></ul><ul><li>abbcde </li></ul>
  5. 5. Ejemplo <ul><li>Gramática </li></ul><ul><li>S => a AB e </li></ul><ul><li>A => A bc | b </li></ul><ul><li>B => d </li></ul><ul><li>Entrada “abbcde” se reduce a S por: </li></ul><ul><li>abbcde </li></ul><ul><li>a A bcde </li></ul>
  6. 6. Ejemplo <ul><li>Gramática </li></ul><ul><li>S => a AB e </li></ul><ul><li>A => A bc | b </li></ul><ul><li>B => d </li></ul><ul><li>Entrada “abbcde” se reduce a S por: </li></ul><ul><li>abbcde </li></ul><ul><li>a A bcde </li></ul><ul><li>a A de </li></ul><ul><li>¿Por qué no a AA cde ? </li></ul>
  7. 7. Ejemplo <ul><li>Gramática </li></ul><ul><li>S => a AB e </li></ul><ul><li>A => A bc | b </li></ul><ul><li>B => d </li></ul><ul><li>Entrada “abbcde” se reduce a S por: </li></ul><ul><li>abbcde </li></ul><ul><li>a A bcde </li></ul><ul><li>a A de </li></ul><ul><li>a AB e </li></ul>
  8. 8. Ejemplo <ul><li>Gramática </li></ul><ul><li>S => a AB e </li></ul><ul><li>A => A bc | b </li></ul><ul><li>B => d </li></ul><ul><li>Entrada “abbcde” se reduce a S por: </li></ul><ul><li>abbcde </li></ul><ul><li>a A bcde </li></ul><ul><li>a A de </li></ul><ul><li>a AB e </li></ul><ul><li>S </li></ul>
  9. 9. Ejemplo <ul><li>Gramática </li></ul><ul><li>S => a AB e </li></ul><ul><li>A => A bc | b </li></ul><ul><li>B => d </li></ul><ul><li>Entrada “abbcde” se reduce a S por: </li></ul><ul><li>abbcde </li></ul><ul><li>a A bcde </li></ul><ul><li>a A de </li></ul><ul><li>a AB e </li></ul><ul><li>S </li></ul>Mangos Mangos Mangos Mangos
  10. 10. Mangos <ul><li>Subcadena </li></ul><ul><li>Concuerda con un lado derecho </li></ul><ul><li>Se reduce al no terminal de la izquierda </li></ul><ul><li>Avanza un paso en la derivación inversa </li></ul><ul><ul><li>De una derivación derecha </li></ul></ul><ul><li>Si la gramática no es ambigua </li></ul><ul><ul><li>Existe exactamente un mango </li></ul></ul>
  11. 11. Volviendo al ejemplo <ul><li>Gramática </li></ul><ul><li>S => a AB e </li></ul><ul><li>A => A bc | b </li></ul><ul><li>B => d </li></ul><ul><li>Es recursiva por la izquierda </li></ul><ul><li>¿Puede derivar abbcde? </li></ul>
  12. 12. Volviendo al ejemplo <ul><li>Gramática </li></ul><ul><li>S => a AB e </li></ul><ul><li>A => A bc | b </li></ul><ul><li>B => d </li></ul><ul><li>Es recursiva por la izquierda </li></ul><ul><li>¿Puede derivar abbcde? </li></ul><ul><ul><li>Solo por la derecha </li></ul></ul>
  13. 13. Ejercicio <ul><li>Programa -> Instrucción | { Rutina } </li></ul><ul><li>Rutina -> Instrucción ; Instrucción | </li></ul><ul><li>Instrucción ; Rutina </li></ul><ul><li>Instrucción -> nil | Variable ++ | </li></ul><ul><li>Variable -- | </li></ul><ul><li>While Prueba do Programa </li></ul><ul><li>Prueba -> Variable <> 0 | </li></ul><ul><li>Variable = 0 </li></ul><ul><li>Analizar Ascendentemente </li></ul><ul><li>While v<>0 do { </li></ul><ul><li>y++; </li></ul><ul><li>x++; </li></ul><ul><li>v--; </li></ul><ul><li>} </li></ul>
  14. 14. Gramáticas LR <ul><li>Gramáticas LR </li></ul><ul><ul><li>Left to Right </li></ul></ul><ul><ul><ul><li>de izquierda a derecha </li></ul></ul></ul><ul><ul><li>Rightmost production </li></ul></ul><ul><ul><ul><li>La producción de más a la derecha </li></ul></ul></ul><ul><li>Variaciones: SLR, LALR, LR(k) </li></ul>
  15. 15. Tercer proyecto <ul><li>Compilador de programas while </li></ul><ul><li>Generando script de assembler para debug </li></ul><ul><li>Tomando en cuenta los macros </li></ul><ul><li>Fecha de entrega 21-10-2006 </li></ul>

×