Capitulo V
Capitulo V
Capitulo V
Asignatura de
COMPILADORES e INTÉRPRETES
@ V.2020 - 2021
DIAGRAMAS DE TRANSICIONES
Son grafos dirigidos que especifican el reconocimiento de un token como elemento del lenguaje.
En un diagrama de transición ( DT) se compila un token.
Partes:
i nicio
Estado inicial 0
Estado n
Estado final n
Transición 0 1
Arista id
Se dice que un token se compila en un DT, si este es reconocido o cumple una ruta desde el estado
inicial hasta un estado de aceptación (estado final).
DT básicos:
a
- ER: a | b inicio
0 1
b
L (a | b) = L(a) | L(b) = {a,b}
- ER: ab
inicio a b
0 1 2
L (ab) = L(a) L(b) = {ab}
a
- ER: a*
inicio Є
1
L (a*) = L(a)* = {Є, a, aa, aaa, aaaa, ...} 0
a
- ER: a+
inicio a
L (a+) = L(a)+ = {a, aa, aaa, aaaa, ...} 0 1
inicio a Є
a+ aa* 0 1 2
a*
EJERCICIOS
I. Desarrollar los Diagramas de Transición (DT) de las siguientes Expresiones Regulares
(ER).
1. (a | b) a*bb sobre ={a,b} 2. (a* | b+)* a* | b* sobre ={a, b}
a a
inicio Є Є Є Є
a 0 1 2 5 6
a b
b
inicio Є b b Є
0 1 2 3 4
b
3
b
Є Є
Є
2
Є Є 2
Є Є
inicio Є mn
0 1 Є mn
1 Є
Є 4 4 4
Є Є Є
3
3
Є
Є
xy xy
mn
Є
Є
0 0 1
3 6 11
Є Є Є Є Є Є
inicio Є 1 Є 1 Є 0
0 1 2 4 5 9 10
Є
Є
0
Є Є
1
1 7
Є
II. Desarrollar los Diagra mas de Transición (DT) de las siguientes Definicione s Regulares
(DR).
1. Números enteros con signo y sin signo.
DR: num_entero (-|+| ) digito+
- digito
Inicio + digito
0 1 2 3
digito digito
digito
inicio + digito .
0 1 2 3
-
digito
digito digito
E + digito
4 5 6 7 8
4. Identificadores
DR: id letra (letra|digito|_)*
inicio letra
0 1 letra 2 3
digito
inicio
5. Operadores relaciona les 0 > 1
<
2
=
3
< >
4 5
< 6 =
7
>
=
8 9
inicio
6. Operadores lógicos AND
0 1
OR
2
NOT
3
-
2
/
3
*
4
8. Constantes numéricas
DR: const (int | flota | char | ) id = digito +(.digito +| )
id letra (letra | digito | -)*
char
digito
-
inicio int letra = digito
2 letra
3 5
0 1 4
digito .
float
digito
digito
6 7
9. Numero entero, real y nota ción científica, todo al mismo tiempo con y sin signo
digito digito
digito
E + digito
5 6 7 8
espacio
inicio
letra letra
0 1 2 3
digito
Carar_esp
prop_printf printf(“mensaje”,var_esc)|printf(“mensaje”)
printf ( “ mensaje “
10 11 12 13 14
)
15
-
inicio t_dato letra letra (
0 1 2 3 4
digito t_dato
5
letra
-
-
letra , t_dato
6 7 8 9 letra letra 11
10
digito
digito