traductores e interpretadores - ldc noticiasrmonascal/cursos/ci3725_aj12/archivos/clase11.pdf · un...
TRANSCRIPT
TRADUCTORES E INTERPRETADORES
Clase 11: Analizadores Sintácticos Descendentes
Profs. Carlos Pérez y Ricardo Monascal
Agenda
• Analizadores Recursivos Descendentes.
• Análisis Predictivo.
• Analizadores LL(1).
• Analizadores LL(k) y LL(*).
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Recordemos los árboles de derivación de una gramática.
– ¿Cuántos árboles de derivación diferentes puede tener una frase?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Recordemos los árboles de derivación de una gramática.
– ¿Cuántos árboles de derivación diferentes puede tener una frase?
– ¿Qué ocurría cuando había mas de una?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Recordemos los árboles de derivación de una gramática.
– ¿Cuántos árboles de derivación diferentes puede tener una frase?
– ¿Qué ocurría cuando había mas de una?
• ¡Ambigüedad!
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Recordemos los árboles de derivación de una gramática.
– ¿Cuántos árboles de derivación diferentes puede tener una frase?
– ¿Qué ocurría cuando había mas de una?
• ¡Ambigüedad!
– ¿En que orden expandimos los símbolos no-terminales?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Recordemos los árboles de derivación de una gramática.
– ¿Cuántos árboles de derivación diferentes puede tener una frase?
– ¿Qué ocurría cuando había mas de una?
• ¡Ambigüedad!
– ¿En que orden expandimos los símbolos no-terminales?
• ¿Realmente importa?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Si siempre escogemos el símbolo no-terminal mas derecho, tendremos una derivación más derecha.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Si siempre escogemos el símbolo no-terminal mas derecho, tendremos una derivación más derecha.
• Si siempre escogemos el símbolo no-terminal mas izquierdo, tendremos una derivación más izquierda.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Si siempre escogemos el símbolo no-terminal mas derecho, tendremos una derivación más derecha.
• Si siempre escogemos el símbolo no-terminal mas izquierdo, tendremos una derivación más izquierda.
– Y estas son las que nos interesan en esta ocasión.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• ¿Cómo podemos construir un reconocedor para frases, dada una Gramática Libre de Contexto?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• ¿Cómo podemos construir un reconocedor para frases, dada una Gramática Libre de Contexto?
– Una forma es realizando la traducción explícitamente a un Autómata de Pila.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• ¿Cómo podemos construir un reconocedor para frases, dada una Gramática Libre de Contexto?
– Una forma es realizando la traducción explícitamente a un Autómata de Pila.
– Otra forma es a través de un Analizador Recursivo Descendente.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• ¿Cómo podemos construir un reconocedor para frases, dada una Gramática Libre de Contexto?
– Una forma es realizando la traducción explícitamente a un Autómata de Pila.
– Otra forma es a través de un Analizador Recursivo Descendente.
– La clave está en ver cada símbolo no terminal como una función que:
• Recibe una frase.
• Intenta reconocer un prefijo de la frase.
• Devuelve el residual (sobrante) de la frase.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Ejemplo:
Profs. Carlos Pérez y Ricardo Monascal
c
E
EE
EEE
|
)(|
*|
Analizadores Recursivos Descendentes
• Ejemplo:
Profs. Carlos Pérez y Ricardo Monascal
c
E
EE
EEE
|
)(|
*|
String E (String frase) { String tmp; if (match(frase[0], ‘(’)) tmp = E(frase.substring(1)); if (match(tmp[0], ‘)’)) return tmp.substring(1); if (match(tmp[0], ‘c’)) return temp.substring(1); tmp = E(frase); if (match(tmp[0], ‘+’)) return E(tmp.substring(1)); else if (match(tmp[0], ‘*’)) return E(tmp.substring(1)); errorHandler(); }
EN JAVA
Analizadores Recursivos Descendentes
• Ejemplo:
¿Qué problema tiene la función E?
Profs. Carlos Pérez y Ricardo Monascal
c
E
EE
EEE
|
)(|
*|
String E (String frase) { String tmp; if (match(frase[0], ‘(’)) tmp = E(frase.substring(1)); if (match(tmp[0], ‘)’)) return tmp.substring(1); if (match(tmp[0], ‘c’)) return temp.substring(1); tmp = E(frase); if (match(tmp[0], ‘+’)) return E(tmp.substring(1)); else if (match(tmp[0], ‘*’)) return E(tmp.substring(1)); errorHandler(); }
EN JAVA
Analizadores Recursivos Descendentes
• Para poder implementar un buen Analizador Recursivo Descendente, debe pedirse que la gramática no tenga recursión izquierda.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Para poder implementar un buen Analizador Recursivo Descendente, debe pedirse que la gramática no tenga recursión izquierda.
– ¿Siempre se puede llevar una Gramática Libre de Contexto a una equivalente, pero sin recursión izquierda?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Para poder implementar un buen Analizador Recursivo Descendente, debe pedirse que la gramática no tenga recursión izquierda.
– ¿Siempre se puede llevar una Gramática Libre de Contexto a una equivalente, pero sin recursión izquierda?
– ¡Si!
Profs. Carlos Pérez y Ricardo Monascal
m
nAAA
|...||
|...|
1
1
|'|...|''
'|...|'
1
1
AAA
AAA
n
m
Analizadores Recursivos Descendentes
• Para poder implementar un buen Analizador Recursivo Descendente, debe pedirse que la gramática no tenga recursión izquierda.
– ¿Siempre se puede llevar una Gramática Libre de Contexto a una equivalente, pero sin recursión izquierda?
– ¡Si!
– ¿Y si le recursión es indirecta?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores Recursivos Descendentes
• Para poder implementar un buen Analizador Recursivo Descendente, debe pedirse que la gramática no tenga recursión izquierda.
– ¿Siempre se puede llevar una Gramática Libre de Contexto a una equivalente, pero sin recursión izquierda?
– ¡Si!
– ¿Y si le recursión es indirecta?
– Les queda como ejercicio.
Profs. Carlos Pérez y Ricardo Monascal
Análisis Predictivo
• Los Analizadores Recursivos Descendentes son fáciles de implementar.
– Sin embargo, pueden ser ineficientes.
Profs. Carlos Pérez y Ricardo Monascal
Análisis Predictivo
• Los Analizadores Recursivos Descendentes son fáciles de implementar.
– Sin embargo, pueden ser ineficientes.
– Posiblemente tienen que realizar backtracking.
Profs. Carlos Pérez y Ricardo Monascal
Análisis Predictivo
• Los Analizadores Recursivos Descendentes son fáciles de implementar.
– Sin embargo, pueden ser ineficientes.
– Posiblemente tienen que realizar backtracking.
• ¿Y si pudiéramos usar algún tipo de información adicional que permita eliminar la posibilidad de backtracking?
– Aquí entra el análisis predictivo.
Profs. Carlos Pérez y Ricardo Monascal
Análisis Predictivo
• La idea poder ver algunos símbolos de la frase por adelantado, para ayudar a tomar una decisión al analizador sobre el camino a tomar.
Profs. Carlos Pérez y Ricardo Monascal
Análisis Predictivo
• La idea poder ver algunos símbolos de la frase por adelantado, para ayudar a tomar una decisión al analizador sobre el camino a tomar.
– A estos adelantos, les llamaremos Look-ahead’s.
– Cada regla de la Gramática tendrá uno.
Profs. Carlos Pérez y Ricardo Monascal
Análisis Predictivo
• La idea poder ver algunos símbolos de la frase por adelantado, para ayudar a tomar una decisión al analizador sobre el camino a tomar.
– A estos adelantos, les llamaremos Look-ahead’s.
– Cada regla de la Gramática tendrá uno.
– Se definirán a partir de dos conjuntos especiales para cada símbolo:
• FIRSTk : Primeros k símbolos terminales que puede generar el símbolo.
• FOLLOWk: Primeros k símbolos terminales que pueden generarse, una vez se haya terminado de expandir el símbolo en cuestión.
Profs. Carlos Pérez y Ricardo Monascal
Análisis Predictivo
Profs. Carlos Pérez y Ricardo Monascal
• FIRST:
))())()...((:...:...,(
))(::(
}){)(::(
111 AFIRSTYFIRSTYFIRSTtruncPYYAYYA
AFIRSTPAA
aaFIRSTaa
mkkkmm
k
k
Análisis Predictivo
Profs. Carlos Pérez y Ricardo Monascal
• FIRST:
• FOLLOW:
))()(
:)()(,:,,,(
))()(
:)(,:,,,(
)($
*
*
BFOLLOWAFOLLOW
PBAFIRSTVVBBA
BFOLLOWFIRST
PBAVVBBA
SFOLLOW
kk
kk
))())()...((:...:...,(
))(::(
}){)(::(
111 AFIRSTYFIRSTYFIRSTtruncPYYAYYA
AFIRSTPAA
aaFIRSTaa
mkkkmm
k
k
Análisis Predictivo
Profs. Carlos Pérez y Ricardo Monascal
• Look-ahead:
)))().(()(
:)(:,( *
AFOLLOWFIRSTtruncALookAhead
PAVA
kkkk
Analizadores LL(1)
• Con un look-ahead de tamaño k podemos saber que frases de tamaño k espera una regla para usarla.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• Con un look-ahead de tamaño k podemos saber que frases de tamaño k espera una regla para usarla.
• Vamos a usar los look-ahead para construir un autómata que realice el reconocimiento de manera eficiente…
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• Con un look-ahead de tamaño k podemos saber que frases de tamaño k espera una regla para usarla.
• Vamos a usar los look-ahead para construir un autómata que realice el reconocimiento de manera eficiente…
– … ¡Y es determinista!
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• La idea del analizador LL(k) es:
– Construir un reconocedor descendente.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• La idea del analizador LL(k) es:
– Construir un reconocedor descendente.
– Tanto con los siguientes k símbolos como con LookAheadk, determinar la regla a tomar en cada paso.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• La idea del analizador LL(k) es:
– Construir un reconocedor descendente.
– Tanto con los siguientes k símbolos como con LookAheadk, determinar la regla a tomar en cada paso.
• Antes que nada, limitaremos en 1 la cantidad de caracteres a leer.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• La idea del analizador LL(k) es:
– Construir un reconocedor descendente.
– Tanto con los siguientes k símbolos como con LookAheadk, determinar la regla a tomar en cada paso.
• Antes que nada, limitaremos en 1 la cantidad de caracteres a leer.
– Luego veremos el impacto que acarrea el caso general.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• ¿Cómo construir un analizador LL(1)?
– Necesitaremos construir el mecanismo de predicción.
– Para eso usaremos una tabla, llamada reglas.
• Las filas corresponderán a símbolos no terminales.
• Las columnas corresponderán a símbolos terminales.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• ¿Cómo construir un analizador LL(1)?
Dada una regla de la forma :
– Queremos saber que reglas aplicar dado el inicio de la entrada.
Profs. Carlos Pérez y Ricardo Monascal
)],[:)(:( 1 AaAreglasFIRSTaa
A
Analizadores LL(1)
• ¿Cómo construir un analizador LL(1)?
Dada una regla de la forma :
– Ahora, si , usaremos los símbolos que siguen a α.
Profs. Carlos Pérez y Ricardo Monascal
A
)(1 FIRST
)],[:
)()(:( 11
AbAreglas
FOLLOWbFIRSTb
Analizadores LL(1)
• ¿Cómo construir un analizador LL(1)?
Dada una regla de la forma :
– Ahora, si , usaremos los símbolos que siguen a α.
Profs. Carlos Pérez y Ricardo Monascal
)],[:
)()(:( 11
AbAreglas
FOLLOWbFIRSTb
A
¿Y $?
)(1 FIRST
Analizadores LL(1)
• ¿Cómo construir un analizador LL(1)?
Dada una regla de la forma :
– Ahora, si , usaremos los símbolos que siguen a α.
Profs. Carlos Pérez y Ricardo Monascal
A
)(1 FIRST
)],[:
)()(:{$}( 11
AbAreglas
FOLLOWbFIRSTb
Analizadores LL(1)
• ¿Cómo construir un analizador LL(1)?
Dada una regla de la forma :
– Ahora, si , usaremos los símbolos que siguen a α.
¡MUCHO MEJOR!
Profs. Carlos Pérez y Ricardo Monascal
)],[:
)()(:{$}( 11
AbAreglas
FOLLOWbFIRSTb
A
)(1 FIRST
Analizadores LL(1)
• Aplicando esos pasos, se construye lo que es la tabla de reconocimiento LL(1).
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• Aplicando esos pasos, se construye lo que es la tabla de reconocimiento LL(1).
• Lo único que falta es... ¿cómo usar la tabla para poder reconocer una frase?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• Un analizador LL(1) está compuesto por:
– Una pila que contendrá símbolos de la gramática.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• Un analizador LL(1) está compuesto por:
– Una pila que contendrá símbolos de la gramática.
– El sufijo de la frase original que queda por leer.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• Un analizador LL(1) está compuesto por:
– Una pila que contendrá símbolos de la gramática.
– El sufijo de la frase original que queda por leer.
– La tabla de reconocimiento construida en el paso anterior.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• Un analizador LL(1) está compuesto por:
– Una pila que contendrá símbolos de la gramática.
– El sufijo de la frase original que queda por leer.
– La tabla de reconocimiento construida en el paso anterior.
– Un mecanismo de salida, que imprima que producción se aplicó en el paso correspondiente.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• La máquina comenzará con la siguiente configuración:
– La máquina comienza con el símbolo inicial de la gramática empilada.
– Se comienza con la frase completa.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• La máquina comenzará con la siguiente configuración:
– La máquina comienza con el símbolo inicial de la gramática empilada.
– Se comienza con la frase completa.
¡A RECONOCERRRRRRRRR!
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• Considere X como el tope de la pila y a el símbolo inicial de la frase.
– Si X es un símbolo no terminal, se consulta la casilla reglas[X,a].
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(1)
• Considere X como el tope de la pila y a el símbolo inicial de la frase.
– Si X es un símbolo no terminal, se consulta la casilla reglas[X,a].
– Si hay una regla, , entonces:
• Se desempila X.
• Se empila Yn…Y2Y1, tal que Y1 quede en el tope de la pila.
• Se imprime la producción resultante.
Profs. Carlos Pérez y Ricardo Monascal
nYYYX 2`1
Analizadores LL(1)
• Considere X como el tope de la pila y a el símbolo inicial de la frase.
– Si X es un símbolo no terminal, se consulta la casilla reglas[X,a].
– Si hay una regla, , entonces:
• Se desempila X.
• Se empila Yn…Y2Y1, tal que Y1 quede en el tope de la pila.
• Se imprime la producción resultante.
– Si no, se tranca la máquina rechazando la palabra.
Profs. Carlos Pérez y Ricardo Monascal
nYYYX 2`1
Analizadores LL(1)
• Considere X como el tope de la pila y a el símbolo inicial de la frase.
– Si X = a, el símbolo del tope de la pila coincide con el elemento apuntado, por lo que se desempila X y se consume un símbolo de la entrada.
– Si X = $ y a = ⊥, se detiene la máquina, aceptando la frase.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Observe que, aunque el uso de FIRST1 y FOLLOW1 está explícito en las láminas anteriores, es equivalente a usar LookAhead1.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Observe que, aunque el uso de FIRST1 y FOLLOW1 está explícito en las láminas anteriores, es equivalente a usar LookAhead1.
• Ahora, considere el caso general.
– ¿Cómo funcionaría?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Observe que, aunque el uso de FIRST1 y FOLLOW1 está explícito en las láminas anteriores, es equivalente a usar LookAhead1.
• Ahora, considere el caso general.
– ¿Cómo funcionaría?
– Tomaría la decisión con los k primeros símbolos de lo que queda de entrada, considerando LookAheadk.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Observe que, aunque el uso de FIRST1 y FOLLOW1 está explícito en las láminas anteriores, es equivalente a usar LookAhead1.
• Ahora, considere el caso general.
– ¿Cómo funcionaría?
– Tomaría la decisión con los k primeros símbolos de lo que queda de entrada, considerando LookAheadk.
• ¿Tiene sentido hablar de un analizador LL(0)?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Ahora, considere el caso general.
– Tomaría la decisión con los k primeros símbolos de lo que queda de entrada, considerando LookAheadk.
• ¿Cómo sería el tamaño de la tabla de reconocimiento?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Ahora, considere el caso general.
– Tomaría la decisión con los k primeros símbolos de lo que queda de entrada, considerando LookAheadk.
• ¿Cómo sería el tamaño de la tabla de reconocimiento?
– ¡Explosión exponencial de espacio!
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Ahora, considere el caso general.
– Tomaría la decisión con los k primeros símbolos de lo que queda de entrada, considerando LookAheadk.
• ¿Cómo sería el tamaño de la tabla de reconocimiento?
– ¡Explosión exponencial de espacio!
– ¿Y cómo marcarían el final de la entrada?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• ¿Será que toda gramática genera un lenguaje LL(1)?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• ¿Será que toda gramática genera un lenguaje LL(1)?
– ¿Y uno LL(k)?
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• ¿Será que toda gramática genera un lenguaje LL(1)?
– ¿Y uno LL(k)?
• Una gramática no es LL(k) si presenta algún conflicto.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Un conflicto en una gramática LL(k) surge cuando existen dos reglas con mismo símbolo no terminal a izquierda que compartan algún elemento en sus look-ahead.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Un conflicto en una gramática LL(k) surge cuando existen dos reglas con mismo símbolo no terminal a izquierda que compartan algún elemento en sus look-ahead.
– Aumentando la k, se puede solventar el conflicto.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Un conflicto en una gramática LL(k) surge cuando existen dos reglas con mismo símbolo no terminal a izquierda que compartan algún elemento en sus look-ahead.
– Aumentando la k, se puede solventar el conflicto.
Profs. Carlos Pérez y Ricardo Monascal
¡PERO NO ES
SEGURO!
Analizadores LL(k) y LL(*)
• No todas las gramáticas pueden ser LL(k) para cualquier k.
– Las que si lo son, tienen un k mínimo que garantiza que la gramática sea LL.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• No todas las gramáticas pueden ser LL(k) para cualquier k.
– Las que si lo son, tienen un k mínimo que garantiza que la gramática sea LL.
– … ¡pero el caso que se necesiten los k símbolos en el look-ahead ocurre poco!
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• No todas las gramáticas pueden ser LL(k) para cualquier k.
– Las que si lo son, tienen un k mínimo que garantiza que la gramática sea LL.
– … ¡pero el caso que se necesiten los k símbolos en el look-ahead ocurre poco!
• Para eso se introduce un grupo de analizadores sintácticos con poder…
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• No todas las gramáticas pueden ser LL(k) para cualquier k.
– Las que si lo son, tienen un k mínimo que garantiza que la gramática sea LL.
– … ¡pero el caso que se necesiten los k símbolos en el look-ahead ocurre poco!
• Para eso se introduce un grupo de analizadores sintácticos con poder…
¡Los analizadores LL(*)!
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Un analizador LL(*) funciona de la siguiente forma:
1. Se intenta resolver la regla con look-ahead 1.
2. Si no, entonces aumenta el look-ahead al siguiente umbral (la regla que requiera un look-ahead mayor).
• Si se consigue una regla, se aplica el siguiente paso.
• Si no, vuelve al paso 2.
• Este manejo de look-aheads se hace con un Autómata Finito Determinista.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Un analizador LL(*) no necesita definir un k.
– El mismo generador reconoce cual es el k mínimo que se necesita.
– El tamaño de la predicción varía dependiendo de las reglas.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Un analizador LL(*) no necesita definir un k.
– El mismo generador reconoce cual es el k mínimo que se necesita.
– El tamaño de la predicción varía dependiendo de las reglas.
• Es usado en la herramienta de generadores de reconocedores ANTLR.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Con esto, estudiamos la familia de los Analizadores Sintácticos Descendientes.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Con esto, estudiamos la familia de los Analizadores Sintácticos Descendientes.
• Existen otra familia de Analizadores Sintácticos...
– … los Analizadores Sintácticos Ascendentes.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Con esto, estudiamos la familia de los Analizadores Sintácticos Descendientes.
• Existen otra familia de Analizadores Sintácticos...
– … los Analizadores Sintácticos Ascendentes.
• Estos Analizadores los estudiaremos en la próxima clase.
Profs. Carlos Pérez y Ricardo Monascal
Analizadores LL(k) y LL(*)
• Con esto, estudiamos la familia de los Analizadores Sintácticos Descendientes.
• Existen otra familia de Analizadores Sintácticos...
– … los Analizadores Sintácticos Ascendentes.
• Estos Analizadores los estudiaremos en la próxima clase.
Profs. Carlos Pérez y Ricardo Monascal