Vous êtes sur la page 1sur 7

ANÁLISIS SINTÁCTICO DESCENDENTE

Un analizador puede empezar con el símbolo inicial e intentar transformarlo en


la entrada, intuitivamente esto sería ir dividiendo la entrada progresivamente en
partes cada vez más pequeñas, de esta forma funcionan los analizadores LL,
un ejemplo es el javacc.

El análisis sintáctico descendente (ASD) intenta encontrar entre las


producciones de la gramática la derivación por la izquierda del símbolo inicial
para una cadena de entrada.

 Análisis sintáctico descendente.


 Partir del axioma de la gramática.
 Escoger reglas gramaticales.
 Hacer derivaciones por la izquierda.
 Procesar la entrada de izquierda a derecha.
 Obtener el árbol de análisis sintáctico o error.

ANALIZADOR CON RETROCESO

El análisis sintáctico descendente (ASD) intenta encontrar entre las


producciones de la gramática la derivación por la izquierda del símbolo inicial
para una cadena de entrada.

Ejemplo:
Analizar la cadena de entrada “cad” dada la gramática siguiente:

 “cad”, se toma la primera producción

 “cad”, se toma la segunda producción.


 siguiente hoja del árbol A → cabd

Autor: Carlos Fabian Vivanco Ingeniería en Sistemas


 “cad” se compara con la siguiente hoja del árbol etiquetada con “b”.
 Como no concuerda, se indica el error y se vuelve a A para ver si hay
otra alternativa no intentada.

 “cad”, se toma la siguiente alternativa que comienza por a.


 siguiente hoja del árbol A, → cad

 “cad”, coincide d con d → análisis exitoso

Autor: Carlos Fabian Vivanco Ingeniería en Sistemas


Análisis Sintáctico Descendente con Predictivo

El analizador debe realizar la previsión de la regla a aplicar sólo con ver el


primer símbolo que produce para que el algoritmo tenga una complejidad
lineal.

Ejemplo:

. Sent if Express then Sent


. Sent while Express do sent
. Sent begin Sent end

Existe sólo una posibilidad de derivación, según que el primer símbolo que
haya en la entrada sea un if, while o begin.

Análisis Sintáctico Descendente con Predictivo

Las gramáticas que son susceptibles de ser analizadas sintácticamente de


forma descendente mediante un análisis predictivo y consultando un
únicamente un símbolo de entrada pertenecen al grupo LL(1).
A partir de gramáticas LL(1) se pueden construir analizadores sintácticos
descendentes predictivos (ASDP), que son ASD sin retroceso.

ANALIZADOR SINTÁCTICO ASCENDENTE


El objetivo de un análisis ascendente consiste en construir el árbol sintáctico
desde abajo hacia arriba, esto es, desde los tokens hacia el axioma inicial, lo
cual disminuye el número de reglas mal aplicadas con respecto al caso
descendente (si hablamos del caso con retroceso) o amplía el número de
gramáticas susceptibles de ser analizadas (si hablamos del caso LL(1)).
Tanto si hay retroceso como si no, en un momento dado, la cadena de entrada
estará dividida en dos partes, denominadas α y β:

 β: representa el trozo de la cadena de entrada (secuencia de tokens) por


consumir: β Є T* . Coincidirá siempre con algún trozo de la parte
derecha de la cadena de entrada. Como puede suponerse, inicialmente
β coincide con la cadena a reconocer al completo (incluido el EOF del
final).

 α: coincidirá siempre con el resto de la cadena de entrada, trozo al que


se habrán aplicado algunas reglas de producción en sentido inverso: α Є
(N U T)*

Se construye el árbol de análisis sintáctico de la cadena de entrada desde las


hojas hasta la raíz. En las hojas tenemos la cadena a analizar (los símbolos
terminales) que se intentan reducir al axioma, que se encontrar en la raíz, si la
cadena es correcta sintácticamente.

Autor: Carlos Fabian Vivanco Ingeniería en Sistemas


¿Cómo construir el árbol?
Se trata de desplazarse en la entrada hasta encontrar una subcadena de
símbolos que represente la parte derecha de una producción, en ese momento
sustituimos esa subcadena por el no-terminal de la parte izquierda
correspondiente de la producción, la reducimos.

Ejemplo: Supongamos la siguiente gramática que permite generar expresiones


aritméticas donde aparece el operador suma y potencia y combinar números e
identificadores.

 Modo de operación del análisis ascendente:


 De forma esquemática un analizador sintáctico consta de:

 La entrada formada por la serie de componentes léxicos a reconocer.

Autor: Carlos Fabian Vivanco Ingeniería en Sistemas


Un programa conductor que lee tokens de la cadena de entrada de uno en uno
y utiliza una pila para almacenar los símbolos que va reconociendo y los
estados por los que pasa el analizador.

Una pila. El contenido de la pila es de la forma. Los símbolos terminales se


introducen en la pila mediante desplazamientos de la cadena de entrada a la
pila, los no-terminales se apilan como resultado de hacer una reducción.

Salida: la derivación más a la derecha de la cadena de entrada en orden


inverso (de abajo hacia arriba).

Autor: Carlos Fabian Vivanco Ingeniería en Sistemas


Diferencia entre Análisis Sintáctico Descendente Análisis Sintáctico
Ascendente
La diferencia es que el Analizador Sintáctico Descendente se hace la
derivación por la izquierda y en el Analizador Sintáctico Ascendente se
construyen el árbol Sintáctico de las hojas hacia la raíz

Análisis Sintáctico Descendente:

Autor: Carlos Fabian Vivanco Ingeniería en Sistemas


Análisis Sintáctico Ascendente:

Fuente:

 Departamento de Informática de la Universidad de Oviedo España:


http://www.di.uniovi.es/procesadores/Apuntes/Sintactico/CuadernoSintac
tico.PDF
 http://ants.dif.um.es/staff/juanbot/traductores/files/20022003/tema4.pdf
 http://ants.dif.um.es/staff/juanbot/traductores/files/20022003/tema5.pdf

Autor: Carlos Fabian Vivanco Ingeniería en Sistemas

Vous aimerez peut-être aussi