dept. de lenguajes y sistemas informáticos universidad de ... · la primera acción de un...

193
Tema 3: Análisis sintáctico descendente Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 1 / 41

Upload: others

Post on 08-May-2020

12 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Tema 3: Análisis sintáctico descendente

Procesamiento de Lenguajes

Dept. de Lenguajes y Sistemas InformáticosUniversidad de Alicante

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 1 / 41

Page 2: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

¿Cómo funciona el analizador sintáctico?

La primera acción de un analizador sintáctico es obtener un tokende la entrada, llamando al analizador léxico (que trabaja como unsubprograma)

El analizador va leyendo tokens del analizador léxico a la vez queva generando la traducción, comprobando que la sintaxis escorrecta y comprobando las restricciones semánticas.IMPORTANTE: Las tres tareas (traducción, sintaxis, semántica)se realizan de forma simultánea, aunque a veces es necesarioacumular varios tokens para realizar alguna comprobación ogenerar la traducción

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 2 / 41

Page 3: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

¿Cómo funciona el analizador sintáctico?

La primera acción de un analizador sintáctico es obtener un tokende la entrada, llamando al analizador léxico (que trabaja como unsubprograma)El analizador va leyendo tokens del analizador léxico a la vez queva generando la traducción, comprobando que la sintaxis escorrecta y comprobando las restricciones semánticas.

IMPORTANTE: Las tres tareas (traducción, sintaxis, semántica)se realizan de forma simultánea, aunque a veces es necesarioacumular varios tokens para realizar alguna comprobación ogenerar la traducción

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 2 / 41

Page 4: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

¿Cómo funciona el analizador sintáctico?

La primera acción de un analizador sintáctico es obtener un tokende la entrada, llamando al analizador léxico (que trabaja como unsubprograma)El analizador va leyendo tokens del analizador léxico a la vez queva generando la traducción, comprobando que la sintaxis escorrecta y comprobando las restricciones semánticas.IMPORTANTE: Las tres tareas (traducción, sintaxis, semántica)se realizan de forma simultánea, aunque a veces es necesarioacumular varios tokens para realizar alguna comprobación ogenerar la traducción

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 2 / 41

Page 5: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: gramática de expresiones simples

E → E opsuma TE → TT → T opmul FT → FF → idF → numF → pari E pard

2+3*4 suma(2,prod(3,4))2+3-4 resta(suma(2,3),4)2+3*(4-5) suma(2,prod(3,resta(4,5)))

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 3 / 41

Page 6: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Algoritmos de análisis sintáctico

Para cualquier GIC: Cocke-Younger-Kasami (CYK), Earley,Tomita, ...

≈ O(n3)

Si se desea un coste temporal lineal, O(n), es necesario ponerrestricciones a las GIC, es decir, usar subconjuntos del conjuntode las GIC. Hay dos estrategias:

I Análisis sintáctico descendente (ASD)I Análisis sintáctico ascendente (ASA)

Implementación de analizadores sintácticos:I A mano (para gramáticas simples)I Usando generadores automáticos: yacc/bison, ANTLR, PCCTS, ...

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 4 / 41

Page 7: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Algoritmos de análisis sintáctico

Para cualquier GIC: Cocke-Younger-Kasami (CYK), Earley,Tomita, ... ≈ O(n3)

Si se desea un coste temporal lineal, O(n), es necesario ponerrestricciones a las GIC, es decir, usar subconjuntos del conjuntode las GIC. Hay dos estrategias:

I Análisis sintáctico descendente (ASD)I Análisis sintáctico ascendente (ASA)

Implementación de analizadores sintácticos:I A mano (para gramáticas simples)I Usando generadores automáticos: yacc/bison, ANTLR, PCCTS, ...

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 4 / 41

Page 8: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Algoritmos de análisis sintáctico

Para cualquier GIC: Cocke-Younger-Kasami (CYK), Earley,Tomita, ... ≈ O(n3)

Si se desea un coste temporal lineal, O(n), es necesario ponerrestricciones a las GIC, es decir, usar subconjuntos del conjuntode las GIC. Hay dos estrategias:

I Análisis sintáctico descendente (ASD)I Análisis sintáctico ascendente (ASA)

Implementación de analizadores sintácticos:I A mano (para gramáticas simples)I Usando generadores automáticos: yacc/bison, ANTLR, PCCTS, ...

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 4 / 41

Page 9: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Algoritmos de análisis sintáctico

Para cualquier GIC: Cocke-Younger-Kasami (CYK), Earley,Tomita, ... ≈ O(n3)

Si se desea un coste temporal lineal, O(n), es necesario ponerrestricciones a las GIC, es decir, usar subconjuntos del conjuntode las GIC. Hay dos estrategias:

I Análisis sintáctico descendente (ASD)I Análisis sintáctico ascendente (ASA)

Implementación de analizadores sintácticos:I A mano (para gramáticas simples)I Usando generadores automáticos: yacc/bison, ANTLR, PCCTS, ...

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 4 / 41

Page 10: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Análisis sintáctico descendente: un ejemplo

El análisis sintáctico descendente trata de reproducir la derivación porla izquierda de la cadena de entrada (solo puede haber una)Ejemplo: int a,b,c;

D → Tipo id LTipo → intTipo → floatL → coma id LL → pyc

D ⇒ Tipo id(a) L⇒ int id(a) L⇒ int id(a) coma id(b) L⇒ int id(a) coma id(b) coma id(c) L⇒ int id(a) coma id(b) coma id(c) pyc

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 5 / 41

Page 11: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Análisis sintáctico ascendente: un ejemplo

El análisis sintáctico ascendente trata de reconstruir la inversa de unaderivación por la derecha de la cadena de entradaEjemplo:

int id(a) coma id(b) coma id(c) pyc ⇐Tipo id(a) coma id(b) coma id(c) pyc ⇐Tipo id(a) coma id(b) coma id(c) L ⇐Tipo id(a) coma id(b) L ⇐Tipo id(a) L ⇐D

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 6 / 41

Page 12: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Características no deseables para el análisis lineal

Análisis sintáctico descendenteI Recursividad por la izquierdaI Factores comunes por la izquierdaI Ambigüedad

Análisis sintáctico ascendenteI Ambigüedad

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 7 / 41

Page 13: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones para el ASD en tiempo linealPara realizar un análisis sintáctico lineal, el analizador debe saberen todo momento qué regla ha de aplicar, no puede hacerbacktracking. Por tanto, debe ser un ASD predictivo

Siempre se tiene que tratar de derivar el no terminal más a laizquierda en la cadena de símbolos. Inicialmente la cadena desímbolos sólo contiene el símbolo inicial, pero según se vanaplicando reglas contiene terminales y no terminales.Ejemplo:

A −→ a B CB −→ b basB −→ big C bossC −→ εC −→ c

A ⇒ a B C ⇒ a b bas C . . .

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 8 / 41

Page 14: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones para el ASD en tiempo linealPara realizar un análisis sintáctico lineal, el analizador debe saberen todo momento qué regla ha de aplicar, no puede hacerbacktracking. Por tanto, debe ser un ASD predictivoSiempre se tiene que tratar de derivar el no terminal más a laizquierda en la cadena de símbolos. Inicialmente la cadena desímbolos sólo contiene el símbolo inicial, pero según se vanaplicando reglas contiene terminales y no terminales.Ejemplo:

A −→ a B CB −→ b basB −→ big C bossC −→ εC −→ c

A ⇒ a B C ⇒ a b bas C . . .

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 8 / 41

Page 15: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones para el ASD predictivoA la vez que se van aplicando reglas, hay que comprobar que losterminales que aparecen (por la izquierda) coinciden (match) conlos que aparecen en la cadena de entrada.

Pero, dado un no terminal B , ... ¿cómo se puede predecir quéregla hay que aplicar? Mirando los primeros símbolos de laspartes derechas de BEjemplo:

Gramática Entrada DerivaciónA −→ a B C a b bas c AB −→ b bas a b bas c a B CB −→ big C boss b bas c B CC −→ ε b bas c b bas CC −→ c bas c bas C

c Cc c

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 9 / 41

Page 16: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones para el ASD predictivoA la vez que se van aplicando reglas, hay que comprobar que losterminales que aparecen (por la izquierda) coinciden (match) conlos que aparecen en la cadena de entrada.Pero, dado un no terminal B , ... ¿cómo se puede predecir quéregla hay que aplicar?

Mirando los primeros símbolos de laspartes derechas de BEjemplo:

Gramática Entrada DerivaciónA −→ a B C a b bas c AB −→ b bas a b bas c a B CB −→ big C boss b bas c B CC −→ ε b bas c b bas CC −→ c bas c bas C

c Cc c

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 9 / 41

Page 17: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones para el ASD predictivoA la vez que se van aplicando reglas, hay que comprobar que losterminales que aparecen (por la izquierda) coinciden (match) conlos que aparecen en la cadena de entrada.Pero, dado un no terminal B , ... ¿cómo se puede predecir quéregla hay que aplicar? Mirando los primeros símbolos de laspartes derechas de B

Ejemplo:

Gramática Entrada DerivaciónA −→ a B C a b bas c AB −→ b bas a b bas c a B CB −→ big C boss b bas c B CC −→ ε b bas c b bas CC −→ c bas c bas C

c Cc c

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 9 / 41

Page 18: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones para el ASD predictivoA la vez que se van aplicando reglas, hay que comprobar que losterminales que aparecen (por la izquierda) coinciden (match) conlos que aparecen en la cadena de entrada.Pero, dado un no terminal B , ... ¿cómo se puede predecir quéregla hay que aplicar? Mirando los primeros símbolos de laspartes derechas de BEjemplo:

Gramática Entrada DerivaciónA −→ a B C a b bas c AB −→ b bas a b bas c a B CB −→ big C boss b bas c B CC −→ ε b bas c b bas CC −→ c bas c bas C

