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 Predictivo No Recursivo

4,069 views

Published on

El análisis sintáctico predictivo no recursivo utiliza una tabla donde a cada símbolo de entrada le corresponde una producción de la gramática, con esto se evitan los procesos recursivos.

Published in: Education
  • Be the first to comment

  • Be the first to like this

Análisis Sintactico Predictivo No Recursivo

  1. 1. Análisis Sintáctico Predictivo No Recursivo Sección 4.4 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. Modelo analizador sintáctico predictivo no recursivo Programa para análisis sintáctico predictivo Tabla de análisis sintáctico M a + b $ X Y Z $ PILA ENTRADA SALIDA M[ X ,+]
  3. 3. Ejemplo <ul><li>E => TE’ </li></ul><ul><li>E’ => + TE’ | nil </li></ul><ul><li>T => FT’ </li></ul><ul><li>T’ => * FT’ | nil </li></ul><ul><li>F => ( E ) | id </li></ul>
  4. 4. Primero y Siguiente <ul><li>Primero( α) </li></ul><ul><ul><li>Conjunto de terminales </li></ul></ul><ul><ul><li>Que inician las cadenas de α </li></ul></ul><ul><ul><li>Si α =>* nil </li></ul></ul><ul><ul><ul><li>nil también está en Primero(α) </li></ul></ul></ul>
  5. 5. Primero y Siguiente <ul><li>Siguiente(A) </li></ul><ul><ul><li>Conjunto de terminales a </li></ul></ul><ul><ul><li>Que pueden aparecer a la derecha de A </li></ul></ul><ul><ul><li>S =>* αAaβ para algún α y β </li></ul></ul><ul><ul><li>Obsérvar </li></ul></ul><ul><ul><ul><li>S =>* αABCaβ </li></ul></ul></ul><ul><ul><ul><li>a pertenece a Siguiente(A) si: </li></ul></ul></ul><ul><ul><ul><ul><li>B =>* nil </li></ul></ul></ul></ul><ul><ul><ul><ul><li>C =>* nil </li></ul></ul></ul></ul>
  6. 6. Construcción de tabla M <ul><li>M [X, x] X no terminal, x terminal </li></ul><ul><li>Para cada A => α </li></ul><ul><ul><li>Para cada terminal a de Primero(α) </li></ul></ul><ul><ul><ul><li>Añadir A => α a M[A,a] </li></ul></ul></ul><ul><ul><li>Si nil está en Primero(α) </li></ul></ul><ul><ul><ul><li>Añadir A => α a M[A,b] </li></ul></ul></ul><ul><ul><ul><ul><li>Para cada b de Siguiente(A) </li></ul></ul></ul></ul><ul><ul><li>Si nil está en Primero(α) y $ en Siguiente(A) </li></ul></ul><ul><ul><ul><li>Añadir A => α a M[A,$] </li></ul></ul></ul><ul><li>Toda entrada vacía de M es error </li></ul>
  7. 7. Ejemplo <ul><li>Construír M para </li></ul><ul><li>P => i E t PP’ | a </li></ul><ul><li>P’ => e P | nil </li></ul><ul><li>E => b </li></ul>
  8. 8. Gramáticas LL(1) <ul><li>Gramática con M sin entradas múltiples </li></ul><ul><li>L de “left” </li></ul><ul><ul><li>Se analiza la entrada de izquierda a derecha </li></ul></ul><ul><li>L de “left derivative” </li></ul><ul><ul><li>Se deriva por la izquierda </li></ul></ul><ul><li>(1) de que solo se analiza un token anticipadamente </li></ul>
  9. 9. Propiedades LL(1) <ul><li>No pueden ser ambiguas </li></ul><ul><li>No pueden ser recursivas por la izquierda </li></ul>

×