Compilador Diseo - Analizador descendente


Anuncios

Hemos aprendido en el ltimo captulo de la parte superior de el anlisis tcnica analiza la entrada, y se inicia construccin de un rbol de anlisis sintctico el nodo raz gradualmente movindose hacia abajo a los nodos hoja. Los tipos de arriba abajo se describe a continuacin el anlisis:

De anlisis de arriba hacia abajo

Anlisis ascendencia recursiva

Ascendencia recursiva es una de las principales tcnicas de anlisis que construye el rbol de anlisis sintctico y la parte superior se lee la entrada de izquierda a derecha. Utiliza procedimientos para cada terminal y no terminal entidad. Este anlisis tcnica recursiva analiza la entrada para realizar un anlisis, un rbol que puede requerir o no retroceder. Pero la gramtica asociada a ella (si no cuenta) no puede evitar retrocesos. Una forma de anlisis recursivo de ascendencia que no requiere ningn rastreo se conoce como anlisis predictivo.

Este anlisis se considera tcnica recursiva ya que utiliza libres de contexto gramtica que es de naturaleza recursiva.

Rastreo

Desde arriba los analizadores inicio desde el nodo raz (smbolo de inicio) y coincide con la cadena de entrada contra las normas de produccin para sustituir (si corresponde). Para entender esto, tomar el siguiente ejemplo de CFG:

S  rXd | rZd
X  oa | ea
Z  ai

Para una cadena de entrada: leer, un analizador de arriba a abajo, se comportar como esta:

Se iniciar con la de las normas de produccin y coincidir con su rendimiento en la izquierda de la carta de la entrada, es decir, 'r'. La produccin de S (S rXd) coincide con ella. Por lo tanto, el top-down analizador avanza a la siguiente carta de entrada (es decir 'E' ). El analizador intenta expandir no terminal 'X' y comprueba su produccin desde la izquierda (X oa). Que no se corresponde con el siguiente smbolo de entrada. Por lo tanto, el de arriba a abajo retroceso analizador para obtener la siguiente regla de produccin X, (X ea).

Ahora, el analizador de entrada coincide con todas las letras de forma ordenada. La cadena es aceptada.

Seguimiento Volver Seguimiento Volver Seguimiento Volver Seguimiento Volver

Analizador Predictivo

Analizador sintctico Predictivo recursivo es un analizador ascendencia, que tiene la capacidad de predecir que la produccin se debe usar para sustituir la cadena de entrada. El analizador predictivo no sufren de retroceso.

Para cumplir sus cometidos, el analizador predictivo utiliza un puntero hacia delante, que apunta a la siguiente entrada los smbolos. Para que el analizador de libres, el analizador predictivo pone algunas limitaciones a la gramtica y acepta slo una clase de gramtica conocida como LL(k) gramtica.

Analizador predictivo

Anlisis predictivo utiliza una pila y un anlisis a fin de analizar el cuadro de entrada y generar un anlisis rbol. Tanto la pila y la entrada contiene un smbolo de final $ para indicar que la pila est vaca y la entrada es consumida. El analizador se refiere al anlisis tabla para tomar cualquier decisin sobre la entrada de pila y combinaciones de elementos.

Top-Down Analizador Construccin

Ascendencia recursiva en el anlisis, el analizador puede tener ms de una produccin entre los que elegir para una sola instancia de entrada, mientras que analizador de prediccin, cada paso ha de una produccin ms para elegir. Es posible que haya casos en que no hay produccin de la cadena de entrada, con lo que el procedimiento de anlisis.

LL Analizador

Acepta un analizador LL LL gramtica. LL gramtica es un subconjunto libre de contexto gramtica pero con algunas limitaciones para obtener la versin simplificada, con el fin de lograr una fcil implementacin. LL gramtica se puede aplicar a travs de ambos algoritmos recursivos, de ascendencia o tabla.

LL analizador se denota como LL(k). La primera L en LL(k) es el anlisis de la entrada de izquierda a derecha, la segunda L en LL(k) representa ms a la izquierda de derivacin y k representa el nmero de lecturas. Por lo general k = 1, de modo que LL(k) tambin puede ser escrito como LL(1).

LL Analizador

Algoritmo LL Anlisis

Nos puede adherirse a determinista LL(1) para analizador explicacin, ya que el tamao de la tabla crece de forma exponencial con el valor de k. En segundo lugar, si en la gramtica no es LL(1), a continuacin, por lo general, no es LL(k), para cualquier k.

A continuacin se muestra un algoritmo para LL(1) El anlisis:

Input: 
   string  
   parsing table M for grammar G

Output:
   If  is in L(G) then left-most derivation of ,
   error otherwise.

Initial State : $S on stack (with S being start symbol)
   $ in the input buffer

SET ip to point the first symbol of $.

repeat
   let X be the top stack symbol and a the symbol pointed by ip.

   if X∈ Vt or $
      if X = a
         POP X and advance ip.
      else
         error()
      endif
      
   else	/* X is non-terminal */
      if M[X,a] = X  Y1, Y2,... Yk    
         POP X
         PUSH Yk, Yk-1,... Y1 /* Y1 on top */
         Output the production X  Y1, Y2,... Yk 
      else
         error()
      endif
   endif
until X = $	/* empty stack */

Una gramtica G es LL(1) si A → | se distinguen dos producciones de G:

  • Para terminal, y derivar cadenas comienzan con un.

  • En la mayora de y pueden derivar cadena vaca.

  • Si → t, a continuacin, no se deriva ninguna cadena que empieza con un terminal en SIGA(A).

Advertisements