• No se han encontrado resultados

Analizadores sintácticos LR(0) y SLR

N/A
N/A
Protected

Academic year: 2021

Share "Analizadores sintácticos LR(0) y SLR"

Copied!
24
0
0

Texto completo

(1)

Analizadores sint´

acticos LR(0) y SLR

Teor´ıa de Lenguajes

Facultad de Ciencias Exactas y Naturales Universidad de Buenos Aires

(2)

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

(3)

Analizadores Sint´

acticos LR(k)

L:left-to-right

R:rightmost derivation

(4)

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)

(5)

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.

(6)

Parsers LR(k) - Estructura General

(7)

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.

(8)

Parsers LR(k) - Algoritmo

apilars0

loop

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

(9)

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•

(10)

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.

(11)

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

(12)

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)

(13)

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

(14)

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

(15)

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

(16)

Ejercicio (1)

Sea G1 la siguiente gram´atica:

S →SA|A A →(S)|() ¿Es LR(0)? ¿Es SLR?

Analizar la siguiente cadena: (()) ()

(17)

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)

(18)

Tabla ir a LR(0) para G1

estado S A 0 1 2 1 4 2 3 5 2 4 5 4 6 7

(19)

An´

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)()⇒(())()

(20)

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)

(21)

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) ={),+,$}

(22)

Tabla ir a SLR para G2

estado E 0 1 1 2 3 4 6 5 6 7

(23)

An´

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)

(24)

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

Referencias

Documento similar

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

Para ello, trabajaremos con una colección de cartas redactadas desde allí, impresa en Évora en 1598 y otros documentos jesuitas: el Sumario de las cosas de Japón (1583),

No había pasado un día desde mi solemne entrada cuando, para que el recuerdo me sirviera de advertencia, alguien se encargó de decirme que sobre aquellas losas habían rodado

De acuerdo con Harold Bloom en The Anxiety of Influence (1973), el Libro de buen amor reescribe (y modifica) el Pamphihis, pero el Pamphilus era también una reescritura y

Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas

De hecho, este sometimiento periódico al voto, esta decisión periódica de los electores sobre la gestión ha sido uno de los componentes teóricos más interesantes de la

Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de

b) El Tribunal Constitucional se encuadra dentro de una organiza- ción jurídico constitucional que asume la supremacía de los dere- chos fundamentales y que reconoce la separación