Sei sulla pagina 1di 6

Con esta gramática:

Sp -> S
S -> a S b b
S -> a S b
S -> a S
S -> a

Para la cadena u =aabb, la derivación que describe el software “Kakuy” es:


<Sp> => <S> utilizando (Sp -> S )
=> a <S> b b utilizando (S -> a S b b )
=> a a b b utilizando (S -> a )

El árbol que dibuja “Kakuy” es:

Los conjuntos son:(note que en vez de “I1“ dice “a:1”, etc.) (note que el puntito • aquí es un guión bajo “_”)
Y tiene una ventana llamada “historial” donde se ve esta larga salida.
(note que le llama kernel a un conjunto de ítemes, símbol distinguido al símbolo raíz, etc.)

Técnica de Jay Earley


Operaciones realizadas durante el reconocimiento de la hilera: a a b b

Estado: Inicial
El Iniciador construye este estado sin procesar ningún símbolo de la cadena de entrada.
Los items que constituyen el kernel del Estado Inicial se conforman tomando todas las reglas de la gramática
en cuyo lado izquierdo aparece el Símbolo Distinguido. El punto se coloca antes del primer símbolo de cada
uno de los lados derechos, y el puntero vale 0 dado que las predicciones se están realizando precisamente en
este estado.
Nuevo kernel:
[Sp -> • S ,0]

Se clausura el ítem 1 del estado 0.


El Predictor crea un ítem por cada regla de la gramática que tenga al símbolo S en el lado izquierdo. El
punto se posiciona inmediatamente antes del primer símbolo del lado derecho, y el puntero vale 0, dado que
la predicción se está realizando en este estado.
Resultado de la operación:
[S -> • a S b b ,0]
[S -> • a S b ,0]
[S -> • a S ,0]
[S -> • a ,0]

Dado que en el ítem 2 del estado 0 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.
Dado que en el ítem 3 del estado 0 el punto se encuentra antes de un terminal (a ), no se realiza ninguna acción.
Dado que en el ítem 4 del estado 0 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.
Dado que en el ítem 5 del estado 0 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.

Dado que aún quedan símbolos en la cadena de entrada, se crea el estado 1.


El Scanner crea el kernel del estado 1 con los items del estado anterior (0) que presentan el punto
inmediatamente antes del símbolo "a", pero desplaza el punto un lugar hacia la derecha.
Nuevo kernel:
[S -> a • S b b ,0]
[S -> a • S b ,0]
[S -> a • S ,0]
[S -> a • ,0]

Se clausura el ítem 1 del estado 1.


El Predictor crea un ítem por cada regla de la gramática que tenga al símbolo S en el lado izquierdo. El
punto se posiciona inmediatamente antes del primer símbolo del lado derecho, y el puntero vale 1, dado que
la predicción se está realizando en este estado.
Resultado de la operación:
[S -> • a S b b ,1]
[S -> • a S b ,1]
[S -> • a S ,1]
[S -> • a ,1]

Se clausura el ítem 2 del estado 1.


El Predictor crea un ítem por cada regla de la gramática que tenga al símbolo S en el lado izquierdo. El
punto se posiciona inmediatamente antes del primer símbolo del lado derecho, y el puntero vale 1, dado que
la predicción se está realizando en este estado.
Resultado de la operación:
[S -> • a S b b ,1]
[S -> • a S b ,1]
[S -> • a S ,1]
[S -> • a ,1]

Se clausura el ítem 3 del estado 1.


El Predictor crea un ítem por cada regla de la gramática que tenga al símbolo S en el lado izquierdo. El
punto se posiciona inmediatamente antes del primer símbolo del lado derecho, y el puntero vale 1, dado que
la predicción se está realizando en este estado.
Resultado de la operación:
[S -> • a S b b ,1]
[S -> • a S b ,1]
[S -> • a S ,1]
[S -> • a ,1]

Se completa el ítem 4 del estado 1.


