La siguiente fase en la construccin del analizador es la fase de
anlisis sintctico. Esta toma como entrada el flujo de terminales y
construye como salida el rbol de anlisis sintctico abstracto. El rbol de anlisis sintctico abstracto es una representacin compactada del rbol de anlisis sintctico concreto que contiene la misma informacin que ste. Existen diferentes mtodos de anlisis sintctico. La mayora caen en una de dos categoras: ascendentes y descendentes.
Los ascendentes construyen el rbol desde las hojas hacia la raz. Los descendentes lo hacen en modo inverso. El que describiremos aqu es uno de los mas sencillos: se denomina mtodo de anlisis descendente recursivo.
La idea del anlisis sintctico descendente es muy simple. observamos la regla gramatical para un no terminal A como un definicin para un procedimiento que reconocer una A. El lado derecho de la regla gramatical para A especifica la estructura del cdigo para este procedimiento: la secuencia de terminales y no terminales es una seleccin corresponde a concordancias de la entrada y llamadas a otros procedimientos, mientras que las selecciones corresponden a las alternativas(sentencias case o ir) dentro del cdigo. Como primer ejemplo consideramos la gramtica siguiente:
exp exp opsuma term| term opsuma + | - term term opmult factor| factor opmult * factor (exp) | nmero Un programa de anlisis sintctico descendente recursivo consiste en un conjunto de procedimientos, uno para cada no terminal. La ejecucin empieza con el procedimiento para el smbolo inicial, que se detiene y anuncia que tuvo xito si el cuerpo de su procedimiento explora toda la cadena completa de entrada.
se puede considerar el dar como un intento de encontrar una derivacin por la izquierda para una cadena de entrada.
tambin se puede considerar como un intento de construir un rbol de anlisis sintctico para la entrada comenzando desde la raz y creando los nodos del rbol en orden previo.
Cada smbolo no terminal genera una funcin
En esta funcin se selecciona la regla de produccin a ejecutar en funcin del valor del siguiente token.
La pila se sustituye implcitamente por la pila de llamadas
Este Analizador Sintctico Recursivo Descendente realiza las siguientes acciones:
Establece la produccin a utilizar analizando el smbolo terminal de entrada. Para cada no terminal, se llama a un mtodo que esta relacionado con este. Una gramtica recursiva por la izquierda puede hacer que un analizador sintctico descendente recesivo, incluso uno con retroceso, entre en un lazo infinito. Es decir, cuando se intenta expedir a, puede que de nuevo se est intentando expandir a sin hacer consumido ningn smbolo de entrada.