Вы находитесь на странице: 1из 15

Procesadores de Lenguaje

Ítems LR(0) y Análisis LR(0)

José L. Balcázar

Dept. Matesco, Universidad de Cantabria

Fac. Ciencias – Ing. Informática – Primavera de 2010


Ítems LR(0)
Qué estamos buscando y qué llevamos encontrado

Dada una gramática libre de contexto, un ı́tem LR(0) es un par


formado por una regla de la gramática A → α y un número natural
entre 0 y |α|.
Lo escribimos con frecuencia entre corchetes.
Ítems LR(0)
Qué estamos buscando y qué llevamos encontrado

Dada una gramática libre de contexto, un ı́tem LR(0) es un par


formado por una regla de la gramática A → α y un número natural
entre 0 y |α|.
Lo escribimos con frecuencia entre corchetes.
Cuando el número sea i, en vez de escribirlo explı́citamente,
pondremos un punto a continuación del i-ésimo sı́mbolo de α:

[A → β • γ]

donde α = βγ y |β| = i.
Ítems LR(0)
Qué estamos buscando y qué llevamos encontrado

Dada una gramática libre de contexto, un ı́tem LR(0) es un par


formado por una regla de la gramática A → α y un número natural
entre 0 y |α|.
Lo escribimos con frecuencia entre corchetes.
Cuando el número sea i, en vez de escribirlo explı́citamente,
pondremos un punto a continuación del i-ésimo sı́mbolo de α:

[A → β • γ]

donde α = βγ y |β| = i.
Intuitivamente significa: Estamos buscando α y, tan pronto lo
encontremos, reduciremos a A; y, de esa α que estamos buscando,
llevamos visto β y nos falta por ver γ.
El Autómata LR(0)
Busca prefijos viables

Construimos un autómata indeterminista con λ-transiciones:


I Estados: todos los ı́tems LR(0).
I Estado inicial: [T → •S], basado en la nueva regla inicial.
I Estados finales: los ı́tems de la forma [A → α•]
I Transiciones:
El Autómata LR(0)
Busca prefijos viables

Construimos un autómata indeterminista con λ-transiciones:


I Estados: todos los ı́tems LR(0).
I Estado inicial: [T → •S], basado en la nueva regla inicial.
I Estados finales: los ı́tems de la forma [A → α•]
I Transiciones:
I De un ı́tem de la forma [A → α • aγ], donde a es un sı́mbolo
terminal, hay una transición a [A → αa • γ] etiquetada con a;
I Del mismo modo, de un ı́tem de la forma [A → α • Bγ], donde
B es un sı́mbolo gramatical no terminal, hay una transición a
[A → αB • γ] etiquetada con B;
I Además, de un ı́tem de la forma [A → α • Bγ], donde B es un
sı́mbolo gramatical no terminal, hay una transición λ a cada
uno de los ı́tems [B → •β] para cada una de las reglas B → β
de la gramática.
Y luego, determinizamos el autómata resultante.
Ejemplo de Autómata LR(0)
Expresiones muy sencillas

%%
E : E ’+’ E
| ’x’ ;
Ejemplo de Autómata LR(0)
Expresiones muy sencillas

%%
E : E ’+’ E
| ’x’ ;

(Conflicto en el
estado 5 resuelto en
favor de reducir.)
Tablas de Análisis LR(0)
La misma información, en formato tabular

%%
E : E ’+’ E
| ’x’ ;

Lo que nos dice el autómata LR(0):

estado x + $ E reduce:
0 shift: 1 go to: 2
2 shift: 4 shift: 3
4 shift: 1 go to: 5
1 reduce E:’x’
3 accept
5 reduce E:E’+’E
Analizadores Ascendentes LR
Habı́amos dicho una mentirijilla. . .

Caracterı́sticas principales, una vez más:


I Construyen un árbol sintáctico de las hojas hacia la raı́z.
I Leen la entrada de izquierda a derecha (Left to right);
reconstruyen hacia atrás la (¿una?) derivación derecha
(Rightmost).
I Operaciones básicas: desplazar (shift) un sı́mbolo terminal de
la entrada a la pila y reducir (reduce) una parte derecha de
regla que hay en la cima de la pila, sustituyéndola por la
correspondiente parte izquierda de la misma regla.
I A cada vuelta del bucle principal, la pila contiene
el prefijo viable que
corresponde a la derivación derecha de la parte ya leı́da de la
entrada.
Analizadores Ascendentes LR
Habı́amos dicho una mentirijilla. . .

Caracterı́sticas principales, una vez más:


I Construyen un árbol sintáctico de las hojas hacia la raı́z.
I Leen la entrada de izquierda a derecha (Left to right);
reconstruyen hacia atrás la (¿una?) derivación derecha
(Rightmost).
I Operaciones básicas: desplazar (shift) un sı́mbolo terminal de
la entrada a la pila y reducir (reduce) una parte derecha de
regla que hay en la cima de la pila, sustituyéndola por la
correspondiente parte izquierda de la misma regla.
I A cada vuelta del bucle principal, la pila contiene los estados
por los que pasa el autómata LR(0) al leer el prefijo viable que
corresponde a la derivación derecha de la parte ya leı́da de la
entrada.
Otro Ejemplo de Autómata LR(0)
Lenguaje de Dyck, gramática recursiva izquierda habitual

%%
S : S ’(’ S ’)’
| ;
Otro Ejemplo de Autómata LR(0)
Lenguaje de Dyck, gramática recursiva izquierda habitual

%%
S : S ’(’ S ’)’
| ;
Y Otro Ejemplo de Autómata LR(0)
Lenguaje de Dyck sin λ, gramática ambigua

%%
S : S S
| ’(’ S ’)’
| ’(’ ’)’ ;
Y Otro Ejemplo de Autómata LR(0)
Lenguaje de Dyck sin λ, gramática ambigua

%%
S : S S
| ’(’ S ’)’
| ’(’ ’)’ ;

(Conflicto en el
estado 6 resuelto en
favor de reducir.)