Dado que el ítem 4 del estado 1 fue predicho en el estado 0, el Completer copia del estado 0 todos los items
que tienen el punto inmediatamente antes del No Terminal S y desplaza el punto un lugar hacia la derecha.
Resultado de la operación:
[Sp -> • S ,0] (ítem 1 del estado 0) »»» [Sp -> S • ,0]

Dado que en el ítem 5 del estado 1 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.
Dado que en el ítem 6 del estado 1 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.
Dado que en el ítem 7 del estado 1 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.
Dado que en el ítem 8 del estado 1 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.
Se completa el ítem 9 del estado 1.
Dado que el ítem 9 del estado 1 fue predicho en el estado 0, el Completer copia del estado 0 todos los items
que tienen el punto inmediatamente antes del No Terminal Sp y desplaza el punto un lugar hacia la derecha.
Resultado de la operación:
En el estado 0 no hay ningún ítem con el punto antes del No Terminal Sp.

Dado que aún quedan símbolos en la cadena de entrada, se crea el estado 2.


El Scanner crea el kernel del estado 2 con los items del estado anterior (1) que presentan el punto
inmediatamente antes del símbolo "a", pero desplaza el punto un lugar hacia la derecha.
Nuevo kernel:
[S -> a • S b b ,1]
[S -> a • S b ,1]
[S -> a • S ,1]
[S -> a • ,1]

Se clausura el ítem 1 del estado 2.


El Predictor crea un ítem por cada regla de la gramática que tenga al símbolo S en el lado izquierdo. El
punto se posiciona inmediatamente antes del primer símbolo del lado derecho, y el puntero vale 2, dado que
la predicción se está realizando en este estado.
Resultado de la operación:
[S -> • a S b b ,2]
[S -> • a S b ,2]
[S -> • a S ,2]
[S -> • a ,2]

Se clausura el ítem 2 del estado 2.


El Predictor crea un ítem por cada regla de la gramática que tenga al símbolo S en el lado izquierdo. El
punto se posiciona inmediatamente antes del primer símbolo del lado derecho, y el puntero vale 2, dado que
la predicción se está realizando en este estado.
Resultado de la operación:
[S -> • a S b b ,2]
[S -> • a S b ,2]
[S -> • a S ,2]
[S -> • a ,2]

Se clausura el ítem 3 del estado 2.


El Predictor crea un ítem por cada regla de la gramática que tenga al símbolo S en el lado izquierdo. El
punto se posiciona inmediatamente antes del primer símbolo del lado derecho, y el puntero vale 2, dado que
la predicción se está realizando en este estado.
Resultado de la operación:
[S -> • a S b b ,2]
[S -> • a S b ,2]
[S -> • a S ,2]
[S -> • a ,2]

Se completa el ítem 4 del estado 2.


Dado que el ítem 4 del estado 2 fue predicho en el estado 1, el Completer copia del estado 1 todos los items
que tienen el punto inmediatamente antes del No Terminal S y desplaza el punto un lugar hacia la derecha.
Resultado de la operación:
[S -> a • S b b ,0] (ítem 1 del estado 1) »»» [S -> a S • b b ,0]
[S -> a • S b ,0] (ítem 2 del estado 1) »»» [S -> a S • b ,0]
[S -> a • S ,0] (ítem 3 del estado 1) »»» [S -> a S • ,0]

Dado que en el ítem 5 del estado 2 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.
Dado que en el ítem 6 del estado 2 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.
Dado que en el ítem 7 del estado 2 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.
Dado que en el ítem 8 del estado 2 el punto se encuentra antes de un terminal (a), no se realiza ninguna acción.
Dado que en el ítem 9 del estado 2 el punto se encuentra antes de un terminal (b), no se realiza ninguna acción.
Dado que en el ítem 10 del estado 2 el punto se encuentra antes de un terminal (b), no se realiza ninguna acción.
Se completa el ítem 11 del estado 2.
Dado que el ítem 11 del estado 2 fue predicho en el estado 0, el Completer copia del estado 0 todos los
items que tienen el punto inmediatamente antes del No Terminal S y desplaza el punto un lugar hacia la
derecha.
Resultado de la operación:
[Sp -> • S ,0] (ítem 1 del estado 0) »»» [Sp -> S • ,0]

