Como todo analizador sintáctico de contexto libre, la misión de ICE es analizar
sentencias de un lenguaje generado por una gramática
donde N es el conjunto de símbolos no terminales,
es el conjunto de terminales, P son las reglas y S el el símbolo inicial.
El modelo operacional es el de un traductor a pila o PDT en el cual a partir de una
configuración inicial (estado inicial, pila vacía, cadena de entrada
completa y cadena de salida vacía) se van aplicando transiciones hasta
alcanzar una configuración final (estado final y/o pila vacía,
nada por analizar en la cadena de entrada y cadena de salida completa) que representa
el resultado de un proceso de computación con éxito. Una sentencia ambigua
para la gramática
provocará la existencia de varios caminos
(secuencias de transiciones) válidos desde la configuración inicial hasta la final.
La configuración final puede no ser única ya que diferentes caminos probablemente
generarán diferentes cadenas de salida y además puede haber más de un estado final.
En el análisis de sentencias ambiguas, la compartición de computaciones es
un problema
fundamental. Sin embargo, en un PDT tradicional el formalismo de transiciones
depende
del contenido total de la pila con lo cual se reducen las posibilidades de
compartición. Es por ello precisamente por lo que dicha estructura
recibe la denominación de . Para resolver este problema ICE hace uso de
de estructuras dinámicas
, introducidas originalmente
en [Villemonte de la Clergerie 90] para el desarrollo de compiladores lógicos
eficientes y aplicadas al análisis de contexto libre en [Vilares 92].
ICE realiza una interpretación mediante programación dinámica de un PDT
consistente en la exploración sistemática de un espacio de elementos que reciben
el nombre de items. Este espacio de búsqueda es una representación
condensada de todas las posibles computaciones del PDT. ICE garantiza
que realmente se exploran todas las partes útiles del espacio de búsqueda
(completitud) y que
las partes redundantes o inútiles se ignoran todo lo que sea posible
(admisibilidad). Se puede probar [Vilares 92, Vilares 93]
que la representación de configuraciones
mediante items es compatible con el formalismo de transiciones y que la
corrección y completitud de computaciones con los items se verifican en
relación a .
En la práctica, sólo se suelen considerar las estructuras dinámicas
y
. Ambas construyen items a partir de la noción de modo. Un modo
es una tupla de 4 elementos (
) donde p es el
estado actual en el PDT, X es el último símbolo (terminal o no terminal)
reconocido en el estado p,
es un puntero, llamado back-pointer, a la posición i de
la cadena de entrada w que contiene el primer componente léxico derivado del símbolo X,
mientras que
es un puntero a la posición j en la cadena de entrada
del componente léxico que está siendo analizado.
se diferencia de
en que
considera los items como estructuras formadas por un único modo , mientras que
para
los items están formados por dos modos de la forma
[(
)(
)]. Esto quiere decir
básicamente que
utiliza el tope de la pila para representar la
configuración actual, mientras que
utiliza el tope y su predecesor en la
pila.
A fin de garantizar la eficiencia en un contexto no determinista, es preciso
asegurar una buena compartición de computaciones. Es por ello que ICE hace uso
de , ya que
no se puede considerar que sea óptima debido a la
continua dependencia del contexto representado por el segundo modo de los items.