c Cc c?? ??

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 9 / 41

Page 19: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones para el ASD predictivoA la vez que se van aplicando reglas, hay que comprobar que losterminales que aparecen (por la izquierda) coinciden (match) conlos que aparecen en la cadena de entrada.Pero, dado un no terminal B , ... ¿cómo se puede predecir quéregla hay que aplicar? Mirando los primeros símbolos de laspartes derechas de BEjemplo:

Gramática Entrada DerivaciónA −→ a B C a b bas c AB −→ b bas a b bas c a B CB −→ big C boss b bas c B CC −→ ε b bas c b bas CC −→ c bas c bas C

c Cc cEOF EOF

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 9 / 41

Page 20: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones para el ASD predictivoA la vez que se van aplicando reglas, hay que comprobar que losterminales que aparecen (por la izquierda) coinciden (match) conlos que aparecen en la cadena de entrada.Pero, dado un no terminal B , ... ¿cómo se puede predecir quéregla hay que aplicar? Mirando los primeros símbolos de laspartes derechas de BEjemplo:

Gramática Entrada DerivaciónA −→ a B C a b bas c AB −→ b bas a b bas c a B CB −→ big C boss b bas c B CC −→ ε b bas c b bas CC −→ c bas c bas C

c Cc c$ $

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 9 / 41

Page 21: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Algoritmo de análisis sintáctico descendente predictivo

1 Inicialmente se tiene la cadena de entrada y el símbolo inicial dela gramática en la derivación

2 Repetir hasta llegar al final de la cadena de entrada ($):I Si el símbolo más a la izquierda en la derivación es un no terminal,

predecir qué regla aplicar en función del símbolo que hay en laentrada, y aplicar la regla

I Si ese símbolo es un terminal, hay que compararlo con el símbolode la entrada y avanzar

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 10 / 41

Page 22: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Algoritmo de análisis sintáctico descendente predictivo

1 Inicialmente se tiene la cadena de entrada y el símbolo inicial dela gramática en la derivación

2 Repetir hasta llegar al final de la cadena de entrada ($):I Si el símbolo más a la izquierda en la derivación es un no terminal,

predecir qué regla aplicar en función del símbolo que hay en laentrada, y aplicar la regla

I Si ese símbolo es un terminal, hay que compararlo con el símbolode la entrada y avanzar

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 10 / 41

Page 23: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Algoritmo de análisis sintáctico descendente predictivo

1 Inicialmente se tiene la cadena de entrada y el símbolo inicial dela gramática en la derivación

2 Repetir hasta llegar al final de la cadena de entrada ($):I Si el símbolo más a la izquierda en la derivación es un no terminal,

predecir qué regla aplicar en función del símbolo que hay en laentrada, y aplicar la regla

I Si ese símbolo es un terminal, hay que compararlo con el símbolode la entrada y avanzar

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 10 / 41

Page 24: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Algoritmo de análisis sintáctico descendente predictivo

1 Inicialmente se tiene la cadena de entrada y el símbolo inicial dela gramática en la derivación

2 Repetir hasta llegar al final de la cadena de entrada ($):I Si el símbolo más a la izquierda en la derivación es un no terminal,

predecir qué regla aplicar en función del símbolo que hay en laentrada, y aplicar la regla

I Si ese símbolo es un terminal, hay que compararlo con el símbolode la entrada y avanzar ¿Y si no coinciden?

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 10 / 41

Page 25: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Algoritmo de análisis sintáctico descendente predictivo

1 Inicialmente se tiene la cadena de entrada y el símbolo inicial dela gramática en la derivación

2 Repetir hasta llegar al final de la cadena de entrada ($):I Si el símbolo más a la izquierda en la derivación es un no terminal,

predecir qué regla aplicar en función del símbolo que hay en laentrada, y aplicar la regla ¿Y si no hay ninguna regla aplicable?

I Si ese símbolo es un terminal, hay que compararlo con el símbolode la entrada y avanzar ¿Y si no coinciden?

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 10 / 41

Page 26: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (1)

Para elegir (predecir) qué regla aplicar para un no terminal A, hay queconsultar la parte derecha de las reglas de A:

A −→ all B CA −→ badB −→ big C bossB −→ betC −→ catC −→ cow

En este caso, está chupao, basta con mirar el terminal de la entrada yel no terminal a derivar, y se elige la regla a aplicar

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 11 / 41

Page 27: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (2)

... pero ¿y si al principio de la parte derecha hay un no terminal?

A −→ B CA −→ badB −→ big C bossB −→ betC −→ catC −→ cow

En este caso, es necesario tener calculados el conjunto de terminales queaparecen al principio de la parte derecha de las reglas de un no terminal o,mejor dicho, el conjunto de terminales que aparecerían al principio de lascadenas generadas por el no terminal

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 12 / 41

Page 28: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (2)

... pero ¿y si al principio de la parte derecha hay un no terminal?

A −→ B CA −→ badB −→ big C bossB −→ betC −→ catC −→ cow

En este caso, es necesario tener calculados el conjunto de terminales queaparecen al principio de la parte derecha de las reglas de un no terminal

o,mejor dicho, el conjunto de terminales que aparecerían al principio de lascadenas generadas por el no terminal

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 12 / 41

Page 29: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (2)

... pero ¿y si al principio de la parte derecha hay un no terminal?

A −→ B CA −→ badB −→ big C bossB −→ betC −→ catC −→ cow

En este caso, es necesario tener calculados el conjunto de terminales queaparecen al principio de la parte derecha de las reglas de un no terminal o,mejor dicho, el conjunto de terminales que aparecerían al principio de lascadenas generadas por el no terminal

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 12 / 41

Page 30: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (2)

... pero ¿y si al principio de la parte derecha hay un no terminal?

A −→ B CA −→ bad { bad }B −→ big C boss { big }B −→ bet { bet }C −→ cat { cat }C −→ cow { cow }

En este caso, es necesario tener calculados el conjunto de terminales queaparecen al principio de la parte derecha de las reglas de un no terminal o,mejor dicho, el conjunto de terminales que aparecerían al principio de lascadenas generadas por el no terminal

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 12 / 41

Page 31: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (2)

... pero ¿y si al principio de la parte derecha hay un no terminal?

A −→ B C { big ,bet }A −→ bad { bad }B −→ big C boss { big }B −→ bet { bet }C −→ cat { cat }C −→ cow { cow }

En este caso, es necesario tener calculados el conjunto de terminales queaparecen al principio de la parte derecha de las reglas de un no terminal o,mejor dicho, el conjunto de terminales que aparecerían al principio de lascadenas generadas por el no terminal

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 12 / 41

Page 32: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (3)

IMPORTANTE: el conjunto de símbolos que aparecen al principio delas cadenas generadas por un no terminal se conoce con el nombrede conjunto de PRIMEROS (FIRST), y más adelante veremos cómocalcularlo formalmente.

A −→ B CA −→ badB −→ big C bossB −→ betC −→ catC −→ cow

