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