next up previous contents
Next: Introducción a AÏDA Up: A.2 El análisis incremental Previous: Descripción del problema

A.2.2 La recuperación incremental

Se pueden considerar dos casos diferentes:

La recuperación total

Para que la recuperación total sea posible a partir de una posición i en la cadena de entrada es necesario asegurarse de que todas las futuras transiciones que eliminen elementos de la pila no dependan de la parte de la entrada modificada. Esto quiere decir que las modificaciones sólo deben causar perturbaciones locales, es decir, que sólo afectan a ramas interiores del bosque de análisis.

Para que se pueda realizar una recuperación completa a partir del itemset tex2html_wrap_inline13275 correspondiente a la posición i de la entrada es condición suficiente que para cada item tex2html_wrap_inline13683 que cumpla las siguientes condiciones, I sea estable y t<l, siendo l el punto de modificación relativa de w y x. Las condiciones son:

  1. I es el argumento en una transición que elimina elementos de la pila realizada desde un punto en el sufijo de tex2html_wrap_inline13697. Es decir, desde la parte de la entrada que queda más a la derecha que tex2html_wrap_inline13315.
  2. Todas las transiciones que eliminan elementos de la pila y que tienen a I como argumento, hacen la transición a un itemset tex2html_wrap_inline13703 con t<i-1.

A los items que satisfacen las condiciones 1 y 2 se les denomina tex2html_wrap_inline13707 o más simplemente tex2html_wrap_inline13709 cuando no hay confusión posible.

Una condición suficiente para la recuperación total es la siguiente: Dada una cadena tex2html_wrap_inline13627 con tex2html_wrap_inline13629, que tiene alguna modificación con respecto a tex2html_wrap_inline13625, y un punto tex2html_wrap_inline13665 de modificación relativa de w y x, tal que se verifica que tex2html_wrap_inline13723 y

  1. tex2html_wrap_inline13725
  2. tex2html_wrap_inline13727
entonces, desde el punto de vista del reconocedor, tex2html_wrap_inline13729

Esto quiere decir que si las transiciones que eliminan elementos de la pila son las mismas y la porción de texto que falta por analizar es la misma, entonces el proceso de análisis será idéntico a partir de ahí.

Este resultado se puede extender al caso de varias modificaciones simultáneas en la cadena de entrada definiendo un punto recuperado totalmente de una modificacion relativa a w y x como el punto en el proceso de recuperación tal que dicha modificación ha sido totalmente recuperada [Vilares y Dion 94].

Hasta aquí en lo que se refiere al reconocedor. En lo concerniente al analizador sintáctico, se debe encontrar además el alcance de las modificaciones en el bosque compartido inicial, una tarea relativamente sencilla ya que los nodos que se ven afectados por cambios en su estructura son los comunes con el nuevo bosque que tienen al menos un descendiente cambiado con respecto al nuevo desarrollo. Para actualizar uno de estos nodos es suficiente con encontrar sus descendientes estables en el bosque que han sido realmente recalculados y reemplazarlos por la estructura original correspondiente en el bosque de análisis recuperado.

Como sólo se recuperan itemsets completos, este fenómeno está limitado a los items que representan nodos triviales estables para los cuales sus ancestros en el bosque no se calculan en el mismo itemset tex2html_wrap_inline13665 en el que ellos están incluidos. A esos items se les denomina tex2html_wrap_inline13737 o simplemente tex2html_wrap_inline13739 cuando no hay confusión posible.

Con el fin de extender la recuperación total al analizador, se debe asignar tex2html_wrap_inline13741 para todos los tex2html_wrap_inline13743, donde tex2html_wrap_inline13745 y tex2html_wrap_inline13747 representan el mismo nodo en el bosque de análisis, es decir tex2html_wrap_inline13749.

La recuperación parcial

Si en la recuperación total se trataba de recuperar el bosque de análisis a partir de un un cierto itemset, en la recuperación parcial tan sólo se podrán recuperar intervalos sueltos de itemsets. Partiendo otra vez del caso de una modificación simple, diremos que es posible realizar una recuperación parcial del itemset tex2html_wrap_inline13275 al itemset tex2html_wrap_inline13283 cuando cualquier operación que elimina elementos de la pila no depende de las modificaciones realizadas entre tex2html_wrap_inline13755 y tex2html_wrap_inline13757gif.

Por consiguiente, para que tex2html_wrap_inline13275 permita la recuperación parcial a partir de él y hasta tex2html_wrap_inline13283 es suficiente con que se cumpla que para cada item tex2html_wrap_inline13683 que cumple las siguientes condiciones, no existe ninguna transición en tex2html_wrap_inline13765 que elimine elementos de la pila y que tome a I como argumento. Las condiciones son:

  1. I es el argumento en una transición que elimina elementos de la pila desde un sufijo de tex2html_wrap_inline13697.
  2. Todas las transiciones que eliminan elementos de la pila u que toman a I como argumento, retornan a un itemset tex2html_wrap_inline13703 con t < i-1.

El cumplimiento de estas condiciones no implica, sin embargo, la estabilidad del item I, ya que no se tiene en cuenta el pasado del proceso de análisis que representa el back-pointer, como ocurría en el caso de la recuperación total. Formalmente, diremos que un item tex2html_wrap_inline13781 es débilmente estable si y sólo si existe un item tex2html_wrap_inline13783 y se denotará como tex2html_wrap_inline13785. Los items tex2html_wrap_inline13787 y tex2html_wrap_inline13755 no representan necesariamente subárboles equivalentes en el bosque compartido. La relación de inclusión provocada por tex2html_wrap_inline13791 se denota tex2html_wrap_inline13793.

Si consideramos de nuevo la definición de tex2html_wrap_inline13709, podemos concluir que no hay transiciones que eliminen elementos de la pila en tex2html_wrap_inline13797 que tomen un tex2html_wrap_inline13799 como argumento. Desde un punto de vista formal, se puede asegurar que dados:

que verifican tex2html_wrap_inline13813, tal que:

  1. tex2html_wrap_inline13815 tex2html_wrap_inline13817
  2. tex2html_wrap_inline13283 es el primer itemset que aplica una operación pop sobre tex2html_wrap_inline13821

entonces, desde el punto de vista del reconocedor, tex2html_wrap_inline13823 tex2html_wrap_inline13825. Para extender este resultado al bosque de análisis compartido, es suficiente con realizar la asignación tex2html_wrap_inline13741, donde tex2html_wrap_inline13829, para todos los tex2html_wrap_inline13743.


next up previous contents
Next: Introducción a AÏDA Up: A.2 El análisis incremental Previous: Descripción del problema

Miguel A. Alonso Pardo
Thu Nov 20 16:47:01 CET 1997