PRIMEROS(A) = ??PRIMEROS(B) = { big ,bet }PRIMEROS(C) = { cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 13 / 41

Page 33: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (3)

IMPORTANTE: el conjunto de símbolos que aparecen al principio delas cadenas generadas por un no terminal se conoce con el nombrede conjunto de PRIMEROS (FIRST), y más adelante veremos cómocalcularlo formalmente.

A −→ B CA −→ badB −→ big C bossB −→ betC −→ catC −→ cow

PRIMEROS(A) = { bad , }PRIMEROS(B) = { big ,bet }PRIMEROS(C) = { cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 13 / 41

Page 34: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (3)

IMPORTANTE: el conjunto de símbolos que aparecen al principio delas cadenas generadas por un no terminal se conoce con el nombrede conjunto de PRIMEROS (FIRST), y más adelante veremos cómocalcularlo formalmente.

A −→ B CA −→ badB −→ big C bossB −→ betC −→ catC −→ cow

PRIMEROS(A) = { bad , big ,bet }PRIMEROS(B) = { big ,bet }PRIMEROS(C) = { cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 13 / 41

Page 35: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (4)

¿Y si un no terminal genera la cadena vacía ε ?

A −→ B CA −→ badB −→ big C bossB −→ εC −→ catC −→ cow

PRIMEROS(A) = ??PRIMEROS(B) = { big , ε}PRIMEROS(C) = { cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 14 / 41

Page 36: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (4)

¿Y si un no terminal genera la cadena vacía ε ?

A −→ B CA −→ badB −→ big C bossB −→ εC −→ catC −→ cow

PRIMEROS(A) = { bad , }PRIMEROS(B) = { big , ε}PRIMEROS(C) = { cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 14 / 41

Page 37: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (4)

¿Y si un no terminal genera la cadena vacía ε ?

A −→ B CA −→ badB −→ big C bossB −→ εC −→ catC −→ cow

PRIMEROS(A) = { bad , big , ??}PRIMEROS(B) = { big , ε}PRIMEROS(C) = { cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 14 / 41

Page 38: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (4)

¿Y si un no terminal genera la cadena vacía ε ?

A −→ B CA −→ badB −→ big C bossB −→ εC −→ catC −→ cow

PRIMEROS(A) = { bad , big , cat , cow }PRIMEROS(B) = { big , ε}PRIMEROS(C) = { cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 14 / 41

Page 39: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (5)

Resumen:En un momento dado del análisis, se tiene que derivar un noterminal A. Además, se conoce el símbolo que aparece en laentrada

Dado el símbolo de la entrada y el no terminal A, se debe elegirqué regla de A hay que aplicar para llegar a un análisis correctosin backtracking. Para elegir la regla a aplicar, hay que consultarlas partes derechas de las reglas de A:

I Si la parte derecha de una regla empieza por un terminal y eseterminal coincide con el símbolo de la entrada, ésa es la regla quehay que aplicar

I Si la parte derecha de una regla empieza por un no terminal B, hayque consultar los símbolos que pueden ser generados por B; si elsímbolo de la entrada está entre esos símbolos, ésa es la reglaque hay que aplicar ¿Y si B genera ε? Hay que mirar los símbolosque aparecen después de B en la regla de A

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 15 / 41

Page 40: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (5)

Resumen:En un momento dado del análisis, se tiene que derivar un noterminal A. Además, se conoce el símbolo que aparece en laentradaDado el símbolo de la entrada y el no terminal A, se debe elegirqué regla de A hay que aplicar para llegar a un análisis correctosin backtracking. Para elegir la regla a aplicar, hay que consultarlas partes derechas de las reglas de A:

I Si la parte derecha de una regla empieza por un terminal y eseterminal coincide con el símbolo de la entrada, ésa es la regla quehay que aplicar

I Si la parte derecha de una regla empieza por un no terminal B, hayque consultar los símbolos que pueden ser generados por B; si elsímbolo de la entrada está entre esos símbolos, ésa es la reglaque hay que aplicar ¿Y si B genera ε? Hay que mirar los símbolosque aparecen después de B en la regla de A

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 15 / 41

Page 41: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (5)

Resumen:En un momento dado del análisis, se tiene que derivar un noterminal A. Además, se conoce el símbolo que aparece en laentradaDado el símbolo de la entrada y el no terminal A, se debe elegirqué regla de A hay que aplicar para llegar a un análisis correctosin backtracking. Para elegir la regla a aplicar, hay que consultarlas partes derechas de las reglas de A:

I Si la parte derecha de una regla empieza por un terminal y eseterminal coincide con el símbolo de la entrada, ésa es la regla quehay que aplicar

I Si la parte derecha de una regla empieza por un no terminal B, hayque consultar los símbolos que pueden ser generados por B; si elsímbolo de la entrada está entre esos símbolos, ésa es la reglaque hay que aplicar ¿Y si B genera ε? Hay que mirar los símbolosque aparecen después de B en la regla de A

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 15 / 41

Page 42: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (5)

Resumen:En un momento dado del análisis, se tiene que derivar un noterminal A. Además, se conoce el símbolo que aparece en laentradaDado el símbolo de la entrada y el no terminal A, se debe elegirqué regla de A hay que aplicar para llegar a un análisis correctosin backtracking. Para elegir la regla a aplicar, hay que consultarlas partes derechas de las reglas de A:

I Si la parte derecha de una regla empieza por un terminal y eseterminal coincide con el símbolo de la entrada, ésa es la regla quehay que aplicar

I Si la parte derecha de una regla empieza por un no terminal B, hayque consultar los símbolos que pueden ser generados por B; si elsímbolo de la entrada está entre esos símbolos, ésa es la reglaque hay que aplicar

¿Y si B genera ε? Hay que mirar los símbolosque aparecen después de B en la regla de A

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 15 / 41

Page 43: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (5)

Resumen:En un momento dado del análisis, se tiene que derivar un noterminal A. Además, se conoce el símbolo que aparece en laentradaDado el símbolo de la entrada y el no terminal A, se debe elegirqué regla de A hay que aplicar para llegar a un análisis correctosin backtracking. Para elegir la regla a aplicar, hay que consultarlas partes derechas de las reglas de A:

I Si la parte derecha de una regla empieza por un terminal y eseterminal coincide con el símbolo de la entrada, ésa es la regla quehay que aplicar

I Si la parte derecha de una regla empieza por un no terminal B, hayque consultar los símbolos que pueden ser generados por B; si elsímbolo de la entrada está entre esos símbolos, ésa es la reglaque hay que aplicar ¿Y si B genera ε?

Hay que mirar los símbolosque aparecen después de B en la regla de A

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 15 / 41

Page 44: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (5)

Resumen:En un momento dado del análisis, se tiene que derivar un noterminal A. Además, se conoce el símbolo que aparece en laentradaDado el símbolo de la entrada y el no terminal A, se debe elegirqué regla de A hay que aplicar para llegar a un análisis correctosin backtracking. Para elegir la regla a aplicar, hay que consultarlas partes derechas de las reglas de A:

I Si la parte derecha de una regla empieza por un terminal y eseterminal coincide con el símbolo de la entrada, ésa es la regla quehay que aplicar

I Si la parte derecha de una regla empieza por un no terminal B, hayque consultar los símbolos que pueden ser generados por B; si elsímbolo de la entrada está entre esos símbolos, ésa es la reglaque hay que aplicar ¿Y si B genera ε? Hay que mirar los símbolosque aparecen después de B en la regla de A

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 15 / 41

Page 45: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (6)

¿Y si ...

... todos los símbolos de la parte derecha de la regla de A son noterminales y todos generan ε ?

A −→ B CA −→ . . .B −→ εB −→ . . .C −→ εC −→ . . .

... o bien la parte derecha de A es directamente ε ?

En esos casos, parece que mirando solamente los PRIMEROS no essuficiente para decidir qué regla aplicar

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 16 / 41

Page 46: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (6)

¿Y si ...

... todos los símbolos de la parte derecha de la regla de A son noterminales y todos generan ε ?

A −→ B CA −→ . . .B −→ εB −→ . . .C −→ εC −→ . . .

... o bien la parte derecha de A es directamente ε ?

En esos casos, parece que mirando solamente los PRIMEROS no essuficiente para decidir qué regla aplicar

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 16 / 41

Page 47: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (6)

¿Y si ...

... todos los símbolos de la parte derecha de la regla de A son noterminales y todos generan ε ?

A −→ B CA −→ . . .B −→ εB −→ . . .C −→ εC −→ . . .

... o bien la parte derecha de A es directamente ε ?

En esos casos, parece que mirando solamente los PRIMEROS no essuficiente para decidir qué regla aplicar

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 16 / 41

Page 48: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (7)Hay dos soluciones al problema de las reglas que generan ε :

1 Cuando no se puede aplicar ninguna otra regla, se aplica la regla quegenera ε (algunos compiladores lo hacen, porque si hay un error en laentrada se detectará más adelante, al emparejar terminales)

2 Mirar, antes de decidir si aplicar la regla que genera ε , los símbolos quepueden aparecer después de A en una derivación válidaEjemplo:

A −→ B CA −→ ant A allB −→ big C badB −→ bus A bossB −→ εC −→ catC −→ ε

El conjunto de símbolos que pueden aparecer después de un noterminal A en una derivación válida se denomina el conjunto deSIGUIENTES de A: SIGUIENTES(A) = {all , boss }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 17 / 41

Page 49: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (7)Hay dos soluciones al problema de las reglas que generan ε :

1 Cuando no se puede aplicar ninguna otra regla, se aplica la regla quegenera ε (algunos compiladores lo hacen, porque si hay un error en laentrada se detectará más adelante, al emparejar terminales)

2 Mirar, antes de decidir si aplicar la regla que genera ε , los símbolos quepueden aparecer después de A en una derivación válida

Ejemplo:A −→ B CA −→ ant A allB −→ big C badB −→ bus A bossB −→ εC −→ catC −→ ε

El conjunto de símbolos que pueden aparecer después de un noterminal A en una derivación válida se denomina el conjunto deSIGUIENTES de A: SIGUIENTES(A) = {all , boss }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 17 / 41

Page 50: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (7)Hay dos soluciones al problema de las reglas que generan ε :

1 Cuando no se puede aplicar ninguna otra regla, se aplica la regla quegenera ε (algunos compiladores lo hacen, porque si hay un error en laentrada se detectará más adelante, al emparejar terminales)

2 Mirar, antes de decidir si aplicar la regla que genera ε , los símbolos quepueden aparecer después de A en una derivación válidaEjemplo:

A −→ B CA −→ ant A allB −→ big C badB −→ bus A bossB −→ εC −→ catC −→ ε

El conjunto de símbolos que pueden aparecer después de un noterminal A en una derivación válida se denomina el conjunto deSIGUIENTES de A: SIGUIENTES(A) = {all , boss }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 17 / 41

Page 51: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (7)Hay dos soluciones al problema de las reglas que generan ε :

1 Cuando no se puede aplicar ninguna otra regla, se aplica la regla quegenera ε (algunos compiladores lo hacen, porque si hay un error en laentrada se detectará más adelante, al emparejar terminales)

2 Mirar, antes de decidir si aplicar la regla que genera ε , los símbolos quepueden aparecer después de A en una derivación válidaEjemplo:

A −→ B CA −→ ant A allB −→ big C badB −→ bus A bossB −→ εC −→ catC −→ ε

El conjunto de símbolos que pueden aparecer después de un noterminal A en una derivación válida se denomina el conjunto deSIGUIENTES de A:

SIGUIENTES(A) = {all , boss }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 17 / 41

Page 52: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (7)Hay dos soluciones al problema de las reglas que generan ε :

1 Cuando no se puede aplicar ninguna otra regla, se aplica la regla quegenera ε (algunos compiladores lo hacen, porque si hay un error en laentrada se detectará más adelante, al emparejar terminales)

2 Mirar, antes de decidir si aplicar la regla que genera ε , los símbolos quepueden aparecer después de A en una derivación válidaEjemplo:

A −→ B CA −→ ant A allB −→ big C badB −→ bus A bossB −→ εC −→ catC −→ ε

El conjunto de símbolos que pueden aparecer después de un noterminal A en una derivación válida se denomina el conjunto deSIGUIENTES de A: SIGUIENTES(A) = {all , boss }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 17 / 41

Page 53: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Predicción de la regla a aplicar (7)Hay dos soluciones al problema de las reglas que generan ε :

1 Cuando no se puede aplicar ninguna otra regla, se aplica la regla quegenera ε (algunos compiladores lo hacen, porque si hay un error en laentrada se detectará más adelante, al emparejar terminales)

2 Mirar, antes de decidir si aplicar la regla que genera ε , los símbolos quepueden aparecer después de A en una derivación válidaEjemplo:

A −→ B CA −→ ant A allB −→ big C badB −→ bus A bossB −→ εC −→ catC −→ ε

El conjunto de símbolos que pueden aparecer después de un noterminal A en una derivación válida se denomina el conjunto deSIGUIENTES de A: SIGUIENTES(A) = {all , boss , $ }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 17 / 41

Page 54: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: conjunto depredicción

Dado una gramática G y un no terminal de la gramática A, para poderpredecir en cualquier derivación qué regla de A se debe aplicar esnecesario calcular el conjunto de predicción de cada regla de A,PRED(A −→ α):

PRED(A −→ α) =si ε ∈ PRIMEROS(α) entonces

(PRIMEROS(α)− {ε }) ∪ SIGUIENTES(A)si no

PRIMEROS(α)

Dado un no terminal A y un terminal de la entrada t , se aplicará laregla de A que tenga a t en su conjunto de predicción ¿Y si hay másde una regla de A que tenga a t?

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 18 / 41

Page 55: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: conjunto depredicción

Dado una gramática G y un no terminal de la gramática A, para poderpredecir en cualquier derivación qué regla de A se debe aplicar esnecesario calcular el conjunto de predicción de cada regla de A,PRED(A −→ α):

PRED(A −→ α) =si ε ∈ PRIMEROS(α) entonces

(PRIMEROS(α)− {ε }) ∪ SIGUIENTES(A)si no

PRIMEROS(α)

Dado un no terminal A y un terminal de la entrada t , se aplicará laregla de A que tenga a t en su conjunto de predicción

¿Y si hay másde una regla de A que tenga a t?

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 18 / 41

Page 56: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: conjunto depredicción

Dado una gramática G y un no terminal de la gramática A, para poderpredecir en cualquier derivación qué regla de A se debe aplicar esnecesario calcular el conjunto de predicción de cada regla de A,PRED(A −→ α):

PRED(A −→ α) =si ε ∈ PRIMEROS(α) entonces

(PRIMEROS(α)− {ε }) ∪ SIGUIENTES(A)si no

PRIMEROS(α)

Dado un no terminal A y un terminal de la entrada t , se aplicará laregla de A que tenga a t en su conjunto de predicción ¿Y si hay másde una regla de A que tenga a t?

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 18 / 41

Page 57: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: PRIMEROS

El cálculo del conjunto de PRIMEROS se define formalmente de lasiguiente manera:· PRIMEROS(a) = { a } , si a es un terminal

· PRIMEROS(A) = ∪A→αi PRIMEROS(αi), si A es un no terminal· Para calcular PRIMEROS de una cadena α de terminales y no terminales:

si α es ε , entonces PRIMEROS(α) = {ε }

si α = a1a2 . . . an donde cada ai puede ser un terminal o un no terminalde la gramática:

I Si a1 es un terminal, PRIMEROS(α) = { a1 }I Si a1 es un no terminal, hay que añadir PRIMEROS(a1)− {ε } a

PRIMEROS(α), y si ε ∈ PRIMEROS(a1):F Si n = 1, es decir, α = a1, entonces hay que añadir ε a

PRIMEROS(α)F Si n > 1 entonces hay que añadir PRIMEROS(a2 . . . an) a

PRIMEROS(α)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 19 / 41

Page 58: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: PRIMEROS

El cálculo del conjunto de PRIMEROS se define formalmente de lasiguiente manera:· PRIMEROS(a) = { a } , si a es un terminal· PRIMEROS(A) = ∪A→αi PRIMEROS(αi), si A es un no terminal

· Para calcular PRIMEROS de una cadena α de terminales y no terminales:

si α es ε , entonces PRIMEROS(α) = {ε }

si α = a1a2 . . . an donde cada ai puede ser un terminal o un no terminalde la gramática:

I Si a1 es un terminal, PRIMEROS(α) = { a1 }I Si a1 es un no terminal, hay que añadir PRIMEROS(a1)− {ε } a

PRIMEROS(α), y si ε ∈ PRIMEROS(a1):F Si n = 1, es decir, α = a1, entonces hay que añadir ε a

PRIMEROS(α)F Si n > 1 entonces hay que añadir PRIMEROS(a2 . . . an) a

PRIMEROS(α)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 19 / 41

Page 59: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: PRIMEROS

El cálculo del conjunto de PRIMEROS se define formalmente de lasiguiente manera:· PRIMEROS(a) = { a } , si a es un terminal· PRIMEROS(A) = ∪A→αi PRIMEROS(αi), si A es un no terminal· Para calcular PRIMEROS de una cadena α de terminales y no terminales:

si α es ε , entonces PRIMEROS(α) = {ε }

si α = a1a2 . . . an donde cada ai puede ser un terminal o un no terminalde la gramática:

I Si a1 es un terminal, PRIMEROS(α) = { a1 }I Si a1 es un no terminal, hay que añadir PRIMEROS(a1)− {ε } a

PRIMEROS(α), y si ε ∈ PRIMEROS(a1):F Si n = 1, es decir, α = a1, entonces hay que añadir ε a

PRIMEROS(α)F Si n > 1 entonces hay que añadir PRIMEROS(a2 . . . an) a

PRIMEROS(α)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 19 / 41

Page 60: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: PRIMEROS

El cálculo del conjunto de PRIMEROS se define formalmente de lasiguiente manera:· PRIMEROS(a) = { a } , si a es un terminal· PRIMEROS(A) = ∪A→αi PRIMEROS(αi), si A es un no terminal· Para calcular PRIMEROS de una cadena α de terminales y no terminales:

si α es ε , entonces PRIMEROS(α) = {ε }

si α = a1a2 . . . an donde cada ai puede ser un terminal o un no terminalde la gramática:

I Si a1 es un terminal, PRIMEROS(α) = { a1 }I Si a1 es un no terminal, hay que añadir PRIMEROS(a1)− {ε } a

PRIMEROS(α), y si ε ∈ PRIMEROS(a1):F Si n = 1, es decir, α = a1, entonces hay que añadir ε a

PRIMEROS(α)F Si n > 1 entonces hay que añadir PRIMEROS(a2 . . . an) a

PRIMEROS(α)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 19 / 41

Page 61: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: PRIMEROS

El cálculo del conjunto de PRIMEROS se define formalmente de lasiguiente manera:· PRIMEROS(a) = { a } , si a es un terminal· PRIMEROS(A) = ∪A→αi PRIMEROS(αi), si A es un no terminal· Para calcular PRIMEROS de una cadena α de terminales y no terminales:

si α es ε , entonces PRIMEROS(α) = {ε }

si α = a1a2 . . . an donde cada ai puede ser un terminal o un no terminalde la gramática:

I Si a1 es un terminal, PRIMEROS(α) = { a1 }I Si a1 es un no terminal, hay que añadir PRIMEROS(a1)− {ε } a

PRIMEROS(α), y si ε ∈ PRIMEROS(a1):

F Si n = 1, es decir, α = a1, entonces hay que añadir ε aPRIMEROS(α)

F Si n > 1 entonces hay que añadir PRIMEROS(a2 . . . an) aPRIMEROS(α)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 19 / 41

Page 62: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: PRIMEROS

El cálculo del conjunto de PRIMEROS se define formalmente de lasiguiente manera:· PRIMEROS(a) = { a } , si a es un terminal· PRIMEROS(A) = ∪A→αi PRIMEROS(αi), si A es un no terminal· Para calcular PRIMEROS de una cadena α de terminales y no terminales:

si α es ε , entonces PRIMEROS(α) = {ε }

si α = a1a2 . . . an donde cada ai puede ser un terminal o un no terminalde la gramática:

I Si a1 es un terminal, PRIMEROS(α) = { a1 }I Si a1 es un no terminal, hay que añadir PRIMEROS(a1)− {ε } a

PRIMEROS(α), y si ε ∈ PRIMEROS(a1):F Si n = 1, es decir, α = a1, entonces hay que añadir ε a

PRIMEROS(α)

F Si n > 1 entonces hay que añadir PRIMEROS(a2 . . . an) aPRIMEROS(α)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 19 / 41

Page 63: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: PRIMEROS

El cálculo del conjunto de PRIMEROS se define formalmente de lasiguiente manera:· PRIMEROS(a) = { a } , si a es un terminal· PRIMEROS(A) = ∪A→αi PRIMEROS(αi), si A es un no terminal· Para calcular PRIMEROS de una cadena α de terminales y no terminales:

si α es ε , entonces PRIMEROS(α) = {ε }

si α = a1a2 . . . an donde cada ai puede ser un terminal o un no terminalde la gramática:

I Si a1 es un terminal, PRIMEROS(α) = { a1 }I Si a1 es un no terminal, hay que añadir PRIMEROS(a1)− {ε } a

PRIMEROS(α), y si ε ∈ PRIMEROS(a1):F Si n = 1, es decir, α = a1, entonces hay que añadir ε a

PRIMEROS(α)F Si n > 1 entonces hay que añadir PRIMEROS(a2 . . . an) a

PRIMEROS(α)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 19 / 41

Page 64: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: SIGUIENTES

El cálculo del conjunto de SIGUIENTES de un no terminal A se definede la siguiente manera:

1 Si A es el símbolo inicial de la gramática, añadir $ aSIGUIENTES(A)

2 Sea una regla de la gramática que contiene en su parte derechael no terminal A, B −→ αAβ, donde B es otro no terminal (quepodría ser también A), y α y β son cadenas de terminales y noterminales de la gramática (ambas pueden ser ε ):

1 Añadir PRIMEROS(β)− {ε } a SIGUIENTES(A)2 Si ε ∈ PRIMEROS(β) (o bien β = ε ), entonces hay que añadir los

SIGUIENTES(B) a los SIGUIENTES(A)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 20 / 41

Page 65: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: SIGUIENTES

El cálculo del conjunto de SIGUIENTES de un no terminal A se definede la siguiente manera:

1 Si A es el símbolo inicial de la gramática, añadir $ aSIGUIENTES(A)

2 Sea una regla de la gramática que contiene en su parte derechael no terminal A, B −→ αAβ, donde B es otro no terminal (quepodría ser también A), y α y β son cadenas de terminales y noterminales de la gramática (ambas pueden ser ε ):

1 Añadir PRIMEROS(β)− {ε } a SIGUIENTES(A)2 Si ε ∈ PRIMEROS(β) (o bien β = ε ), entonces hay que añadir los

SIGUIENTES(B) a los SIGUIENTES(A)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 20 / 41

Page 66: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: SIGUIENTES

El cálculo del conjunto de SIGUIENTES de un no terminal A se definede la siguiente manera:

1 Si A es el símbolo inicial de la gramática, añadir $ aSIGUIENTES(A)

2 Sea una regla de la gramática que contiene en su parte derechael no terminal A, B −→ αAβ, donde B es otro no terminal (quepodría ser también A), y α y β son cadenas de terminales y noterminales de la gramática (ambas pueden ser ε ):

1 Añadir PRIMEROS(β)− {ε } a SIGUIENTES(A)

2 Si ε ∈ PRIMEROS(β) (o bien β = ε ), entonces hay que añadir losSIGUIENTES(B) a los SIGUIENTES(A)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 20 / 41

Page 67: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Cálculo formal de la regla a predecir: SIGUIENTES

El cálculo del conjunto de SIGUIENTES de un no terminal A se definede la siguiente manera:

1 Si A es el símbolo inicial de la gramática, añadir $ aSIGUIENTES(A)

2 Sea una regla de la gramática que contiene en su parte derechael no terminal A, B −→ αAβ, donde B es otro no terminal (quepodría ser también A), y α y β son cadenas de terminales y noterminales de la gramática (ambas pueden ser ε ):

1 Añadir PRIMEROS(β)− {ε } a SIGUIENTES(A)2 Si ε ∈ PRIMEROS(β) (o bien β = ε ), entonces hay que añadir los

SIGUIENTES(B) a los SIGUIENTES(A)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 20 / 41

Page 68: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción

A −→ B CA −→ ant A allB −→ big CB −→ bus A bossB −→ εC −→ catC −→ cow

Para poder calcular el conjunto de PRIMEROS de las partes derechasde las reglas, primero se calculan los PRIMEROS de los noterminales:

PRIMEROS(A) = {ant , }PRIMEROS(B) = {big ,bus , ε }PRIMEROS(C) = {cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 21 / 41

Page 69: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción

A −→ B CA −→ ant A allB −→ big CB −→ bus A bossB −→ εC −→ catC −→ cow

Para poder calcular el conjunto de PRIMEROS de las partes derechasde las reglas, primero se calculan los PRIMEROS de los noterminales:

PRIMEROS(A) = {ant , }PRIMEROS(B) = {big ,bus , ε }PRIMEROS(C) = {cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 21 / 41

Page 70: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción

A −→ B CA −→ ant A allB −→ big CB −→ bus A bossB −→ εC −→ catC −→ cow

Para poder calcular el conjunto de PRIMEROS de las partes derechasde las reglas, primero se calculan los PRIMEROS de los noterminales:

PRIMEROS(A) = {ant ,big ,bus , }PRIMEROS(B) = {big ,bus , ε }PRIMEROS(C) = {cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 21 / 41

Page 71: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción

A −→ B CA −→ ant A allB −→ big CB −→ bus A bossB −→ εC −→ catC −→ cow

Para poder calcular el conjunto de PRIMEROS de las partes derechasde las reglas, primero se calculan los PRIMEROS de los noterminales:

PRIMEROS(A) = {ant ,big ,bus ,cat ,cow }PRIMEROS(B) = {big ,bus , ε }PRIMEROS(C) = {cat ,cow }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 21 / 41

Page 72: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (2)

A −→ B CA −→ ant A allB −→ big CB −→ bus A bossB −→ εC −→ catC −→ cow

Como hay una producción que genera ε , tenemos que calcular losSIGUIENTES de cada no terminal:

SIGUIENTES(A) = {all ,boss ,$ }SIGUIENTES(B) = {cat ,cow }SIGUIENTES(C) = {cat ,cow ,all ,boss ,$ }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 22 / 41

Page 73: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (2)

A −→ B CA −→ ant A allB −→ big CB −→ bus A bossB −→ εC −→ catC −→ cow

Como hay una producción que genera ε , tenemos que calcular losSIGUIENTES de cada no terminal:

SIGUIENTES(A) = {all ,boss ,$ }SIGUIENTES(B) = {cat ,cow }SIGUIENTES(C) = {cat ,cow ,all ,boss ,$ }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 22 / 41

Page 74: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {}A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {}C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $

A −→ ant A allant A all $ ant cat all $ emparejar antA all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 75: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {}A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $

A −→ ant A allant A all $ ant cat all $ emparejar antA all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 76: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , }A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $

A −→ ant A allant A all $ ant cat all $ emparejar antA all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 77: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $

A −→ ant A allant A all $ ant cat all $ emparejar antA all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 78: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $

A −→ ant A allant A all $ ant cat all $ emparejar antA all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 79: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A all

ant A all $ ant cat all $ emparejar antA all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 80: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$ ant cat all $ emparejar antA all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 81: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $

emparejar antA all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 82: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar ant

A all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 83: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 84: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $

A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 85: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B C

B C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 86: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 87: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $

B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 88: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ ε

C all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 89: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 90: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$

cat all $

C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 91: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$

cat all $ C −→ cat

cat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 92: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$

cat all $ C −→ catcat all

$ cat all $ emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 93: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$

cat all $ C −→ catcat all

$

cat all $

emparejar catall $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 94: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$

cat all $ C −→ catcat all

$

cat all $ emparejar cat

all $ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 95: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$

cat all $ C −→ catcat all

$

cat all $ emparejar catall

$ all $ emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 96: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$

cat all $ C −→ catcat all

$

cat all $ emparejar catall

$

all $

emparejar all$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 97: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$

cat all $ C −→ catcat all

$

cat all $ emparejar catall

$

all $ emparejar all

$ $ ??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 98: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$

cat all $ C −→ catcat all

$

cat all $ emparejar catall

$

all $ emparejar all

$

$

??OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 99: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA

$

ant cat all $ A −→ ant A allant A all

$

ant cat all $ emparejar antA all

$

cat all $ A −→ B CB C all

$

cat all $ B −→ εC all

$

cat all $ C −→ catcat all

$

cat all $ emparejar catall

$

all $ emparejar all

$

$ ??

OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 100: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA $ ant cat all $ A −→ ant A allant A all $ ant cat all $ emparejar antA all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $ ??

OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 101: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo del cálculo de conjuntos de predicción (3)Los conjuntos de predicción de cada regla son:

A −→ B C {big ,bus , cat , cow } PRIM(BC)A −→ ant A all {ant }B −→ big C {big }B −→ bus A boss {bus }B −→ ε {cat , cow } (PRIM(ε )− {ε }) ∪ SIG(B)C −→ cat {cat }C −→ cow {cow }

Derivación Entrada Regla/acciónA $ ant cat all $ A −→ ant A allant A all $ ant cat all $ emparejar antA all $ cat all $ A −→ B CB C all $ cat all $ B −→ εC all $ cat all $ C −→ catcat all $ cat all $ emparejar catall $ all $ emparejar all$ $

??

OK!!

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 23 / 41

Page 102: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {PRIM(A) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 103: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {PRIM(A) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 104: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , εPRIM(A) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 105: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε } ∪ PRIM(EGC)PRIM(A) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 106: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε } ∪ PRIM(E)− {ε} ∪ PRIM(GC)PRIM(A) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 107: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε } ∪ {e ,g }PRIM(A) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 108: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε ,e ,g }PRIM(A) = {a , ε

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 109: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε ,e ,g }PRIM(A) = {a , ε } ∪ PRIM(DEfG)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 110: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε ,e ,g }PRIM(A) = {a , ε } ∪ PRIM(D)− {ε} ∪ PRIM(EfC)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 111: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε ,e ,g }PRIM(A) = {a , ε } ∪ {d } ∪ PRIM(E)− {ε} ∪ PRIM(fC)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 112: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε ,e ,g }PRIM(A) = {a , ε } ∪ {d } ∪ {e} ∪ PRIM(fC)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 113: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε ,e ,g }PRIM(A) = {a , ε } ∪ {d } ∪ {e} ∪ {f}

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 114: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε ,e ,g }PRIM(A) = {a , ε } ∪ {d ,e , f }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 115: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε , e ,g }PRIM(A) = {a , ε ,d ,e , f }PRIM(S) = PRIM(ABC)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 116: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε , e ,g }PRIM(A) = {a , ε ,d ,e , f }PRIM(S) = PRIM(A)− {ε} ∪ PRIM(BC)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 117: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε , e ,g }PRIM(A) = {a , ε ,d ,e , f }PRIM(S) = {a ,d ,e , f } ∪ PRIM(BC)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 118: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε , e ,g }PRIM(A) = {a , ε ,d ,e , f }PRIM(S) = {a ,d ,e , f } ∪ PRIM(B)− {ε} ∪ PRIM(C)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 119: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε , e ,g }PRIM(A) = {a , ε ,d ,e , f }PRIM(S) = {a ,d ,e , f ,b ,g } ∪ PRIM(C)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 120: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de PRIMEROSS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

