Análisis Sintáctico Ascendente

Anuncio
Análisis Sintáctico Ascendente
CI4721 – Lenguajes de Programación II
Ernesto Hernández-Novich
<emhn@usb.ve>
Universidad “Simón Bolívar”
Copyright ©2012-2016
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
1 / 20
Motivación
Reconocedor ascendente no determinístico
Sea G = (N, Σ, P, S) una CFG cualquiera. Entonces el PDA extendido
Asc(G) = ({q0 , q1 }, Σ, N ∪ Σ, δ, q0 , {q1 })
con δ definida según
δ(q0 , a, λ) = {(q0 , a)}, ∀a ∈ Σ
(1)
δ(q0 , λ, α) = {A → αR ∈ P : (q0 , A)}, ∀A ∈ N ∧ α 6= S
(2)
δ(q0 , λ, S) = {(q1 , λ)} ∪ {A → S ∈ P : (q0 , A)}
(3)
¿Cuál es la razón del no-determinismo?
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
2 / 20
Contextos LR(0)
Contexto LR(0)
Sea G = (N, Σ, P, S) una CFG cualquiera.
Si tenemos una forma sentencial más derecha
∗
S ⇒ βAv ⇒ βαv
Right
Right
decimos que βα es un contexto LR(0) para A → α ∈ P.
• Cada shift deben avanzar de izquierda a derecha hasta completar βα.
• Cada reduce corresponden a sustituir α por A.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
3 / 20
Contextos LR(0)
Un ejemplo trivial
Posibles derivaciones más derechas
Para la gramática
S → aA
S → bB
A → abA
A → bB
B → bBc
B → bc
Hernández-Novich (USB)
S ⇒ aA
i
⇒ a(ab)i A
⇒ a(ab)i bB
j
⇒ a(ab)i bbj Bcj
S ⇒ bB
i
⇒ bbi Bci
⇒ bbi bcci
⇒ a(ab)i bbj bccj
Análisis Sintáctico Ascendente
2016
4 / 20
Contextos LR(0)
Un ejemplo trivial
Podemos construir los contextos
Regla
S → aA
S → bB
A → abA
A → bB
B → bBc
B → bc
LR(0) − CONTEXT
{aA}
{bB}
{a(ab)i A | i > 0}
{a(ab)i bB | i ≥ 0}
{a(ab)i bbj Bc, bbj Bc | i ≥ 0, j > 0}
{a(ab)i bbj c, bbj c | i ≥ 0, j > 0}
• Los contextos se deducen de las formas sentenciales más derechas.
• Cada contexto es un lenguaje posiblemente infinito.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
5 / 20
Gramáticas LR(0)
Gramáticas LR(0)
Definición
Diremos que una gramática G = (N, Σ, P, S) con símbolo inicial no
recursivo es LR(0) si
∀α ∈ (N ∪ Σ)∗ ∧ v ∈ Σ∗
cuando
α ∈ LR(0) − CONTEXT (A → β1 )
αv ∈ LR(0) − CONTEXT (B → β2 )
entonces v = λ, A = B y β1 = β2 .
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
6 / 20
Gramáticas LR(0)
Gramáticas LR(0)
Definición
Diremos que una gramática G = (N, Σ, P, S) con símbolo inicial no
recursivo es LR(0) si
∀α ∈ (N ∪ Σ)∗ ∧ v ∈ Σ∗
cuando
α ∈ LR(0) − CONTEXT (A → β1 )
αv ∈ LR(0) − CONTEXT (B → β2 )
entonces v = λ, A = B y β1 = β2 .
No hay ningún contexto LR(0) de una regla
que sea prefijo de un contexto LR(0) de otra regla.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
6 / 20
Gramáticas LR(0)
Hacia el determinismo
Keep shifting until you can reduce
Los contextos LR(0) proveen información para actuar ante un α particular:
1
Si α ∈ LR(0) − CONTEXT (A → β), se puede reducir con A → β.
2
Si α es un prefijo viable de algún LR(0) − CONTEXT , se avanza
(shift) con algún símbolo (terminal o no-terminal) para extenderlo.
3
En caso contrario, la entrada se rechaza.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
7 / 20
Gramáticas LR(0)
¿Qué pasa si hay más de una alternativa?
Conflictos LR(0)
• Si para un α particular encontramos
α ∈ LR(0) − CONTEXT (A → β1 )
α ∈ LR(0) − CONTEXT (B → β2 )
con A → β1 6= B → β2 tenemos un conflicto reduce/reduce LR(0)
pues no podemos decidir cuál regla reducir.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
8 / 20
Gramáticas LR(0)
¿Qué pasa si hay más de una alternativa?
Conflictos LR(0)
• Si para un α particular encontramos
α ∈ LR(0) − CONTEXT (A → β1 )
α ∈ LR(0) − CONTEXT (B → β2 )
con A → β1 6= B → β2 tenemos un conflicto reduce/reduce LR(0)
pues no podemos decidir cuál regla reducir.
• Si para un α particular encontramos
α ∈ LR(0) − CONTEXT (A → β1 )
αγ ∈ LR(0) − CONTEXT (B → β2 )
con γ 6= λ tenemos un conflicto shift/reduce LR(0) pues no
podemos decidir si reducir o continuar avanzando en la entrada.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
8 / 20
Máquina característica LR(0)
De prefijo hasta contexto
Items LR(0) de la gramática
Sea G = (N, Σ, P, S) y A → α ∈ P, diremos que
[A → α1 · α2 ]
es un item LR(0) para cualesquiera α1 , α2 ∈ (N ∪ Σ)∗ y α = α1 α2
• Un item de la forma [A → α·] se denomina item completo.
• Una producción A → α genera |α| + 1 items – uno por cada posible
posición del marcador en el lado derecho.
• Una producción A → λ solamente genera el item [A → ·]
Omitiremos los corchetes para ahorrar espacio.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
9 / 20
Máquina característica LR(0)
Otro ejemplo trivial
El conjunto de items LR(0) de la gramática
Regla
S→A
A → aAb
A→a
A→λ
Items LR(0)
S → ·A
S → A·
A → ·aAb
A → a · Ab
A → aA · b
A → aAb·
A → ·a
A → a·
A→·
LR(0) − CONTEXT
{A}
{ai Ab | i > 0}
{ai | i > 0}
{ai | i ≥ 0}
¿Puede identificar los conflictos?
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
10 / 20
Máquina característica LR(0)
Máquina característica LR(0)
Sea G = (N, Σ, P, S). Construiremos el λ − NFA
M = (Q, N ∪ Σ, δ, q0 , Q)
Q contiene todos los items LR(0) además del estado q0 , mientras
δ(q0 , λ) = {S → ·α | S → α ∈ P}
δ(A → α · aβ, a) = {A → αa · β}
δ(A → α · Bβ, B) = {A → αB · β}
δ(A → α · Bβ, λ) = {B → ·γ | B → γ ∈ P}
• M acepta los prefijos viables de la gramática – el cómputo de M
“avanza” hasta encontrar el lado derecho de una producción.
• Se puede construir determinístico en una sola operación.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
11 / 20
Máquina característica LR(0)
Sigue el ejemplo trivial
La máquina característica LR(0) de la gramática
A
Inicio
S→·A
A→·aAb
I0 :
A→·a
A→·
I1 : S → A·
a
A→a · Ab
A→a·
I2 : A→·aAb
A→·a
A→·
a
A
I3 : A → aA · b
b
I4 : A → aAb·
• Conflicto shift/reduce en I0 – shift a o reduce A → λ.
• Conflictos shift/reduce en I2 – shift a, reduce A → λ o reduce A → a.
• Conflicto reduce/reduce en I2 – reduce A → λ o reduce A → a.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
12 / 20
Máquina característica LR(0)
¿Y esa máquina sirve?
Theorem
Sea G una CFG y M su máquina característica LR(0), entonces
A → α · β ∈ δ̂(q0 , w )
si y sólo si w = pα con pαβ contexto LR(0) de A → αβ
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
13 / 20
Máquina característica LR(0)
¿Y esa máquina sirve?
Theorem
Sea G una CFG y M su máquina característica LR(0), entonces
A → α · β ∈ δ̂(q0 , w )
si y sólo si w = pα con pαβ contexto LR(0) de A → αβ
Theorem
Sea G una CFG con símbolo inicial no recursivo. Entonces G es LR(0) si y
sólo si δ̂ de su máquina característica determinística LR(0) satisface:
1
Si δ̂(qs , u) contiene únicamente un item A → α· con α 6= λ.
2
Si δ̂(qs , u) contiene un item A → · entonces el marcador siempre es
seguido por un no terminal en el resto de los items.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
13 / 20
Máquina característica LR(0)
¿Cómo aprovechamos la máquina?
Reconocedor basado en la máquina característica
input: G = (N, Σ, P, S) CFG LR(0), w ∈ Σ∗ y la Máquina LR(0) de G
u, v , error ← λ, w , false
repeat
if δ̂(q0 , u) contiene A → α· con u = pα then
u ← pA
else if δ̂(q0 , u) contiene A → α · β ∧ v 6= λ then
shift(u, v )
else
error ← true
end if
until u = S ∨ error
if u = S then
aceptar
else
rechazar
end if
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
14 / 20
Máquina característica LR(0)
Un ejemplo completo
Gramática GAE de expresiones aditivas
S → A#
A → A+T
A→T
T →b
T → (A)
• # es el terminador – mismo propósito que para LL(k)
• b abstrae números e identificadores.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
15 / 20
Máquina característica LR(0)
Expresiones Aditivas
La máquina característica LR(0) de GAE
I1 : A → T ·
T
T
Inicio
T →( · A)
A→·A+T
I7 : A→·T
T →·b
T →·(A)
A
(
I8 :
(
b
S→·A#
A→·A+T
I0 A→·T
T →·b
T →·(A)
b
A
I3 :
)
(
I2 : T → b·
T →(A · )
A→A · +T
+
A→A+ · T
I4 : T →·b
b
T →·(A)
+
S→A · # #
I6 : S → A#·
A→A · +T
I9 : T → (A)·
T
I5 : A → A+T ·
No hay conflictos – GAE es LR(0)
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
16 / 20
Máquina característica LR(0)
Otro ejemplo completo
Gramática GE de expresiones aditivas y multiplicativas
S → A#
A → A+T
A→T
T → T ∗F
T →F
F →b
F → (A)
• F genera subexpresiones multiplicativas – precedencia por gramática.
• b abstrae números e identificadores.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
17 / 20
Máquina característica LR(0)
Expresiones Aditivas y Multiplicativas
Parte de la máquina característica LR(0) de GE
Inicio
S→·A#
A→·A+T
A→·T
A→T ·
T
I0 T →·T ∗F
I1 :
T →T · ∗F
T →·F
F →·b
F →·(A)
Conflicto shift/reduce en I1 – GE no es LR(0)
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
18 / 20
Consideraciones
Consideraciones
• Estudie la demostración del Teorema 20.4.1 del libro de texto.
• Estudie la demostración del Teorema 20.4.4 del libro de texto.
• Sin construir la máquina característica, ¿la gramática GAE seguiría
siendo LR(0) si se agrega A → A−T ?
• Construya la máquina característica para GE e identifique todos los
conflictos presentes según su tipo.
• Use el algoritmo reconocedor basado en la máquina característica de
GAE para reconocer b + (b + b) e identifique las formas sentenciales
más derechas en el proceso.
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
19 / 20
Referencias Bibliográficas
Bibliografía
• [Sudkamp]
• Secciones 20.1 a 20.4
• Ejercicios 20.1 a 20.5
Hernández-Novich (USB)
Análisis Sintáctico Ascendente
2016
20 / 20
Descargar