Se completa el ítem 12 del estado 2.


Dado que el ítem 12 del estado 2 fue predicho en el estado 0, el Completer copia del estado 0 todos los
items que tienen el punto inmediatamente antes del No Terminal Sp y desplaza el punto un lugar hacia la
derecha.
Resultado de la operación:
En el estado 0 no hay ningún ítem con el punto antes del No Terminal Sp.
Dado que aún quedan símbolos en la cadena de entrada, se crea el estado 3.
El Scanner crea el kernel del estado 3 con los items del estado anterior (2) que presentan el punto
inmediatamente antes del símbolo "b", pero desplaza el punto un lugar hacia la derecha.
Nuevo kernel:
[S -> a S b • b ,0]
[S -> a S b • ,0]

Dado que en el ítem 1 del estado 3 el punto se encuentra antes de un terminal (b), no se realiza ninguna
acción.
Se completa el ítem 2 del estado 3.
Dado que el ítem 2 del estado 3 fue predicho en el estado 0, el Completer copia del estado 0 todos los items
que tienen el punto inmediatamente antes del No Terminal S y desplaza el punto un lugar hacia la derecha.
Resultado de la operación:
[Sp -> • S ,0] (ítem 1 del estado 0) »»» [Sp -> S • ,0]

Se completa el ítem 3 del estado 3.


Dado que el ítem 3 del estado 3 fue predicho en el estado 0, el Completer copia del estado 0 todos los items
que tienen el punto inmediatamente antes del No Terminal Sp y desplaza el punto un lugar hacia la derecha.
Resultado de la operación:
En el estado 0 no hay ningún ítem con el punto antes del No Terminal Sp.

Dado que aún quedan símbolos en la cadena de entrada, se crea el estado 4.


El Scanner crea el kernel del estado 4 con los items del estado anterior (3) que presentan el punto
inmediatamente antes del símbolo "b", pero desplaza el punto un lugar hacia la derecha.
Nuevo kernel:
[S -> a S b b • ,0]

Se completa el ítem 1 del estado 4.


Dado que el ítem 1 del estado 4 fue predicho en el estado 0, el Completer copia del estado 0 todos los items
que tienen el punto inmediatamente antes del No Terminal S y desplaza el punto un lugar hacia la derecha.
Resultado de la operación:
[Sp -> • S ,0] (ítem 1 del estado 0) »»» [Sp -> S • ,0]

Se completa el ítem 2 del estado 4.


Dado que el ítem 2 del estado 4 fue predicho en el estado 0, el Completer copia del estado 0 todos los items
que tienen el punto inmediatamente antes del No Terminal Sp y desplaza el punto un lugar hacia la derecha.
Resultado de la operación:
En el estado 0 no hay ningún ítem con el punto antes del No Terminal Sp.

La cadena de entrada pertenece al lenguaje generado por la gramática porque se han procesado todos los
símbolos de la cadena de entrada y, en el estado 4 (el último estado) hay al menos un ítem predicho en el
estado 0 (el estado inicial) con el No Terminal distinguido (Sp) en el lado izquierdo de la regla y el punto al
final (en el extremo derecho) del lado derecho.

Ahora puede hacer clic en cualquier ítem del Bosque de Earley para resaltar todos los items que se
usaron para calcular ese ítem desde el inicio del algoritmo.

El último comentario en negrita sólo tiene sentido viendo el software. Pasan cosas así:
Entonces al hacer click se colorea de dónde viene dicho ítem (el rojo viene del verde):

Potrebbero piacerti anche