PRIM(G) = {g }PRIM(E) = {e , ε }PRIM(D) = {d , ε }PRIM(C) = {c , ε }PRIM(B) = {b , ε , e ,g }PRIM(A) = {a , ε ,d ,e , f }PRIM(S) = {a ,d ,e , f ,b ,g ,c , ε }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 24 / 41

Page 121: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) =SIG(B) =SIG(C) =SIG(D) =SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 122: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) =SIG(B) =SIG(C) =SIG(D) =SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 123: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = PRIM(BC)− {ε} ∪ SIG(S)SIG(B) =SIG(C) =SIG(D) =SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 124: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g } ∪ PRIM(C)− {ε} ∪ {$}SIG(B) =SIG(C) =SIG(D) =SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 125: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) =SIG(C) =SIG(D) =SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 126: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = PRIM(C)− {ε} ∪ SIG(S)SIG(C) =SIG(D) =SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 127: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) =SIG(D) =SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 128: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = SIG(S) ∪ SIG(A) ∪ SIG(B)SIG(D) =SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 129: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$} ∪ {b ,e ,g ,c , $} ∪ {c , $}SIG(D) =SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 130: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) =SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 131: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) = PRIM(EfC)SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 132: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) = PRIM(E)− {ε} ∪ PRIM(fC)SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 133: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) = {e } ∪ {f }SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 134: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) = {e , f }SIG(E) =SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 135: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) = {e , f }SIG(E) = PRIM(fC) ∪ PRIM(GC)SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 136: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) = {e , f }SIG(E) = {f } ∪ {g }SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 137: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) = {e , f }SIG(E) = {f ,g }SIG(G) =

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 138: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) = {e , f }SIG(E) = {f ,g }SIG(G) = PRIM(C)− {ε} ∪ SIG(B)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 139: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) = {e , f }SIG(E) = {f ,g }SIG(G) = {c } ∪ {c , $ }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 140: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de SIGUIENTESS −→ A B CA −→ D E f C | a | εB −→ E G C | b | εC −→ c | εD −→ d | εE −→ e | εG −→ g

