Examen resuelto de Junio de 2012

Anuncio
LENGUAJES FORMALES Y AUTÓMATAS
15/06/2012
Apellidos: _______________________________________________________________________
Nombre: ________________________________________________________________________
Titulación: ITIS
II (marque con un círculo)
TEST (3 puntos)
Responda si los siguientes enunciados - precedidos por una letra - son verdaderos o
falsos. Utilice para ello una de las tablas que figuran al final. A la hora de rellenar la
tabla, coloque una cruz en la fila V si considera que el enunciado de la correspondiente
columna es verdadero o, de forma excluyente, coloque una cruz en la fila F cuando
considere que es falso. Cada respuesta correcta sumará 0.2. Las respuestas incorrectas
restarán 0.2 y las respuestas en blanco no serán evaluadas.
•
•
•
•
Sobre cadenas y lenguajes:
∗
A. Si ab∈L y L⊆Σ , entonces Σ={a,b}
∗
i
B. Si L1⊆Σ1 y L2={ ω | 0 ≤ i ≤ 1, ω∈L1 }, entonces L2=L1
∗
i
C. Si L1⊆Σ1 y L2={ ω | 0 ≤ i ≤ 1, ω∈L1 }, entonces L2⊆L1
j
D. Si |ω| = i, entonces |ω | = i·j ∀i,j ≥ 0
m n
E. Si |x| = i e |y| = j , entonces | x y | = i·m + j·n ∀i,j,m,n ≥ 0
Sean α, β y γ tres expresiones regulares arbitrarias:
F. (α+β)αβ*+α = (β+α)α+(αβ)*
G. ((αα*+(β∅)*)β)* = (α+β)*β+λ
H. ((αα*+(β∅)*)β)* = (α*β)*α*
Sobre gramáticas independientes del contexto:
i j
I. El lenguaje L={0 10 | i>0 ó j>0} es inherentemente ambiguo
J. Toda gramática ambigua G puede transformarse en otra gramática equivalente
G’ no ambigua
K. Si L(G)=L(G’) y G≠G’, entonces G es ambigua
L. Si L(G)=L(G’) y G≠G’, entonces L(G) es ambiguo
Sobre los lenguajes y las máquinas de Turing:
M. Dada una MT M y la configuración ab∆qi∆, si δ(qi, ∆)={} entonces ab∈L(M)
N. Dada una MT M y la configuración ab∆qi∆, si ab∈L(M) entonces δ(qi, ∆)={}
O. Dada una MT M y la configuración ab∆qi∆, si qi es final entonces δ(qi, ∆)={}
V
F
A
B
C
D
X
E
X
F
X
X
X
A
B
C
D
E
F
A
B
C
D
E
F
G
X
H
I
J
K
L
M
N
X
X
X
X
X
X
X
G
H
I
J
K
L
M
N
O
G
H
I
J
K
L
M
N
O
X
O
X
V
F
V
F
LENGUAJES FORMALES Y AUTÓMATAS
15/06/2012
Apellidos: _______________________________________________________________________
Nombre: ________________________________________________________________________
Titulación: ITIS
II (marque con un círculo)
Ejercicio 1 (1,5 puntos):
Diseñe un AFD para el siguiente lenguaje L sobre el alfabeto Σ={0,1} con un máximo
de 10 estados:
L={ω∈Σ∗ | ω contiene un número par de ‘0’s y contiene la subcadena ‘010’}
Solución:
LENGUAJES FORMALES Y AUTÓMATAS
15/06/2012
Apellidos: _______________________________________________________________________
Nombre: ________________________________________________________________________
Titulación: ITIS
II (marque con un círculo)
Ejercicio 2 (1,5 puntos):
Se pretende obtener una MT que sea capaz de reconocer el siguiente lenguaje:
L = { (anbkcn )k | k,n > 0}
Para ello se está construyendo la siguiente MT, cuya configuración inicial es ∆q0ω∆,
siendo q0 el estado inicial y ω la cadena de entrada:
a
→ q0
b
c
∆
B
C
D
X
Y
q4,X/D
q2,Y/D
q3,Y/I
q5,C/I
q5,X/I
q5,Y/I
q6,C/D
q6,X/D
q6,Y/D
q8,D/D
q7,X/I
q8,X/D
q7,Y/I
q1,X/D
q1,a/D
q1
q2
q3,a/I
q3
q4 q1,X/D
q5
q6 q1,X/D
q7
q8
q9
q10
q11
* q12
q2,b/D
q2,b/D
q3,b/I
q5,b/I
q5,b/I
q3,Y/I
q6,b/D
q6,C/D
q7,∆/I
q7,b/I
q9,B/I
q8,B/D
q10,∆/D
q9,B/I
q10,X/D
q7,b/I
q12,∆/I
q8,D/D
q8,D/D
q9,D/I
q9,X/I
q10,C/D
q10,X/D
q11,X/D
q11,X/D
q11,X/D
a) Complete la tabla rellenando las casillas necesarias para que la MT consiga su
propósito.
NOTAS:
• Resuelva este apartado completando la tabla que aparece arriba.
• Para facilitar la tarea de análisis de la MT se aporta el grafo equivalente a
la tabla del enunciado.
b) Indique cuál sería la configuración final si comenzase con la configuración
∆q0aabbccabbc∆
Solución:
a) (ver tabla del enunciado)
b) ∆CCXXXXXXXXXq12X∆
Grafo equivalente a la tabla del Ejercicio 2:
LENGUAJES FORMALES Y AUTÓMATAS
15/06/2012
Apellidos: _______________________________________________________________________
Nombre: ________________________________________________________________________
Titulación: ITIS
II (marque con un círculo)
Ejercicio 3 (1 punto):
NOTA: SOLO PARA ALUMNOS DE I.I.
Dado el siguiente λ-AFND M:
a) Escriba una expresión regular simplificada para L(M)
b) Obtenga una gramática GIC que genere L(M) con el menor número de reglas
posible
c) Obtenga una gramática GREG(dcha) que genere L(M)
Solución:
a) a(b+bab)*baa
b) GIC:
S → aBbaa | abaa
B → bB | babB | b | bab
c) GREG(dcha):
S → aB
B → bC | bB | bE
C → aD
D → bB
E → aA
A→a
LENGUAJES FORMALES Y AUTÓMATAS
15/06/2012
Apellidos: _______________________________________________________________________
Nombre: ________________________________________________________________________
Titulación: ITIS
II (marque con un círculo)
Ejercicio LAB (II: 3 puntos; ITIS: 4 puntos):
Los GPS-loggers son dispositivos que almacenan en un fichero la localización
geográfica durante un periodo de tiempo registrando los datos cada pocos segundos. A
continuación se muestra un ejemplo de este tipo de ficheros, donde se almacena la
latitud, longitud, fecha, hora y velocidad de cada instante de tiempo registrado
(trackpoint):
TRACKPOINT
lat=37.367212 lon=-4.013519
<time 2007-11-23T12:29:13Z >
<speed 29.355597 >
END_TRACKPOINT
TRACKPOINT
lat=37.367686 lon=-4.013217
<time 2007-11-23T12:29:18Z >
<speed 42.514328 >
END_TRACKPOINT
TRACKPOINT
lat=37.368169 lon=-4.012936
<time 2007-11-23T12:29:22Z >
<speed 53.290365 >
END_TRACKPOINT
Se pide:
1) El fichero JFlex preparado para trabajar con Cup.
2) El fichero CUP.
3) Una atribución de manera que se imprima la latitud mínima registrada en todo el
fichero:
Latitud Mínima = Nº.
4) (Solo alumnos de I.T.I.S.) Una atribución para calcular la velocidad media de
todo el trayecto:
Velocidad Media = Nº.
NOTAS:
- No se permite el uso de bloques ‘Action Code’ ni de ‘static’.
- Se pueden implementar clases adicionales.
- Siempre habrá al menos un ‘trackpoint’.
- Los números reales siempre tendrán un punto y algún dígito decimal.
Solución:
Lexer:
import java_cup.runtime.*;
%%
%class Lexer
%unicode
LENGUAJES FORMALES Y AUTÓMATAS
15/06/2012
Apellidos: _______________________________________________________________________
Nombre: ________________________________________________________________________
Titulación: ITIS
II (marque con un círculo)
%cup
Blanco
= [ \t\r\n\f]
Fecha
= [0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]T[0-9][0-9]:[09][0-9]:[0-9][0-9]Z
Numero
= [+\-]?[0-9]*"."[0-9]+
%%
{Blanco}+
TRACKPOINT
END_TRACKPOINT
lat
lon
time
speed
{Fecha}
{Numero}
"<"
">"
"="
.
{;}
{return new Symbol (sym.INIT);}
{return new Symbol (sym.ENDT);}
{return new Symbol (sym.LAT);}
{return new Symbol (sym.LON);}
{return new Symbol (sym.TIME);}
{return new Symbol (sym.SPEED);}
{return new Symbol (sym.FECHA);}
{return new Symbol (sym.NUM,new Float(yytext()));}
{return new Symbol (sym.MENOR);}
{return new Symbol (sym.MAYOR);}
{return new Symbol (sym.IGUAL);}
{System.out.println ("Error léxico.");}
Parser (apartado 3):
terminal INIT,ENDT,LAT,LON,IGUAL,MENOR,MAYOR,SPEED,TIME,FECHA;
terminal Float NUM;
non terminal entrada,tiempo,velocidad;
non terminal Float lista,trackpoint,posicion;
entrada ::= lista:min
{: System.out.print("Latitud Minima = "+min); :}
;
lista ::= lista:t1 trackpoint:t2
{: if (t1.floatValue() < t2.floatValue()){
RESULT = t1;
} else {
RESULT = t2;
}
:}
| trackpoint:t
{: RESULT = t; :}
;
trackpoint ::= INIT posicion:p tiempo velocidad ENDT
{: RESULT = p; :}
;
posicion ::= LAT IGUAL NUM:n LON IGUAL NUM
{: RESULT = n; :}
;
tiempo ::= MENOR TIME FECHA MAYOR
;
velocidad ::= MENOR SPEED NUM MAYOR
;
LENGUAJES FORMALES Y AUTÓMATAS
15/06/2012
Apellidos: _______________________________________________________________________
Nombre: ________________________________________________________________________
Titulación: ITIS
II (marque con un círculo)
Parser (apartado 4):
public class MiClase{
public int contador;
public float suma;
MiClase(int c, float s){
this.contador = c;
this.suma = s;
}
}
terminal INIT,ENDT,LAT,LON,IGUAL,MENOR,MAYOR,SPEED,TIME,FECHA;
terminal Float NUM;
non terminal entrada,tiempo,posicion;
non terminal Float trackpoint,velocidad;
non terminal MiClase lista;
entrada ::= lista:l
{: float media = l.suma / l.contador;
System.out.print("Velocidad Media = "+media); :}
;
lista ::= lista:t1 trackpoint:t2
{: RESULT = new MiClase(t1.contador+1,
t1.suma+t2.floatValue()); :}
| trackpoint:t
{: RESULT = new MiClase(1, t.floatValue()); :}
;
trackpoint ::= INIT posicion tiempo velocidad:v ENDT
{: RESULT = v; :}
;
posicion ::= LAT IGUAL NUM LON IGUAL NUM
;
tiempo ::= MENOR TIME FECHA MAYOR
;
velocidad ::= MENOR SPEED NUM:n MAYOR
{: RESULT = n; :}
;
Descargar