9
Análisis Sintáctico Predictivo No Recursivo Sección 4.4 Leonel Morales Díaz [email protected] om right 2008 by Leonel Morales Díaz – Ingeniería Simple. Derechos reservados Disponible en: http://www.ingenieriasimple.com/compila

Análisis Sintactico Predictivo No Recursivo

Embed Size (px)

DESCRIPTION

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.

Citation preview

Page 1: Análisis Sintactico Predictivo No Recursivo

Análisis Sintáctico Predictivo No Recursivo

Sección 4.4Leonel Morales Díaz

[email protected]

Copyright 2008 by Leonel Morales Díaz – Ingeniería Simple.Derechos reservados Disponible en: http://www.ingenieriasimple.com/compiladores

Page 2: Análisis Sintactico Predictivo No Recursivo

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,+]

Page 3: Análisis Sintactico Predictivo No Recursivo

Ejemplo

E => TE’ E’ => +TE’ | nilT => FT’ T’ => *FT’ | nilF => (E) | id

No Terminal id + * ( ) $

E E => TE' E => TE'E' E' => TE' E' => nil E' => nilT T => FT' T => FT'T' T' => nil T' => *FT' T' => nil T' => nilF F => id F => (E )

Símbolo de entrada

PILA ENTRADA SALIDA

$E id + id * id$$E'T id + id * id$ E => TE'$E'T'F id + id * id$ T => FT'$E'T' id id + id * id$ F => id$E'T' + id * id$$E' + id * id$ T' => nil$E'T+ + id * id$ E' => +TE'$E'T id * id$$E'T'F id * id$ T => FT'$E'T' id id * id$ F => id$E'T' * id$$E'T'F * * id$ T' => *FT'$E'T'F id$$E'T' id id$ F => id$E'T' $$E' $ T' => nil$ $ E' => nil

Page 4: Análisis Sintactico Predictivo No Recursivo

Primero y Siguiente Primero(α)

Conjunto de terminales Que inician las cadenas de α Si α =>* nil

nil también está en Primero(α)

Page 5: Análisis Sintactico Predictivo No Recursivo

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

Page 6: Análisis Sintactico Predictivo No Recursivo

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

Page 7: Análisis Sintactico Predictivo No Recursivo

Ejemplo Construír M para

P => i E t PP’ | aP’ => e P | nilE => b

Page 8: Análisis Sintactico Predictivo No Recursivo

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

Page 9: Análisis Sintactico Predictivo No Recursivo

Propiedades LL(1) No pueden ser ambiguas No pueden ser recursivas por la

izquierda