SIG(S) = {$}SIG(A) = {b ,e ,g ,c , $}SIG(B) = {c , $}SIG(C) = {$ ,b ,e ,g ,c }SIG(D) = {e , f }SIG(E) = {f ,g }SIG(G) = {c , $ }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 25 / 41

Page 141: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B CA −→ D E f CA −→ aA −→ εB −→ E G CB −→ bB −→ εC −→ cC −→ εD −→ dD −→ εE −→ eE −→ εG −→ g

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 142: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B CA −→ D E f CA −→ a {a }A −→ εB −→ E G CB −→ b {b }B −→ εC −→ c {c }C −→ εD −→ d {d }D −→ εE −→ e {e }E −→ εG −→ g {g }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 143: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B CA −→ D E f CA −→ a {a }A −→ ε SIG(A)B −→ E G CB −→ b {b }B −→ ε SIG(B)C −→ c {c }C −→ ε SIG(C)D −→ d {d }D −→ ε SIG(D)E −→ e {e }E −→ ε SIG(E)G −→ g {g }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 144: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B CA −→ D E f CA −→ a {a }A −→ ε {b , e ,g , c , $}B −→ E G CB −→ b {b }B −→ ε {c , $}C −→ c {c }C −→ ε {$ ,b , e ,g , c }D −→ d {d }D −→ ε {e , f }E −→ e {e }E −→ ε {f ,g }G −→ g {g }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 145: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B CA −→ D E f CA −→ a {a }A −→ ε {b , e ,g , c , $}B −→ E G C PRIM(EGC)B −→ b {b }B −→ ε {c , $}C −→ c {c }C −→ ε {$ ,b , e ,g , c }D −→ d {d }D −→ ε {e , f }E −→ e {e }E −→ ε {f ,g }G −→ g {g }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 146: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B CA −→ D E f CA −→ a {a }A −→ ε {b , e ,g , c , $}B −→ E G C {e ,g }B −→ b {b }B −→ ε {c , $}C −→ c {c }C −→ ε {$ ,b , e ,g , c }D −→ d {d }D −→ ε {e , f }E −→ e {e }E −→ ε {f ,g }G −→ g {g }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 147: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B CA −→ D E f C PRIM(DEfC)A −→ a {a }A −→ ε {b , e ,g , c , $}B −→ E G C {e ,g }B −→ b {b }B −→ ε {c , $}C −→ c {c }C −→ ε {$ ,b , e ,g , c }D −→ d {d }D −→ ε {e , f }E −→ e {e }E −→ ε {f ,g }G −→ g {g }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 148: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B CA −→ D E f C {d , e , f }A −→ a {a }A −→ ε {b , e ,g , c , $}B −→ E G C {e ,g }B −→ b {b }B −→ ε {c , $}C −→ c {c }C −→ ε {$ ,b , e ,g , c }D −→ d {d }D −→ ε {e , f }E −→ e {e }E −→ ε {f ,g }G −→ g {g }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 149: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B C PRIM(ABC)− {ε} ∪ SIG(S)A −→ D E f C {d , e , f }A −→ a {a }A −→ ε {b , e ,g , c , $}B −→ E G C {e ,g }B −→ b {b }B −→ ε {c , $}C −→ c {c }C −→ ε {$ ,b , e ,g , c }D −→ d {d }D −→ ε {e , f }E −→ e {e }E −→ ε {f ,g }G −→ g {g }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 150: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B C {a ,d , e , f ,b ,g , c } ∪ {$}A −→ D E f C {d , e , f }A −→ a {a }A −→ ε {b , e ,g , c , $}B −→ E G C {e ,g }B −→ b {b }B −→ ε {c , $}C −→ c {c }C −→ ε {$ ,b , e ,g , c }D −→ d {d }D −→ ε {e , f }E −→ e {e }E −→ ε {f ,g }G −→ g {g }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 151: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejemplo: cálculo de conjuntos de predicción

