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; :} ;