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