soluciones

Anuncio
Procesadores de lenguajes
Ejercicios del Tema 4
EJERCICIO 5.7
La siguiente gramática representa la sintaxis de la instrucción de asignación de un lenguaje
basado en conjuntos:
Asig J id igual Expr pyc
Expr J Base
Expr J Expr union Base
Expr J Expr interseccion Base
Base J llave_ab Elem llave_ce
Base J par_ab Expr par_ce
Elem J num
Elem J Elem coma num
A continuación se muestra un ejemplo de una cadena de entrada para esta gramática:
A = { 1 , 2 } ∪ ( { 3 , 4, 5 } ∩ { 3 , 5 } ) ;
(a) Describa los estados y transiciones del autómata reconocedor de prefijos viables.
(b) Construya la tabla de análisis SLR de la gramática planteada.
SOLUCION:
(a) Describa los estados y transiciones del autómata reconocedor de prefijos viables
Estado
Elementos
0
X J * Asig
Asig J * id igual Expr pyc
1
X J Asig *
2
Asig J id * igual Expr pyc
1
Transiciones
Asig J 1
id J 2
igual J
3
Estado
3
4
Elementos
Transiciones
Asig J id igual * Expr pyc
Expr J * Base
Expr J * Expr union Base
Expr J * Expr interseccion Base
Base J * llave_ab Elem llave_ce
Base J * par_ab Expr par_ce
Expr J 4
Base J 5
Asig J id igual Expr * pyc
Expr J Expr * union Base
Expr J Expr * interseccion Base
pyc J 8
union J 9
interseccion
llave_ab J 6
par_ab J 7
5
Expr J Base *
6
Base J llave_ab * Elem llave_ce
Elem J * num
Elem J * Elem coma num
Elem J 11
num J 12
7
Base J par_ab * Expr par_ce
Expr J * Base
Expr J * Expr union Base
Expr J * Expr interseccion Base
Base J * llave_ab Elem llave_ce
Base J * par_ab Expr par_ce
Expr J 13
Base J 5
J 10
llave_ab J 6
par_ab J 7
8
Asig J id igual Expr pyc *
9
Expr J Expr union * Base
Base J * llave_ab Elem llave_ce
Base J * par_ab Expr par_ce
Base J 14
llave_ab J 6
par_ab J 7
10
Expr J Expr interseccion * Base
Base J * llave_ab Elem llave_ce
Base J * par_ab Expr par_ce
Base J 15
llave_ab J 6
par_ab J 7
11
Base J llave_ab Elem * llave_ce
Elem J Elem * coma num
llave_ce J 16
coma J 17
12
Elem J num *
13
Base J par_ab Expr * par_ce
Expr J Expr * union Base
Expr J Expr * interseccion Base
14
Expr J Expr union Base *
15
Expr J Expr interseccion Base *
16
Base J llave_ab Elem llave_ce *
17
Elem J Elem coma * num
18
Base J par_ab Expr par_ce *
19
Elem J Elem coma num *
par_ce J 18
union J 9
interseccion J
num
J 19
10
(b)
Siguientes(Asig) = { $ }
Siguientes(Expr) = { pyc, union, interseccion, par_ce }
Siguientes(Base) = { pyc, union, interseccion, par_ce }
Siguientes(Elem) = { llava_ce, coma }
Est.
id
0
d2
=
;
num
∪
∩
{
}
(
)
,
A
Ex
B
4
5
OK
d3
3
d6
4
d8
d9
d10
5
R2
R2
R2
6
d7
R2
d12
11
7
d6
d7
13
8
5
R1
9
d6
d7
14
10
d6
d7
15
11
d16
d17
12
R7
R7
13
d9
d10
d18
14
R3
R3
R3
R3
15
R4
R4
R4
R4
16
R5
R5
R5
R5
R6
R6
R6
17
18
19
El
1
1
2
$
d19
R6
R8
R8
EJERCICIO 5.17
La siguiente gramática permite describir expresiones vectoriales formadas por dos operaciones: la suma de vectores y el producto de un escalar por un vector.
Expr J Factor
Expr J Expr plus Factor
Expr J Expr minus
Factor
Factor J vector
Factor J num prod
Factor
Factor J lpar Expr rpar
(a) Construya el autómata reconocedor de prefijos viables de la gramática anterior
(b) Construya la tabla de análisis SLR de la gramática planteada. Utilice para ello la tabla
incluida en la última página.
(c) Realice la traza para el siguiente ejemplo
3 * v1 + 2 * ( v2 - 5 * v3 )
SOLUCIÓN:
(a)
Estado
0
1
Elementos
Transiciones
X J * Expr
Expr J * Factor
Expr J * Expr plus Factor
Expr J * Expr minus Factor
Factor J * vector
Factor J * num prod Factor
Factor J * lpar Expr rpar
Expr J 1
Factor J 2
X J Expr *
Expr J Expr * plus Factor
Expr J Expr * minus Factor
vector J 3
num J 4
lpar J 5
plus J 6
minus J 7
2
Expr J Factor *
3
Factor J vector *
4
Factor J num * prod
5
Factor J lpar * Expr rpar
Expr J * Factor
Expr J * Expr plus Factor
Expr J * Expr minus Factor
Factor J * vector
Factor J * num prod Factor
Factor J * lpar Expr rpar
Expr J 9
Factor J 2
6
Expr J Expr plus * Factor
Factor J * vector
Factor J * num prod Factor
Factor J * lpar Expr rpar
Factor J 10
vector J 3
num J 4
lpar J 5
7
Expr J Expr minus * Factor
Factor J * vector
Factor J * num prod Factor
Factor J * lpar Expr rpar
Factor J 11
vector J 3
num J 4
lpar J 5
8
Factor J num prod * Factor
Factor J * vector
Factor J * num prod Factor
Factor J * lpar Expr rpar
Factor J 12
vector J 3
num J 4
lpar J 5
9
Factor J lpar Expr * rpar
Expr J Expr * plus Factor
Expr J Expr * minus Factor
rpar J 13
plus J 6
minus J 7
10
Expr J Expr plus Factor *
11
Expr J Expr minus Factor *
Factor
prod J
8
vector J 3
num J 4
lpar J 5
Estado
Elementos
Transiciones
12
Factor J num prod Factor *
13
Factor J lpar Expr rpar *
(b)
Siguientes(Expr) = { $, plus, minus, rpar }
Siguientes(Factor) = { $, plus, minus, rpar }
Estado
plus
minus
0
num
prod
d4
lpar
rpar
d5
vector
$
d3
1
d6
d7
2
r1
r1
r1
r1
3
r4
r4
r4
r4
Expr
Factor
1
2
9
2
OK
4
d8
5
d4
d5
d3
6
d4
d5
d3
10
7
d4
d5
d3
11
8
d4
d5
d3
12
9
d6
d7
d13
10
r2
r2
r2
r2
11
r3
r3
r3
r3
12
r5
r5
r5
r5
13
r6
r6
r6
r6
Descargar