 
  
  
  
  
Para aclarar en lo posible el funcionamiento de los analizadores sintácticos generados por ICE, usaremos un ejemplo tomado de [Vilares 93].
Se trata de analizar la entrada  , según la siguiente gramática
, según la siguiente gramática 
 en la que
 en la que  es el símbolo inicial, las letras minúsculas 
son los componentes léxicos y las letras mayúsculas los no terminales:
 es el símbolo inicial, las letras minúsculas 
son los componentes léxicos y las letras mayúsculas los no terminales:

En la figura A.1
 se muestra el autómata LALR(1) reconocedor de la gramática 
 . En [Aho et al. 90] se encuentra una buena descripción de cómo
construir reconocedores de este tipo. Como la gramática es ambigua, en el 
estado 2 se producen 3 conflictos
reducción-reducción. Esto se traduce en el ejemplo en tres derivaciones
válidas para reconocer la entrada abdc, que son las siguientes:
. En [Aho et al. 90] se encuentra una buena descripción de cómo
construir reconocedores de este tipo. Como la gramática es ambigua, en el 
estado 2 se producen 3 conflictos
reducción-reducción. Esto se traduce en el ejemplo en tres derivaciones
válidas para reconocer la entrada abdc, que son las siguientes:

  
Figure A.1: Autómata LALR(1) reconocedor de la gramática  .
.
Al comenzar, el algoritmo añade automáticamente el item 
 (en Earley sería el item asociado a
 (en Earley sería el item asociado a
 ]). En la tabla A.1 se muestran
los items involucrados en el proceso de análisis de nuestra entrada. En este 
momento estamos en el estado inicial 0 del autómata LALR(1).
]). En la tabla A.1 se muestran
los items involucrados en el proceso de análisis de nuestra entrada. En este 
momento estamos en el estado inicial 0 del autómata LALR(1).
Del item  pasamos al item
 pasamos al item

 aplicando una operación predictor.
 aplicando una operación predictor.
Ya que el punto está justo antes de la a y el siguiente componente léxico de entrada 
es precisamente a, aplicamos el operador scanner según Earley,
con lo que obtenemos  , el primer item del
itemset
, el primer item del
itemset  correspondiente al componente léxico en la posición 1
 correspondiente al componente léxico en la posición 1 . Este item en Earley estaría asociado
a
. Este item en Earley estaría asociado
a  ; a su vez, la máquina LALR(1) indica una transición 
al estado 1 con a. Por tanto, el estado actual es el estado 1.
; a su vez, la máquina LALR(1) indica una transición 
al estado 1 con a. Por tanto, el estado actual es el estado 1.
Como el punto está justo antes de b y el siguiente componente léxico en la entrada es b,
aplicamos la operación scanner con lo que obtenemos  ,
el primer item del itemset
,
el primer item del itemset  correspondiente al componente léxico en la posición 2
 correspondiente al componente léxico en la posición 2 . Como el 
reconocedor LALR(1) indica una transición al estado 2 con b, el estado actual pasa a ser el
estado 2.
. Como el 
reconocedor LALR(1) indica una transición al estado 2 con b, el estado actual pasa a ser el
estado 2.
En este estado se produce un triple conflicto de reducción, ya que se puede reducir
indistintamente por las reglas R2, R3 y R4 para reconocer la cadena de entrada.
YACC, que implemeta un reconocedor determinista LALR(1), resolvería este 
conflicto reduciendo por la primera regla e ignorando el resto.
Sin embargo ICE, debido a su carácter no determinista, es capaz de tratar con
ambigüedades como ésta y crear una estructura que representa los tres
posibles árboles de análisis sintáctico con la mayor compartición
posible .
.
  
Table: Desarrollo para la entrada  w = abde en la gramática
 en la gramática  .
.
En el estado 2, aplicando el operador predictor con la regla R2, obtendríamos
 , en Earley asociado a
, en Earley asociado a  ).
 El segundo y tercer elemento de
).
 El segundo y tercer elemento de  se deben a que hasta el momento en este estado 
tan sólo se ha reconocido la entrada hasta b
 
 se deben a que hasta el momento en este estado 
tan sólo se ha reconocido la entrada hasta b y a que el itemset que contiene el
primer componente léxico derivado de b es
 y a que el itemset que contiene el
primer componente léxico derivado de b es 
 .
.
El proceso que se seguiría a partir de aquí en caso elegir las reglas R3 o R4 para aplicar con predictor es análogo al que se va a mostrar a continuación. Es por ello que no se van a explicar esos dos caminos alternativos, ya que se alargaría demasiado el ejemplo y realmente no aportan nada nuevo a la comprensión del proceso.
En la situación actual, aplicamos el operador predictor con la regla R5 para 
volver a obtener
 .