S −→ A B C {a ,d , e , f ,b ,g , c , $}A −→ D E f C {d , e , f }A −→ a {a }A −→ ε {b , e ,g , c , $}B −→ E G C {e ,g }B −→ b {b }B −→ ε {c , $}C −→ c {c }C −→ ε {$ ,b , e ,g , c }D −→ d {d }D −→ ε {e , f }E −→ e {e }E −→ ε {f ,g }G −→ g {g }

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 26 / 41

Page 152: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejercicio 1

Calcula los conjuntos de PRIMEROS y SIGUIENTES de los noterminales de la siguiente gramática, y los conjuntos de predicción delas reglas:

S −→ A uno B CS −→ S dosA −→ B C DA −→ A tresA −→ εB −→ D cuatro C tresB −→ εC −→ cinco D BC −→ εD −→ seisD −→ ε

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 27 / 41

Page 153: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejercicio 2

Calcula los conjuntos de PRIMEROS y SIGUIENTES de los noterminales de la siguiente gramática, y los conjuntos de predicción delas reglas:

S −→ A B unoA −→ dos BA −→ εB −→ C DB −→ tresB −→ εC −→ cuatro A BC −→ cincoD −→ seisD −→ ε

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 28 / 41

Page 154: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condición LL(1)¿Qué ocurriría si ...

A −→ α1 {. . . ,a , . . .}A −→ α2 {. . . ,a , . . .}

... aparece el mismo símbolo en dos o más conjuntos de predicción delmismo no terminal?

Evidentemente, cuando en la entrada aparezca elsímbolo a y el analizador tuviera que derivar el no terminal A, no sabríaelegir qué regla aplicar.

Condición LL(1): una gramática G se dice cumple lacondición LL(1), si para todos los no terminales,no existen símbolos comunes en los conjuntosde predicción de sus reglas.

Dicho de otro modo: si existe un símbolo común en los conjuntos de dosreglas del mismo no terminal, se puede decir que la gramática no es LL(1)IMPORTANTE: para poder hacer un análisis sintáctico descendente entiempo lineal es necesario que la gramática sea LL(1)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 29 / 41

Page 155: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condición LL(1)¿Qué ocurriría si ...

A −→ α1 {. . . ,a , . . .}A −→ α2 {. . . ,a , . . .}

... aparece el mismo símbolo en dos o más conjuntos de predicción delmismo no terminal? Evidentemente, cuando en la entrada aparezca elsímbolo a y el analizador tuviera que derivar el no terminal A, no sabríaelegir qué regla aplicar.

Condición LL(1): una gramática G se dice cumple lacondición LL(1), si para todos los no terminales,no existen símbolos comunes en los conjuntosde predicción de sus reglas.

Dicho de otro modo: si existe un símbolo común en los conjuntos de dosreglas del mismo no terminal, se puede decir que la gramática no es LL(1)IMPORTANTE: para poder hacer un análisis sintáctico descendente entiempo lineal es necesario que la gramática sea LL(1)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 29 / 41

Page 156: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condición LL(1)¿Qué ocurriría si ...

A −→ α1 {. . . ,a , . . .}A −→ α2 {. . . ,a , . . .}

... aparece el mismo símbolo en dos o más conjuntos de predicción delmismo no terminal? Evidentemente, cuando en la entrada aparezca elsímbolo a y el analizador tuviera que derivar el no terminal A, no sabríaelegir qué regla aplicar.

Condición LL(1): una gramática G se dice cumple lacondición LL(1), si para todos los no terminales,no existen símbolos comunes en los conjuntosde predicción de sus reglas.

Dicho de otro modo: si existe un símbolo común en los conjuntos de dosreglas del mismo no terminal, se puede decir que la gramática no es LL(1)IMPORTANTE: para poder hacer un análisis sintáctico descendente entiempo lineal es necesario que la gramática sea LL(1)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 29 / 41

Page 157: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condición LL(1)¿Qué ocurriría si ...

A −→ α1 {. . . ,a , . . .}A −→ α2 {. . . ,a , . . .}

... aparece el mismo símbolo en dos o más conjuntos de predicción delmismo no terminal? Evidentemente, cuando en la entrada aparezca elsímbolo a y el analizador tuviera que derivar el no terminal A, no sabríaelegir qué regla aplicar.

