Procesadores de lenguaje - Departamento de Ciencias de la

Anuncio
Recursividad: ejercicios
Obt
Obtener
las
l gramáticas
áti
que producen:
d
Procesadores de lenguaje
Ejercicios de análisis sintáctico
Salvador Sánchez
Sánchez, Daniel Rodríguez
Departamento de Ciencias de la Computación
Universidad de Alcalá
1.
1
2.
3.
4.
5.
6
6.
7.
8.
U o más
Una
á aes con recursividad
i id d por lla iizquierda
i d ((r.i)
i)
Cero o más aes (r.i)
Una o más aes con recursividad por la derecha (r.d)
Cero o más aes (r.d)
Una b y cero o más aes (r.i)
Cero o más aes terminando en b (r
(r.d)
d)
Cero o más aes separadas por ‘;’ (r.d)
Una o más aes separadas por ‘;’ (r.i)
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Soluciones
Analizador descendente recursivo
1. A->Aa
1
A A |a
2. A->Aa | ε
3. A->aA | a
4. A->aA | ε
5. A->Aa | b
6. A->aA | b
7. A->aB | ε
B->;aB | ε
8. A->A;a | a
• Ejemplos:
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
1. Mostrar las acciones de un analizador descendente recursivo que analiza la
cadena “aaab” según la gramática: A ÆaA | b
2. Para la gramática anterior, analizar la cadena “abaab”.
3. Mostrar las acciones de un analizador descendente recursivo que analiza la
cadena “aba” según la gramática: A Æab | aA
4. Mostrar las acciones de un analizador descendente recursivo para la cadena
de entrada “IDENT()” según la gramática:
S t
Sentencia
i Æ Asignación
A i
ió | Llamada
Ll
d | otro
t
Asignación Æ Identificador := Valor
LlamadaÆ Identificador ()
Analizador LL(1) – Conjunto primero
Analizador LL(1) - Conjunto primero
1.Calcular
1
C l l ell conjunto
j t Primero
Pi
d A para lla gramática
de
áti
siguiente:
1 C j t Primero
1.Conjunto
Pi
d A para lla gramática
de
áti siguiente:
i i t
AÆ (A)A | ε
AÆ (A)A | ε
SOLUCIÓN: Primero(A) = { ( , є }
2.Calcular el conjunto Primero de los no terminales A, B y
C para la gramática siguiente:
2.Conjunto Primero de los no terminales A, B y C:
AÆ BC
BÆ ε | m
CÆ ε | s
AÆ BC
BÆ ε | m
CÆ ε | s
SOLUCIÓN: Primero(A) = {m, s, є}, Primero(B) = {m, є}, Primero(C) = {s, ε}
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LL(1) - Conjunto siguiente
• Ejemplo
Ej
l 1:
1
S Æ aBCd
BCd
B Æ bb
C Æ cc
• Ejemplo 2:
S Æ aBCd
B Æ bB | d
C Æ cc
• Ejemplo
Ej
l 3:
3
S Æ aBCd
BCd
B Æ CB | b
C Æ cc | ε
• Ejemplo 4:
S Æ if B then S | write B | id := B
B Æ id = id | id <> id | true | false
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LL(1) - Conjunto siguiente
1.
Solución:
Prim(S)={a}, Prim(B)={b}, Prim(C)={c}
Sig(S)={$}, Sig(B)={c}, Sig(C)={d}
2.
Solución:
Prim(S)={a}, Prim(B)={b,d}, Prim(C)={c}
Sig(S)={$}, Sig(B)={c}, Sig(C)={d}
3.
Solución:
Prim(S)={a}, Prim(B)={b,c}, Prim(C)={c, ε}
Sig(S)={$}, Sig(B)={c,d} Sig(C)={b,c,d}
4.
Solución:
Prim(S)={if, write, id}, Prim(B)={id, true, false}
Sig(S)={$}, Sig(B)={then, $}
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LL(1) - Análisis
Solución
1. Comprobar si la siguiente gramática es LL(1) y construir la
tabla, calculando todos los conjuntos Siguiente y Primero.
Pasos para ver si es LL(1):
1.-- No es recursiva a izquierdas
1
izquierdas.
2.- B→ b | є
2.1. Prim(b) ∩ Prim(ε) = vacío
2 2 Si ε ∈ Prim(ε) =>
2.2.
> Prim(b) ∩ Sig(B) = vacío
S → cA
A → aB
B→b|ε
Conjuntos
j
primero:
p
Prim(S)={c}
2. Reconocer la cadena “cab” con el analizador construido.
Prim(A)={a}
Prim(B)={b, ε}
Conjuntos siguiente:
Sig(S)={$}
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Sig(A)=Sig(S)={$}
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Solución
Solución
Tabla de análisis:
Reconocer la cadena “cab”
c
S
A
a
b
$
S → cA
A
A → aB
B
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Sig(B)=Sig(A)={$}
B→b
B→ε
cab$
$S
$Ac
$A
$Ba
$B
$b
$
Reconocimiento
A→aB
Reconocimiento
B→b
Reconocimiento
éxito
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
cab$
ab$
ab$
b$
b$
$
Analizador LL(1) - Análisis
1 C
1.
Comprobar
b sii la
l siguiente
i i t gramática
áti es LL(1) y construir
t i la
l
tabla de análisis y todos los conjuntos Siguiente y Primero.
E Æ TE’
E’ Æ +TE’ | є
T Æ FT
FT’
T’ Æ *FT’ | є
F Æ (E) | id
Solución
Prim (E) = { ((, id }
Prim (E’) = { +, є }
Prim (T) = { (, id }
Prim (T’) = { *, є }
Prim (F) = { (, id }
Sig (E) = { $,
Si
$ )}
Sig (E’) = { $, ) }
Sig (T) = {+
{+, $
$, )}
Sig (T’) = { +, $, )}
g ((F)) = {{*,+, $, )}
Sig
2. Reconocer la cadena “(3+5*8)” con el analizador construido.
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Solución
Reconocimiento de la cadena: (3+5*8)
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LL(1) - Análisis
1 A partir
1.
ti d
de la
l siguiente
i i t gramática,
áti
construir
t i la
l tabla
t bl de
d análisis
áli i
y todos los conjuntos Siguiente y Primero.
B -> DL
D -> id ; D | є
L ->
>S;L|є
S -> a + a
2. Reconocer la cadena “id;a+a;” con el analizador construido.
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LL(1) - Análisis
Prim(B)
P
i (B) = { id
id, a, ε }
Prim(D) = { id, є }
Prim(L) = { a
a, є }
Prim(S) = { a }
Analizador LL(1) - Análisis
Pila
Sig(B)
S
( )={$}
Sig(D) = { a, $ }
Sig(L) = { $ }
Sig(S) = { ; }
Reconocer:
id;a+a;
Decisión
Entrada
$B
BÆDL
$LD
DÆid;D
id;a+a;$
$LD;id
Reconocer id
id;a+a;$
$LD;
Reconocer ;
;a+a;$
$LD
$L
id;a+a;$
DÆє
a+a;$
LÆS;L
a+a;$
$
id
;
a
+
$L;S
SÆa+a
a+a;$
B
BÆDL
BÆDL
-
BÆDL
-
$L;a+a
Reconocer a
a+a;$
D
DÆє
DÆid;D
-
DÆ є
-
$L;a+
Reconocer +
+a;$
L
LÆє
-
-
;
LÆS;L
-
$L;a
Reconocer a
a;$
S
-
-
-
SÆa+a
-
$L;
Reconocer ;
;$
$L
LÆє
$
$
EXITO
$
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LR(0) - Análisis
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LR(0) - Análisis
S1
E’ Æ E.
E
1 A partir
1.
ti d
de la
l siguiente
i i t gramática,
áti
construir
t i ell autómata
tó t finito
fi it
determinista y la tabla de análisis para el analizador LR(0).
S0
E’Æ.E
E Æ.(E+T)
Æ (E T)
EÆ .id
E Æ (E + T) | id
T Æ (T * F) | id
F Æ id
E
S2
(
id
id
S3
(
E Æ (.E+T)
E Æ .(E+T)
(E+T)
E Æ .id
E Æ (E.+T)
(E +T)
E
S13
+
E Æ id.
id
S4
S8
T Æ (T.*F)
2 Reconocer la cadena “(6+(4*2))”
2.
(6+(4 2)) .
*
T
F Æ id.
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
id
T
T Æ (.T*F)
T Æ .(T*F)
T Æ .id
T Æ (T*.F)
FÆ.id
S12
(
S6
S9
E Æ (E+.T)
T Æ .(T*F)
T Æ .id
id
(
S14
id
F
S10
T Æ (T*F.)
)
T Æ id.
S11
T Æ(T*F).
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
S5
E Æ (E+T.)
)
S7
E Æ (E+T).
Analizador LR(0) - Análisis
Analizador LR(0) - Análisis
Pila
Entrada
Estado
Acción
0
1
Desplazamiento
2
3
Desplazamiento
Desplazamiento
4
Desplazamiento
5
Desplazamiento
6
Desplazamiento
7
8
Desplazamiento
esp a a e to
Regla
Reducción
id
E
2
)
*
+
13
1
2
13
3
T
F
E’ÆE
14
5
7
6
14
8
9
12
Desplazamiento
10
11
11
12
Reducción
TÆ (T*F)
Reducción
F Æ id
13
Reducción
E Æ id
14
Reducción
T Æ id
$0
$0(2
Entrada
(6+(4*2))$
Desplazar
6+(4*2))$
+(4*2))$
(
))$
Ir_a 3
+(4*2))$
$0(2E3
Desplazar
+(4*2))$
$0(2E3+4
Desplazar
(4*2))$
$0(2E3+4(6
Desplazar
4*2))$
Reducir TÆid
*2))$
$0(2E3+4(6T
Ir_a 8
*2))$
$0(2E3+4(6T8
Desplazar
*2))$
$0(2E3+4(6T8*9
$0(2E3+4(6T8*9212
$0(2E3+4(6T8*9F
$0(2E3+4(6T8*9F10
$0(2E3+4(6T8*9F10)11
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Decisión
Desplazar
Reducir EÆid
$0(2613
$
(
$0(2E3+4(6414
EÆ(E+T)
Desplazamiento
Reconocer:
(6+(4*2))
$0(2E
4
6
Reducción
9
10
(
Ir_a
Desplazar
))$
Reducir FÆid
))$
Ir_a 10
))$
Desplazar
))$
Reducir TÆ(T*F)
)$
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LR(0) - Análisis
Analizador LR(0) - Análisis
1 A partir
1.
ti d
de la
l siguiente
i i t gramática,
áti
construir
t i ell autómata
tó t finito
fi it
determinista y la tabla de análisis para el analizador LR(0).
Reconocer:
(6+(4*2))
Pila
...
$0(2E3+4T
$0(2E3+4T5
$0(2E3+4T5)7
Decisión
Entrada
...
...
SÆ (S)S|ε
Ir_a 5
)$
Desplazar
)$
Reducir EÆ(E+T)
(
)
$
Ir_a 1
$
$0E1
Reducir E’ÆE
$
$0E'
EXITO
$
$0E
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
2. Reconocer la cadena “(())()”.
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LR(0) - Análisis
Analizador LR(0) - Análisis
Conflictos:
S0: Desplazamiento-reducción
S2: Desplazamiento-reducción
S4: Desplazamiento
Desplazamiento-reducción
reducción
E t d
Entrada
Acción
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LR(0) - Análisis
1 A partir
1.
ti d
de la
l siguiente
i i t gramática,
áti
construir
t i ell autómata
tó t finito
fi it
determinista y la tabla de análisis para el analizador SLR(1).
E Æ (E + T) | id
T Æ (T * F) | id
F Æ id
2 Reconocer la cadena “(6+(4*2))”
2.
(6+(4 2)) .
(
2
1
2
3
Desplazar / Reducir
SÆЄ
1
Reducir
S’ÆS
2
Desplazar / Reducir
SÆ Є
3
Desplazar
4
Desplazar / Reducir
5
Reducir
SÆ Є
SÆ(S)S
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador SLR(1) - Análisis
E’Æ
EÆ
TÆ
FÆ
E
(E + T) | id
(T * F) | id
id
b) Conjuntos Siguiente:
Sig (E’) = { $ }
Sig (E) = { + , $ }
Sig (T) = { * , ) }
Sig (F) = { ) }
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Regla
0
a)) Ampliar
A li lla gramática:
áti
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
I a
Ir
)
4
2
5
Analizador SLR(1) - Análisis
Analizador SLR(1) - Análisis
S1
c)) Autómata:
A tó t
d) Tabla
T bl análisis:
áli i
E’ Æ E.
E
S0
E’Æ.E
E Æ.(E+T)
EÆ .id
S2
id
id
S3
(
E Æ (.E+T)
E Æ .(E+T)
E Æ .id
(
E Æ (E.+T)
E
S13
S4
S8
*
T
T Æ (T*.F)
FÆ.id
S12
id
(
F
S10
T Æ (T*F.)
)
S5
E Æ (E+T.)
S14
)
T Æ id.
id
S7
E Æ (E+T).
S11
T Æ(T*F).
+
id
E
D: 13
1
D: 13
3
T
F
Aceptar
D: 2
4
D: 6
D: 4
D: 14
5
D: 14
8
D: 7
D: 6
R: EÆ(E+T)
R:EÆ(E+T)
D: 9
9
10
D: 12
10
D: 11
11
12
13
*
D: 2
2
3
7
8
)
R:TÆ (T*F) R:TÆ (T*F)
R: F Æ id
R: E Æ id
R: EÆ id
R: T Æ id R: T Æ id
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador SLR(1) - Análisis
Pila
(
14
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
e) Reconocer
(6+(4*2))
$
5
6
T
id
id
F Æ id.
E Æ (E+.T)
T Æ .(T*F)
T Æ .id
(
S6
T Æ (.T*F)
T Æ .(T*F)
T Æ .id
S9
0
1
+
E Æ id.
T Æ (T.*F)
Ir_a
Estado
Decisión
Analizador SLR(1) - Análisis
Entrada
$0
D:2
(6+(4*2))$
$0(2
D:13
6+(4*2))$
e) Reconocer (6+(4*2)):
R: EÆid
+(4*2))$
(
))$
Ir_a 3
+(4*2))$
$0(2E3
D:4
+(4*2))$
Pila
Decisión
Entrada
$0(2E3+4
D:6
(4*2))$
...
...
...
$0(2E3+4(6
D:14
4*2))$
$0(2613
$
(
$0(2E
$0(2E3+4T
R: TÆid
*2))$
$0(2E3+4T5
$0(2E3+4(6T
Ir_a 8
*2))$
$0(2E3+4T5)7
$0(2E3+4(6T8
D:9
*2))$
$0E
$0(2E3+4(6414
D:12
))$
$0(2E3+4(6T8*9212
R: FÆid
))$
$0(2E3+4(6T8*9F
Ir_a 10
))$
D:11
))$
$0(2E3+4(6T8*9
$0(2E3+4(6T8*9F10
$0(2E3+4(6T8*9F10)11
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
R: TÆ(T*F)
$0E1
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
)$
D:7
)$
R: EÆ(E+T)
(
)
$
Ir_a 1
$
Aceptar
$
EXITO
)$
Ir_a 5
Analizador SLR(1) - Análisis
Análisis sintáctico SLR(1)
1 A partir
1.
ti d
de la
l siguiente
i i t gramática,
áti
construir
t i ell autómata
tó t finito
fi it
determinista y la tabla de análisis para el analizador SLR(1).
A tó t
Autómata:
S Æ (S) S | ε
2 Reconocer la cadena “(( ( ) )( )”
2.
) .
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Análisis sintáctico SLR(1)
Analizador SLR(1) - Análisis
• Tabla:
T bl
• Reconocer
Siguiente(S’) = { $ }
g
( )={),$}
Siguiente(S)
(())()
Pila
(())()$
$0(2
D:2
())()$
$0(2(2S
0
(
)
$
S
D-2
R: SÆЄ
R: SÆЄ
1
1
2
Aceptar
D-2
3
4
5
R: SÆЄ
R: SÆЄ
D-4
D-2
R: SÆЄ
R: SÆЄ
R: SÆ(S)S
R: SÆ(S)S
$0(2(2S3
$0(2(2S3)4
$0(2(2S3)4S
5
))()$
Ir_a 3
))()$
D: 4
))()$
R: SÆЄ
)()$
Ir_a 5
)()$
)()$
Ir_a 3
)()$
$0(2S3
D: 4
)()$
$0(2S3)4
D:2
()$
$0(2S3)4(2
$0(2S3)4(2S
$0(2S3)4(2S3
$0(2S3)4(2S3)4
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
R: SÆЄ
R: SÆ(S)S
$0(2(2S3)4S5
$0(2S
3
Entrada
D:2
$0(2(2
$
( (
Ir a
Decisión
$0
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
R: SÆЄ
)$
Ir_a 3
)$
D: 4
)$
R: SÆЄ
$
Analizador SLR(1) - Análisis
Análisis SLR(1)
E -> E OR E
| E AND E
| (E)
|0
|1
e) Reconocer (())()
Pila
Decisión
Entrada
...
...
...
$0(2S3)4(2S3)4
$
(
) (
)
R: SÆЄ
$
Ir_a 5
$
R: SÆ(S)S
$
$0(2S3)4(2S3)4S
$0(2S3)4(2S3)4S5
Ir_a
_ 5
$
R: SÆ(S)S
$
R: SÆЄ
$
$0(2S3)4S
$0(2S3)4S5
$0
$0S
Ir_a 1
$
$0S1
Aceptar
$
EXITO
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Cont. Solución
Estado
OR
AND
s2
s3
0
1
(
Analizador LALR(1)
)
s6
2
s6
4
s2/r2
s3/r2
5
s2/r3
s3/r3
6
1
s9
s10
r1
s6
3
0
s9
s10
s9
s10
1
S ÆS
S’ÆS
SÆL=R | R
LÆ*R | id
RÆL
4
5
r2
r3
r3
s9
s10
7
7
s2
s3
s8
8
r4
r4
r4
r4
9
r5
r5
r5
r5
10
r6
r6
r6
r6
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
E
aceptar
r2
s6
#
Hay un conflicto de Reducción
por Desplazamiento en S2:
- La gramática no es SLR
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LALR(1) - Autómata I
S ÆS
S’ÆS
SÆL=R | R
LÆ*R | id
RÆL
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LALR(1) - Tabla de análisis
R0:
R1:
R2:
R3:
R4:
R5:
Analizador LALR(1) - Autómata II
S ÆS
S’ÆS
SÆL=R | R
LÆ*R | id
RÆL
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LALR(1) - Análisis
S’Æ
SÆS
SÆ L=R
SÆ R
LÆ *R
R
LÆ id
RÆ L
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Analizador LALR(1) - Análisis
Procesadores de lenguaje – Ejercicios Análisis Sintáctico
Salvador Sánchez, Daniel Rodríguez
Descargar