Page 84 - LENGUAJES FORMALES AUTOMATAS Y COMPILADOS
P. 84

84


                  Analizador  sintáctico  descendente (top-down-parser):  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.

                  Analizador  sintáctico  ascendente (bottom-up-parser):  un  analizador  puede  empezar  con  la
                  entrada e intentar llegar hasta el símbolo inicial, intuitivamente el analizador intenta encontrar los
                  símbolos más pequeños y progresivamente construir la jerarquía de símbolos hasta el inicial, los
                  analizadores LR funcionan así y un ejemplo es el YACC.

                  Proceso de análisis sintáctico LL:

                  Gramáticas independientes del contexto a autómatas de pila que analiza su cadena de entrada
                  marcando antes el fondo de la pila e insertando en la pila el fondo inicial de la gramática. Luego
                  repite los 3 pasos siguientes según sea aplicable:

                      1-  Si la cima de la pila contiene un no terminal de la gramática, reemplace ese no terminal
                         de acuerdo con una de las reglas de reescritura de la gramática.
                      2-  Si la cima de la pila contiene un terminal, elimínelo de la pila a la vez que lee de la entrada
                         el mismo terminal. Si el símbolo de la entrada no equivale al de la cima, se declara la
                         cadena ilegal.
                      3-  Si en la cima de la pila aparece la marca de fondo de pila, elimínela y declare aceptada la
                         porción de la cadena procesada hasta el momento.

                         Este proceso analiza la sintaxis de la cadena de entrada produciendo una derivación por la
                         izquierda conforme lee la cadena de izquierda a derecha. Estos analizadores que trabajan
                         así se conocen como analizadores ll. Primera l denota de left-to-rigth y la segunda leftmost
                         derivation, o sea denota que el objetivo del analizador es producir una derivación por la
                         izquierda.
                  La forma en que se genera el programa es transcribir las transiciones del autómata en sentencias
                  de programa.

                  El problema común en los autómatas de pila, es cuando la gramática que sigue propone más de
                  una forma de reescribir un no terminal. Por esto la actividad básica de un analizador ll es predecir
                  cuál de las distintas reglas de reescritura es que debe usarse, para poder procesar los símbolos de
                  entrada que restan. Este realmente es el problema de estas gramáticas, que deben tener varias
                  opciones o reglas de reescrituras para poder generar más de una cadena, que es el caso de los
                  lenguajes de programación, que contiene más de una cadena. Obviamente las gramáticas libres
                  de contexto que solo ofrece una manera de reescribir cada no terminal, solo puede generar una
                  cadena.

                  A  este  tipo  de  analizador  se  le  conoce  como:  analizador  sintáctico  predictivo.    Este  tipo  de
                  analizador también se ve limitado, en el punto de que no necesariamente podrá determinar que
                  regla  de  derivación  deberá  usar,  conociendo  el  siguiente  símbolo  de  entrada,  es  posible  que
                  requiere conocer los restantes, para lograr hacer una derivación exitosa. Así las cosas, para lograr
                  una rutina determinista de análisis sintáctico, se debe contar con memoria  temporal como para 2
                  símbolos de entrada; conociendo lo que leerá y el estado de la cima puede decidir qué derivación
                  conviene realizar.
   79   80   81   82   83   84   85   86   87   88   89