Condición LL(1): una gramática G se dice cumple lacondición LL(1), si para todos los no terminales,no existen símbolos comunes en los conjuntosde predicción de sus reglas.

Dicho de otro modo: si existe un símbolo común en los conjuntos de dosreglas del mismo no terminal, se puede decir que la gramática no es LL(1)

IMPORTANTE: para poder hacer un análisis sintáctico descendente entiempo lineal es necesario que la gramática sea LL(1)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 29 / 41

Page 158: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condición LL(1)¿Qué ocurriría si ...

A −→ α1 {. . . ,a , . . .}A −→ α2 {. . . ,a , . . .}

... aparece el mismo símbolo en dos o más conjuntos de predicción delmismo no terminal? Evidentemente, cuando en la entrada aparezca elsímbolo a y el analizador tuviera que derivar el no terminal A, no sabríaelegir qué regla aplicar.

Condición LL(1): una gramática G se dice cumple lacondición LL(1), si para todos los no terminales,no existen símbolos comunes en los conjuntosde predicción de sus reglas.

Dicho de otro modo: si existe un símbolo común en los conjuntos de dosreglas del mismo no terminal, se puede decir que la gramática no es LL(1)IMPORTANTE: para poder hacer un análisis sintáctico descendente entiempo lineal es necesario que la gramática sea LL(1)

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 29 / 41

Page 159: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Características no LL(1)

Realmente, para asegurar que una gramática no es LL(1) se debecomprobar que no cumpla la condición LL(1).

Sin embargo, hayalgunas características que hacen que una gramática no sea LL(1):

1 Recursividad por la izquierda

A −→ A . . .A −→ . . .

2 Factores comunes por la izquierda

A −→ α β1

. . .A −→ α βm

3 Ambigüedad

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 30 / 41

Page 160: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Características no LL(1)

Realmente, para asegurar que una gramática no es LL(1) se debecomprobar que no cumpla la condición LL(1). Sin embargo, hayalgunas características que hacen que una gramática no sea LL(1):

1 Recursividad por la izquierda

A −→ A . . .A −→ . . .

2 Factores comunes por la izquierda

A −→ α β1

. . .A −→ α βm

3 Ambigüedad

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 30 / 41

Page 161: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Características no LL(1)

Realmente, para asegurar que una gramática no es LL(1) se debecomprobar que no cumpla la condición LL(1). Sin embargo, hayalgunas características que hacen que una gramática no sea LL(1):

1 Recursividad por la izquierda

A −→ A . . .A −→ . . .

2 Factores comunes por la izquierda

A −→ α β1

. . .A −→ α βm

3 Ambigüedad

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 30 / 41

Page 162: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Características no LL(1)

Realmente, para asegurar que una gramática no es LL(1) se debecomprobar que no cumpla la condición LL(1). Sin embargo, hayalgunas características que hacen que una gramática no sea LL(1):

1 Recursividad por la izquierda

A −→ A . . .A −→ . . .

2 Factores comunes por la izquierda

A −→ α β1

. . .A −→ α βm

3 Ambigüedad

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 30 / 41

Page 163: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Características no LL(1)

Realmente, para asegurar que una gramática no es LL(1) se debecomprobar que no cumpla la condición LL(1). Sin embargo, hayalgunas características que hacen que una gramática no sea LL(1):

1 Recursividad por la izquierda

A −→ A . . .A −→ . . .

2 Factores comunes por la izquierda

A −→ α β1

. . .A −→ α βm

3 Ambigüedad

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 30 / 41

Page 164: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condición LL(1) y ambigüedad

MUY IMPORTANTE:si una gramática no es LL(1), NO SIEMPRE va a ser ambigua.

La única forma de determinar que una gramática es ambigua esencontrando dos o más árboles de derivación para una cadena.Si una gramática es LL(1), podemos afirmar que no es ambigua.Si no es LL(1), puede que sea ambigua, o puede que no lo sea

A −→ B unoA −→ dosB −→ dos

No es LL(1), y no es ambigua

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 31 / 41

Page 165: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condición LL(1) y ambigüedad

MUY IMPORTANTE:si una gramática no es LL(1), NO SIEMPRE va a ser ambigua.La única forma de determinar que una gramática es ambigua esencontrando dos o más árboles de derivación para una cadena.

Si una gramática es LL(1), podemos afirmar que no es ambigua.Si no es LL(1), puede que sea ambigua, o puede que no lo sea

A −→ B unoA −→ dosB −→ dos

No es LL(1), y no es ambigua

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 31 / 41

Page 166: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condición LL(1) y ambigüedad

MUY IMPORTANTE:si una gramática no es LL(1), NO SIEMPRE va a ser ambigua.La única forma de determinar que una gramática es ambigua esencontrando dos o más árboles de derivación para una cadena.Si una gramática es LL(1), podemos afirmar que no es ambigua.Si no es LL(1), puede que sea ambigua, o puede que no lo sea

A −→ B unoA −→ dosB −→ dos

No es LL(1), y no es ambigua

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 31 / 41

Page 167: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condición LL(1) y ambigüedad

MUY IMPORTANTE:si una gramática no es LL(1), NO SIEMPRE va a ser ambigua.La única forma de determinar que una gramática es ambigua esencontrando dos o más árboles de derivación para una cadena.Si una gramática es LL(1), podemos afirmar que no es ambigua.Si no es LL(1), puede que sea ambigua, o puede que no lo sea

A −→ B unoA −→ dosB −→ dos

No es LL(1), y no es ambigua

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 31 / 41

Page 168: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones LL(k) y LL(*)La condición LL(1) es la condición que deben cumplir lasgramáticas para las que se quiera hacer un análisis lineal deizquierda a derecha (Left-to-right), usando la derivación por laizquierda (Leftmost derivation) y mirando solamente 1 símbolo dela entrada.

Si en lugar de mirar un símbolo de la entrada se miraran ksímbolos (k > 1), sería posible realizar el análisis en tiempo linealpara un conjunto más amplio de gramáticas. Por ejemplo:

A −→ B unoA −→ dosB −→ dos

No es LL(1), pero sí es LL(2).Existe una condición, LL(*), que es más general que la condiciónLL(k), y que permite realizar el análisis lineal con un conjuntotodavía mayor de gramáticas

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 32 / 41

Page 169: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones LL(k) y LL(*)La condición LL(1) es la condición que deben cumplir lasgramáticas para las que se quiera hacer un análisis lineal deizquierda a derecha (Left-to-right), usando la derivación por laizquierda (Leftmost derivation) y mirando solamente 1 símbolo dela entrada.Si en lugar de mirar un símbolo de la entrada se miraran ksímbolos (k > 1), sería posible realizar el análisis en tiempo linealpara un conjunto más amplio de gramáticas.

Por ejemplo:

A −→ B unoA −→ dosB −→ dos

No es LL(1), pero sí es LL(2).Existe una condición, LL(*), que es más general que la condiciónLL(k), y que permite realizar el análisis lineal con un conjuntotodavía mayor de gramáticas

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 32 / 41

Page 170: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones LL(k) y LL(*)La condición LL(1) es la condición que deben cumplir lasgramáticas para las que se quiera hacer un análisis lineal deizquierda a derecha (Left-to-right), usando la derivación por laizquierda (Leftmost derivation) y mirando solamente 1 símbolo dela entrada.Si en lugar de mirar un símbolo de la entrada se miraran ksímbolos (k > 1), sería posible realizar el análisis en tiempo linealpara un conjunto más amplio de gramáticas. Por ejemplo:

A −→ B unoA −→ dosB −→ dos

No es LL(1), pero sí es LL(2).

Existe una condición, LL(*), que es más general que la condiciónLL(k), y que permite realizar el análisis lineal con un conjuntotodavía mayor de gramáticas

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 32 / 41

Page 171: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Condiciones LL(k) y LL(*)La condición LL(1) es la condición que deben cumplir lasgramáticas para las que se quiera hacer un análisis lineal deizquierda a derecha (Left-to-right), usando la derivación por laizquierda (Leftmost derivation) y mirando solamente 1 símbolo dela entrada.Si en lugar de mirar un símbolo de la entrada se miraran ksímbolos (k > 1), sería posible realizar el análisis en tiempo linealpara un conjunto más amplio de gramáticas. Por ejemplo:

A −→ B unoA −→ dosB −→ dos

No es LL(1), pero sí es LL(2).Existe una condición, LL(*), que es más general que la condiciónLL(k), y que permite realizar el análisis lineal con un conjuntotodavía mayor de gramáticas

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 32 / 41

Page 172: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)La recursividad por la izquierda y los factores comunes por laizquierda se pueden eliminar de una gramática sin mucha dificultad.

Sin embargo, la ambigüedad (si se ha detectado) no es fácil deeliminar y requiere un rediseño manual de la gramática. Además, nosiempre que la gramática no es LL(1) es porque es ambigua.

Eliminación de la recursividad por la izquierda:

A −→ A α1. . .A −→ A αnA −→ β1. . .A −→ βm

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 33 / 41

Page 173: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)La recursividad por la izquierda y los factores comunes por laizquierda se pueden eliminar de una gramática sin mucha dificultad.Sin embargo, la ambigüedad (si se ha detectado) no es fácil deeliminar y requiere un rediseño manual de la gramática.

Además, nosiempre que la gramática no es LL(1) es porque es ambigua.

Eliminación de la recursividad por la izquierda:

A −→ A α1. . .A −→ A αnA −→ β1. . .A −→ βm

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 33 / 41

Page 174: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)La recursividad por la izquierda y los factores comunes por laizquierda se pueden eliminar de una gramática sin mucha dificultad.Sin embargo, la ambigüedad (si se ha detectado) no es fácil deeliminar y requiere un rediseño manual de la gramática. Además, nosiempre que la gramática no es LL(1) es porque es ambigua.

Eliminación de la recursividad por la izquierda:

A −→ A α1. . .A −→ A αnA −→ β1. . .A −→ βm

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 33 / 41