.
Ahora podemos aplicar el operador completer para obtener  .
Con ello hemos reconocido el no terminal C en el itemset
.
Con ello hemos reconocido el no terminal C en el itemset 
 . Como 
la máquina LALR(1) indica que con C hay una transición al estado 3, éste pasa a 
ser el estado actual.
. Como 
la máquina LALR(1) indica que con C hay una transición al estado 3, éste pasa a 
ser el estado actual.
Al aplicar el operador predictor obtenemos  que estaría asociado en Earley a
que estaría asociado en Earley a  ; como el punto está justo 
delante de la d y el siguiente componente léxico en la entrada es precisamente d, aplicamos
la operación scanner con lo que obtenemos
 ; como el punto está justo 
delante de la d y el siguiente componente léxico en la entrada es precisamente d, aplicamos
la operación scanner con lo que obtenemos  que es el primer item del itemset
que es el primer item del itemset 
 . El estado actual pasa a ser el 6 ya que así 
lo indica una transición el reconocedor LALR.
. El estado actual pasa a ser el 6 ya que así 
lo indica una transición el reconocedor LALR.
En el estado 6 aplicamos otra vez scanner para reconocer e y obtener el
item  asociado según el algoritmo de 
Earley a
 asociado según el algoritmo de 
Earley a  ; el autómata LALR, por su parte, indica una 
transición al estado 13.
; el autómata LALR, por su parte, indica una 
transición al estado 13.
Ahora, según el algoritmo de Earley deberíamos realizar una operación completer.
Para ello se utiliza el puntero de retroceso .
Sin embargo, el significado del puntero de retroceso en ICE es diferente al que tiene en
Earley. ICE, a diferencia
de Earley, utiliza las transiciones de tipo 4 para regresar al estado donde 
se aplicó el predictor de F (el estado 3)
y genera un item que indica el reconocmiento de F en ese estado con el mismo 
puntero de retroceso que cuando se hizo el predictor. El item obtenido tiene por tanto la forma
 . Este item estaría asociado en Earley
a
. Este item estaría asociado en Earley
a  , por lo que a su vez ahora se debe relizar la 
operación completer para reconocer B.
, por lo que a su vez ahora se debe relizar la 
operación completer para reconocer B.
Como el predictor para B se hizo en el estado 2 con puntero de retroceso  , el
item resultante es
, el
item resultante es  que en Earley estaría 
asociado a
 que en Earley estaría 
asociado a  con lo cual se debe realizar el completer
para reconocer A.
 con lo cual se debe realizar el completer
para reconocer A.
Debido a que la operación predictor para A tuvo lugar en el estado 0 y que el
puntero de retroceso utilizado en ella había sido  , se obtiene el item
, se obtiene el item
 que en Earley estaría asociado a
 que en Earley estaría asociado a 
 con lo que estamos en condiciones de realizar un
scanner sobre el delimitador final de la cadena
 con lo que estamos en condiciones de realizar un
scanner sobre el delimitador final de la cadena . Por su parte, el reconocedor LALR(1) indica una transición al 
estado 8.
. Por su parte, el reconocedor LALR(1) indica una transición al 
estado 8.
Al realizar el scanner de  obtenemos el item
 obtenemos el item 
 . La regla asociada 
según Earley sería
. La regla asociada 
según Earley sería  , que indica el
reconocimiento de toda la cadena de entrada. Efectivamente, el autómata indica 
que con
, que indica el
reconocimiento de toda la cadena de entrada. Efectivamente, el autómata indica 
que con  se debe realizar una transición al estado 9, que es un 
estado de aceptación, con lo cual finaliza el proceso.
 se debe realizar una transición al estado 9, que es un 
estado de aceptación, con lo cual finaliza el proceso.
La descripción que se ha realizado aquí del ejemplo es diferente a la contenida en
[Vilares 93] ya que se ha tratado sobre todo de facilitar la comprensión
rehuyendo de los estrictos formalismos de las transiciones en  , aunque para 
conseguirlo se haya tenido que tomar una más que discutible asimilación del
comportamiento de ICE al del algoritmo Earley con el añadido de un autómata LALR(1).
La descripción completamente formal puede encontrarse en [Vilares 93].
, aunque para 
conseguirlo se haya tenido que tomar una más que discutible asimilación del
comportamiento de ICE al del algoritmo Earley con el añadido de un autómata LALR(1).
La descripción completamente formal puede encontrarse en [Vilares 93].
 
  
  
 