Analizadores sint´
acticos LR(0) y SLR
Teor´ıa de Lenguajes
Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires
Clase de Hoy
Anteriores: Parsingdescendente (LL(1), ELL) Recursivos e iterativos
Generan ´arbol de derivaci´on desde la ra´ız hasta las hojas Simulan derivaci´on a izquierda
Hoy: Parsing ascendente
Construyen el ´arbol sint´acticodesde las hojas hasta la ra´ız M´as expresivos que los descendentes
M´as dif´ıciles de construir
Analizadores Sint´
acticos LR(k)
L:left-to-right
R:rightmost derivation
Tipos de Analizadores Sint´
acticos LR(k)
LR(0) SLR(1): Simple LR(1) LALR(1): Lookahead LR(1) LR(1) Poder expresivo LR(0)⊂ SLR(1)⊂ LALR(1)⊂LR(1)Algunas Definiciones
Handle: (informalmente) Subcadena de una forma sentencial, que coincide con el lado derecho de una producci´on, y cuya reducci´on representa un paso en una derivaci´on a derecha, en reversa.
Prefijos Viables: Prefijos de una forma sentencial derecha que pueden aparecer en la pila de un parser shift-reduce, porque no sobrepasan el handleubicado m´as a la derecha. El conjunto de todos los prefijos viables es un lenguaje regular.
Parsers LR(k) - Estructura General
Modelo de los analizadores sint´
acticos LR
Pila: Contiene losestados del AFD por los que se va pasando. Tabla ir a: Funci´on de transici´on de un AFD que reconoce los prefijos viables de la gram´atica.
Tabla acci´on:
desplazar i: desplazar y apilar el estado i.
reducir A→β: reducir por la producci´on indicada. aceptar: aceptar la cadena de entrada.
Parsers LR(k) - Algoritmo
apilars0loop
s ← tope de la pila
a← pr´oximo s´ımbolo apuntado en w$ if accion[s,a] = desplazar s0 then
apilars0
avanzar al pr´oximo s´ımbolo de entrada else if accion[s,a] = reducirA→β then
sacar|β|s´ımbolos de la pila s0 ← tope de la pila
apilarir a[s0,A]
else if accion[s,a] = aceptar then return
else error() end if end loop
Analizadores sint´
acticos LR(0) y SLR(1)
Item LR(0)
Producci´on con un pivote (•) en alguna posici´on del lado derecho.
Representa hasta d´onde se vio una producci´on en el proceso de an´alisis sint´actico, y c´omo se espera que contin´ue la cadena de entrada.
Por ejemplo, para la producci´onA→BC, existen estos ´ıtems LR(0):
A→ •BC A→B•C A→BC•
AFD para reconocer prefijos viables de una gram´
atica
Para armar las tablasir a yacci´on es necesario construir un AFD que reconozca los prefijos viables de la gram´atica. El alfabeto es V =VN∪VT.
Los estados son conjuntos de ´ıtems.
La funci´on de transici´on determina la tablair a.
AFD para reconocer prefijos viables de una gram´
atica
Clausura de un Conjunto de Items
J←I repeat
for´ıtem A→α·Bβ ∈J, y producci´onB→γ deG do agregarB → ·γ a J
end for
until no se puedan agregar ´ıtems aJ returnJ
AFD para reconocer prefijos viables de una gram´
atica
Construcci´on del Aut´omata
1 Aumentar la gram´aticaG aG0 agregandoS0 →S y cambiando el s´ımbolo distinguido aS0
2 Construir los conjuntos de ´ıtems LR(0) C ={I0, ...,In} (estados del AFD)
AFD para reconocer prefijos viables de una gram´
atica
Construcci´on del Aut´omata
3 Construir la tabla accion:
if A→α·aβ est´a enIi, yδ(Ii,a) =Ij,a∈VT then asignardesplazar ja accion[i, a]
end if
if A→α·est´a en Ii,A6=S0 then
asignarreducir A→α a accion[i,a] LR(0): para todos los terminalesa SLR(1): paraaenSiguientes(A) end if
if S0→S·est´a en Ii then
asignaraceptar aaccion[i,$] end if
AFD para reconocer prefijos viables de una gram´
atica
Construcci´on del Aut´omata
4 Construir la tabla ir a:
Para cada no terminal A,ir a[i,A] = j ⇔δ(Ii,A) =Ij 5 Las entradas vac´ıas de la tabla acci´on son consideradas error 6 El estado inicial es el que contiene el ´ıtem S0→ ·S
Gram´
aticas LR(0) – SLR(1)
Conflictos
Si la tablaacci´on tiene m´as de una entrada en alg´un casillero, entonces la gram´atica no es LR(0) / SLR(1).
Posibles conflictos: shift-reduce reduce-reduce
Ejercicio (1)
Sea G1 la siguiente gram´atica:
S →SA|A A →(S)|() ¿Es LR(0)? ¿Es SLR?
Analizar la siguiente cadena: (()) ()
Tabla acci´
on LR(0) para G1
estado ( ) $
0 desplazar 3
1 desplazar 3 aceptar
2 reducirS →A reducirS →A reducirS →A 3 desplazar 3 desplazar 6
4 reducirS →SA reducirS →SA reducirS →SA 5 desplazar 3 desplazar 7
6 reducirA→() reducirA→() reducirA→() 7 reducirA→(S) reducirA→(S) reducirA→(S)
Tabla ir a LR(0) para G1
estado S A 0 1 2 1 4 2 3 5 2 4 5 4 6 7An´
alisis de una cadena del lenguaje generado por G1
pila entrada acci´on 0 (())()$ desplazar 3 03 ())()$ desplazar 3 033 ))()$ desplazar 6 0336 )()$ reducirA→() 032 )()$ reducirS →A 035 )()$ desplazar 7 0357 ()$ reducirA→(S) 02 ()$ reducirS →A 01 ()$ desplazar 3 013 )$ desplazar 6 0136 $ reducirA→() 014 $ reducirS →SA 01 $ aceptar Derivaci´on: S ⇒SA⇒S()⇒A()⇒(S)()⇒(A)()⇒(())()
Ejercicio (2)
Sea G2 la siguiente gram´atica:
E →id|id(E)|E +id ¿Es LR(0)? ¿Es SLR?
Analizar la siguiente cadena: id(id+id)
Tabla acci´
on SLR para G2
estado id ( ) + $ 0 2 1 3 aceptar 2 4 E →id E →id E →id 3 5 4 2 5 E →E +id E →E+id E →E+id 6 7 3 7 E →id(E) E →id(E) E →id(E) Siguientes(E) ={),+,$}Tabla ir a SLR para G2
estado E 0 1 1 2 3 4 6 5 6 7An´
alisis de una cadena del lenguaje generado por G2
pila entrada acci´on 0 id(id+id)$ desplazar 2 02 (id+id)$ desplazar 4 024 id+id)$ desplazar 2 0242 +id)$ reducirE →id 0246 +id)$ desplazar 3 02463 id)$ desplazar 5 024635 )$ reducirE →E+id 0246 )$ desplazar 7 02467 $ reducirE →id(E) 01 $ aceptar Derivaci´on: S ⇒id(E)⇒id(E+id)⇒id(id +id)
Bibliograf´ıa
A. Aho, R. Sethi, J. Ullman. Compiladores: Principios, t´ecnicas y herramientas. Addison Wesley, 1990. (El Libro del Drag´on) Cap´ıtulo 4, secciones 4.5 y 4.7