Page 175: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)La recursividad por la izquierda y los factores comunes por laizquierda se pueden eliminar de una gramática sin mucha dificultad.Sin embargo, la ambigüedad (si se ha detectado) no es fácil deeliminar y requiere un rediseño manual de la gramática. Además, nosiempre que la gramática no es LL(1) es porque es ambigua.

Eliminación de la recursividad por la izquierda:

A −→ A α1. . .A −→ A αnA −→ β1. . .A −→ βm

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 33 / 41

Page 176: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)La recursividad por la izquierda y los factores comunes por laizquierda se pueden eliminar de una gramática sin mucha dificultad.Sin embargo, la ambigüedad (si se ha detectado) no es fácil deeliminar y requiere un rediseño manual de la gramática. Además, nosiempre que la gramática no es LL(1) es porque es ambigua.

Eliminación de la recursividad por la izquierda:

A −→ A α1 A −→ β1A’. . . . . .A −→ A αn A −→ βmA’A −→ β1 A’ −→ α1A’. . . . . .A −→ βm A’ −→ αnA’

A’ −→ ε

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 33 / 41

Page 177: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)(2)

Ejemplo de eliminación de la recursividad por la izquierda:

E −→ E opsuma TE −→ T

α1 ≡ opsuma Tβ1 ≡ T

E −→ T E’E’ −→ opsuma T E’E’ −→ ε

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 34 / 41

Page 178: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)(2)

Ejemplo de eliminación de la recursividad por la izquierda:

E −→ E opsuma TE −→ T

α1 ≡ opsuma Tβ1 ≡ T

E −→ T E’E’ −→ opsuma T E’E’ −→ ε

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 34 / 41

Page 179: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)(2)

Ejemplo de eliminación de la recursividad por la izquierda:

E −→ E opsuma TE −→ T

α1 ≡ opsuma Tβ1 ≡ T

E −→ T E’E’ −→ opsuma T E’E’ −→ ε

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 34 / 41

Page 180: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)(3)

Eliminación de los factores comunes por la izquierda:

A −→ αβ1. . .A −→ αβm

Ejemplo:

Inst −→ if E then Inst endifInst −→ if E then Inst else Inst endif

Inst −→ if E then Inst Inst’Inst’ −→ endifInst’ −→ else Inst endif

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 35 / 41

Page 181: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)(3)

Eliminación de los factores comunes por la izquierda:

A −→ αβ1 A −→ αA’. . . A’ −→ β1A −→ αβm . . .

A’ −→ βm

Ejemplo:

Inst −→ if E then Inst endifInst −→ if E then Inst else Inst endif

Inst −→ if E then Inst Inst’Inst’ −→ endifInst’ −→ else Inst endif

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 35 / 41

Page 182: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)(3)

Eliminación de los factores comunes por la izquierda:

A −→ αβ1 A −→ αA’. . . A’ −→ β1A −→ αβm . . .

A’ −→ βm

Ejemplo:

Inst −→ if E then Inst endifInst −→ if E then Inst else Inst endif

Inst −→ if E then Inst Inst’Inst’ −→ endifInst’ −→ else Inst endif

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 35 / 41

Page 183: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Transformaciones para conseguir la condición LL(1)(3)

Eliminación de los factores comunes por la izquierda:

A −→ αβ1 A −→ αA’. . . A’ −→ β1A −→ αβm . . .

A’ −→ βm

Ejemplo:

Inst −→ if E then Inst endifInst −→ if E then Inst else Inst endif

Inst −→ if E then Inst Inst’Inst’ −→ endifInst’ −→ else Inst endif

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 35 / 41

Page 184: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Analizador sintáctico descendente recursivo

Una forma muy común de realizar un análisis lineal con unagramática LL(1) es utilizando un analizador sintático descendenterecursivo (ASDR)

Antes de programar el ASDR, es necesario calcular los conjuntosde predicción de todas las reglas y comprobar que la gramáticaes LL(1)En un ASDR, se debe diseñar una función para cada no terminalde la gramáticaSe utiliza una función auxiliar para emparejar terminalesCuando se tiene que derivar un no terminal, se llama a la funciónasociada a ese no terminal, y es la función la que se encarga deanalizar el sublenguaje generado por dicho no terminal

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 36 / 41

Page 185: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Analizador sintáctico descendente recursivo

Una forma muy común de realizar un análisis lineal con unagramática LL(1) es utilizando un analizador sintático descendenterecursivo (ASDR)Antes de programar el ASDR, es necesario calcular los conjuntosde predicción de todas las reglas y comprobar que la gramáticaes LL(1)

En un ASDR, se debe diseñar una función para cada no terminalde la gramáticaSe utiliza una función auxiliar para emparejar terminalesCuando se tiene que derivar un no terminal, se llama a la funciónasociada a ese no terminal, y es la función la que se encarga deanalizar el sublenguaje generado por dicho no terminal

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 36 / 41

Page 186: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Analizador sintáctico descendente recursivo

Una forma muy común de realizar un análisis lineal con unagramática LL(1) es utilizando un analizador sintático descendenterecursivo (ASDR)Antes de programar el ASDR, es necesario calcular los conjuntosde predicción de todas las reglas y comprobar que la gramáticaes LL(1)En un ASDR, se debe diseñar una función para cada no terminalde la gramática

Se utiliza una función auxiliar para emparejar terminalesCuando se tiene que derivar un no terminal, se llama a la funciónasociada a ese no terminal, y es la función la que se encarga deanalizar el sublenguaje generado por dicho no terminal

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 36 / 41

Page 187: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Analizador sintáctico descendente recursivo

Una forma muy común de realizar un análisis lineal con unagramática LL(1) es utilizando un analizador sintático descendenterecursivo (ASDR)Antes de programar el ASDR, es necesario calcular los conjuntosde predicción de todas las reglas y comprobar que la gramáticaes LL(1)En un ASDR, se debe diseñar una función para cada no terminalde la gramáticaSe utiliza una función auxiliar para emparejar terminales

Cuando se tiene que derivar un no terminal, se llama a la funciónasociada a ese no terminal, y es la función la que se encarga deanalizar el sublenguaje generado por dicho no terminal

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 36 / 41

Page 188: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Analizador sintáctico descendente recursivo

Una forma muy común de realizar un análisis lineal con unagramática LL(1) es utilizando un analizador sintático descendenterecursivo (ASDR)Antes de programar el ASDR, es necesario calcular los conjuntosde predicción de todas las reglas y comprobar que la gramáticaes LL(1)En un ASDR, se debe diseñar una función para cada no terminalde la gramáticaSe utiliza una función auxiliar para emparejar terminalesCuando se tiene que derivar un no terminal, se llama a la funciónasociada a ese no terminal, y es la función la que se encarga deanalizar el sublenguaje generado por dicho no terminal

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 36 / 41

Page 189: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Analizador sintáctico descendente recursivo (2)

Ejemplo:

A −→ B unoA −→ dosB −→ tresB −→ cuatro A

public final void A(){if (token.tipo == Token.TRES || token.tipo == Token.CUATRO) {

B();emparejar(Token.UNO);

}else if (token.tipo == Token.DOS) {

emparejar(Token.DOS);}else errorSintaxis(Token.TRES,Token.CUATRO,Token.DOS);

}

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 37 / 41

Page 190: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Analizador sintáctico descendente recursivo (3)class AnalizadorSintactico {...public final void emparejar(int tokEsperado){if (token.tipo == tokEsperado)

token = lexico.getNextToken();else

errorSintaxis(tokEsperado);}

}class Compilador {public void Main(...) {

...AnalizadorLexico al = new AnalizadorLexico(ficheroentrada)AnalizadorSintactico asdr = new AnalizadorSintactico(al);

asdr.A(); // símbolo inicial de la gramáticaasdr.comprobarFinFichero();// if (token.tipo != Token.FINFICHERO)// errorSintaxis(Token.FINFICHERO);

}} Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 38 / 41

Page 191: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejercicio 3Dada la siguiente gramática:

S −→ A B CS −→ D EA −→ dos B tresA −→ εB −→ B cuatro C cincoB −→ εC −→ seis A BC −→ εD −→ uno A ED −→ BE −→ tres

1 Calcula los conjuntos de PRIMEROS de cada no terminal.2 Calcula los conjuntos de SIGUIENTES de cada no terminal.3 Calcula los conjuntos de predicción de cada regla.4 Di si la gramática es LL(1) o no y por qué.5 Escribe la función del no terminal A en un ASDR.Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 39 / 41

Page 192: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejercicio 4Dada la siguiente gramática:

S −→ B unoS −→ dos CS −→ εA −→ S tres B CA −→ cuatroA −→ εB −→ A cinco C seisB −→ εC −→ siete BC −→ ε

1 Calcula los conjuntos de PRIMEROS de cada no terminal.2 Calcula los conjuntos de SIGUIENTES de cada no terminal.3 Calcula los conjuntos de predicción de cada regla.4 Di si la gramática es LL(1) o no y por qué.5 Escribe la función del no terminal B en un ASDR.

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 40 / 41

Page 193: Dept. de Lenguajes y Sistemas Informáticos Universidad de ... · La primera acción de un analizador sintáctico es obtener un token de la entrada, llamando al analizador léxico

Ejercicio 5Dada la siguiente gramática:

S −→ A B CS −→ S unoA −→ dos B CA −→ εB −→ C tresB −→ εC −→ cuatro BC −→ ε

1 Calcula los conjuntos de PRIMEROS de cada no terminal.

2 Calcula los conjuntos de SIGUIENTES de cada no terminal.

3 Calcula los conjuntos de predicción de cada regla.

4 Di si la gramática es LL(1) o no y por qué.

5 Escribe la función del no terminal C en un ASDR.

Procesamiento de Lenguajes Tema 3: Análisis sintáctico descendente 41 / 41