Logo Studenta

Actividad 6 - Daniel Cuellar (1)

Vista previa del material en texto

UNACAR
Universidad Autónoma del Carmen
“Por la Grandeza de México”
Facultad de Ciencias de la Información
MATERIA
LENGUAJES FORMALES Y AUTOMATAS
TEMA
Practica “Flex”
NOMBRE
DANIEL VALDEMAR CUELLAR VALLES
Ciudad del Carmen, Campeche A 4 marzo del 2022
Ejercicios
Autómata que reconozca cadenas (a|b)* que terminen en a	4
Autómata que reconozca cadenas pares de a	5
Autómata que reconozca cadenas impares de a	5
Autómata que reconoce los números naturales del 0 al 9	6
Autómata que reconoce enteros con signo	6
Autómata que reconozca la "a"	7
Autómata que reconoce las vocales, en el orden a,e,i,o,u	8
Autómata que reconozca cada vez que aparezca una "a" le sigan dos "b"	8
Cadenas que cada vez que venga una a acepte números impares de b	9
Autómata que reconozca cadenas de "a" o "b"	9
Autómata que reconozca cadenas de "a" o "b una o más veces	10
Autómata que reconozca la cadena: 0(0|1)*0	10
Autómata que reconozca la cadena: (0|1)*0(0|1)(0|1)	11
Autómata que reconozca la cadena: 0*10*10*10*	11
Contenido
En esta actividad se trasladaron todos los ejercicios vistos en clase al interpretador de lenguaje “Flex” el cual según (Rodríguez, 2009) “Es una herramienta que permite generar analizadores léxicos. A partir de un conjunto de expresiones regulares (patrones léxicos), Flex busca concordancias en un fichero de entrada y ejecuta acciones asociadas a estas expresiones.” Después de que se aprendió sobre expresiones regulares en el contexto visto en clase se pudieron realizar todos y cada uno de los ejercicios propuestos. 
La herramienta que se utilizó para codificar los problemas fue “Flex Windows (Lex and Yacc)” ya que resulta muy útil la plantilla para un programa “Lex”. Al generar el archivo se optó por usar el símbolo del sistema “CMD” (Ilustración 2) de Windows ya que por alguna razón saltaban errores en el programa anteriormente mencionado. Para terminar con esta introducción se explicará a detalle el primer ejercicio ya que analizar la totalidad de actividades resultara tedioso y repetitivo; pues en la mayoría cambian solo ciertas partes de la sentencia.
La Ilustración 1 plantea el primer ejercicio que consiste en un “Autómata que reconozca cadenas (a|b)* que terminen en a”. Lo primero que se coloca es la expresión correcta, en este caso es una palabra entre corchetes los cuales indican que puede ser cualquiera de las dos letras del alfabeto siempre y cuando se repitan 1 o más veces esto por el símbolo “+” que hay en seguida de la expresión. Si se ingresa de esa manera aparecerá el mensaje "Cadena reconocida", en la siguiente línea hay una concatenación para salir del programa pues si se ingresa la palabra "salir" automáticamente se cierra el ejecutable y por último está la expresión que niega cualquier otro carácter que no sean los anteriormente plasmados, pues si se ingresa uno o más aparecerá el mensaje "Carácter o caracteres no validos".Autómata que reconozca cadenas (a|b)* que terminen en a
Ilustración 1-Ejercicio 1
Como se ve en la Ilustración 2 para generar el ejecutable del programa se ingresa el comando “cc lex.yy.c -o nombre-del-programa -lfl” el cual puede encontrarse detalladamente en (Garcial, 2006). Con el ejecutable generado solo queda ponerlo en marcha y probar que funcionen las reglas establecidas con anterioridad y como se pude observar cumple con su función de manera satisfactoria.Ilustración 2-Ejecutable del Ejercicio2
Según (León, 2012) la forma de generar la instrucción correctamente está planteada en la Ilustración 3 donde solicita realizar un “Autómata que reconozca cadenas pares de a” por lo que se coloca la letra “a” del alfabeto y entre llaves las veces que se repetirá este símbolo dentro de una palabra y por último el signo “+” que indica una o más repeticiones en la cadena.Autómata que reconozca cadenas pares de a
Autómata que reconozca cadenas impares de a
Ilustración 3-Ejercicio 2
El siguiente ejercicio (Ilustración 4) plantea un “Autómata que reconozca cadenas impares de a” el cual se resuelve de manera muy similar al anterior ejercicio ya que es la misma sentencia excepto por el símbolo después de las llaves y la “a” que le sigue pues, el símbolo indica que si no hay ninguna coincidencia se salte esa regla y continue con la siguiente pues un numero impar puede ser un 1 o un 33 de esta manera cumpliendo con la indicación.
Ilustración 4-Ejercicio 3
La Ilustración 5 muestra un “Autómata que reconoce los números naturales del 0 al 9” para realizarlo lo único que se hizo fue colocar entre corchetes el rango de caracteres que se quieren aceptar en la sentencia seguido de un símbolo “+” para que admita más de un número, el problema no indica si tiene que admitirlo en orden así que se realizó de la forma más simple.Autómata que reconoce los números naturales del 0 al 9
Autómata que reconoce enteros con signo
Ilustración 5-Ejercicio 4
De acuerdo con la (Ilustración 6) se tiene que realizar un “Autómata que reconoce enteros con signo”. Para iniciar el código se muestra como en la primera sentencia se puede colocar los números en orden sin guion y puede ser igual de valida esta forma o la mencionada en el anterior problema, la función de esta primera sentencia es identificar los números sin signo los cuales no deben ser admitidos en el autómata. Continuando con la siguiente línea de código se puede observar una sentencia que le indica al autómata reconocer al inicio de la captura el símbolo “+” una sola vez con el carácter “?” . Seguido a esto sigue la cadena que se ha usado con regularidad hasta este momento la cual permite ingresar uno o más números naturales haciendo que esta sentencia reconozca números enteros positivos; y por último está el inverso de la cadena anteriormente mencionada en donde admite los enteros negativos.
Ilustración 6-Ejercicio 5
Autómata que reconozca la "a"
La Ilustración 7 propone un ejercicio más simple el cual es realizar un “Autómata que reconozca la "a" “ así de sencillo, por lo que la regla a usar es solo colocar un “?” después de la sentencia ya que admite cero o un carácter y como no hay más letras en el alfabeto el autómata solo reconoce una “a”.
Ilustración 7-Ejercicio 6
En la Ilustración 8 plantea realizar un “Autómata que reconoce las vocales, en el orden a,e,i,o,u”, para realizarlo se tiene que poner las vocales en orden simplemente ya que el programa detecta que es una concatenación al no agregarle ningún símbolo extra por lo tanto si se ingresa esa palabra como esta ilustrada la admitirá el autómata en cualquier otro caso no lo hará.Autómata que reconoce las vocales, en el orden a,e,i,o,u
Autómata que reconozca cada vez que aparezca una "a" le sigan dos "b"
Ilustración 8-Ejercicio 7
Prosiguiendo con los ejercicios en la ilustración 9 se realizó un “Autómata que reconozca cada vez que aparezca una "a" le sigan dos "b" “ este ejercicio es simple de realizar ya que como se ha estado viendo los corchetes indican que se cumplan la palabra dentro de ellos y el símbolo “+” asegura que se repita una o más veces.
Ilustración 9-Ejercicio 8
La Ilustración 10 propone realizar un “Autómata que reconozca cada vez que aparezca una "a" le sigan números impares de "b" “ empezando con la regla para reconocer la palabra, se puede notar que se parece mucho al ejercicio 3 pues lo único que cambia es la letra usada, así como los paréntesis (estos “()” indican que se cumpla la palabra tal cual como esta codificada) en donde prosigue un símbolo “+” que como bien se ha dicho hace que se repita una o más veces la sentencia.Cadenas que cada vez que venga una a acepte números impares de b
Autómata que reconozca cadenas de "a" o "b"
 
Ilustración 10-Ejercicio 9
En la imagen (Ilustración 11) se plantea realizar un “Autómata que reconozca cadenas de "a" o "b" “ en donde los corchetes indican que se tiene que ingresar un carácter u otro, no los dos a mismo tiempo y el “?” que solo sea una vez cualquiera de las dos letras del alfabeto.Ilustración11-Ejercicio 10
Como se ve en la Ilustración 12 pide realizar un “Autómata que reconozca cadenas de "a" o "b una o más veces”; la sentencia que valida el autómata se basa en dos símbolos con un “+” separados por un carácter “|” el cual se refiere al ingreso de cualquiera de los dos caracteres, pero solo uno de los dos.Autómata que reconozca cadenas de "a" o "b una o más veces
Autómata que reconozca la cadena: 0(0|1)*0
Ilustración 12-Ejercicio 11
En la Ilustración 13 se realizó un “Autómata que reconozca la cadena: 0(0|1)*0” para realizar el ejercicio se aplican las reglas anteriormente mencionadas donde se coloca la primera letra del alfabeto seguido de un paréntesis con la opción en ese caso y el símbolo de “+” por último, el símbolo no opcional con el que debe terminar la cadena.
Ilustración 13-Ejercicio 12
La ilustración 14 plantea el siguiente requerimiento: “Autómata que reconozca la cadena: (0|1)*0(0|1)(0|1)”, para realizarlo se utilizaron simplemente las indicaciones del código para indicar que solo se ingrese un “0” seguidamente un “1” o “0” y por último solo un “1” o “0”.Autómata que reconozca la cadena: (0|1)*0(0|1)(0|1)
Autómata que reconozca la cadena: 0*10*10*10*
Ilustración 14-Ejercicio 13
Por último, la Ilustración 15 indica realizar un “Autómata que reconozca la cadena: 0*10*10*10*” y casi igual que el ejercicio anterior se validó que la cadena ingresada sea mas de un “0” separado por “1” 3 veces seguidas en donde siempre termine con uno o mas “0”. 
Ilustración 15-Ejercicio 14
Conclusión
Después de investigar sobre el uso de “Flex” y las expresiones regulares se logró concluir esta actividad de manera satisfactoria, si bien hubo errores al plasmar los ejercicios y probarlos no impidió que se aprendiera mucho sobre las expresiones regulares, en definitiva, esta actividad fue muy interesante y entretenida de hacer ya que trasladar ejercicios hechos en clase a un programa mediante prueba y error resultó ser muy educativo.
Referencias
Garcial. (31 de 10 de 2006). Teoría de Autómatas y Lenguajes Formales, IS17. Obtenido de http://repositori.uji.es/xmlui/bitstream/handle/10234/5998/Primera_Practica_IS17_Curso_06_07.pdf?sequence=1
León, C. R. (22 de 05 de 2012). Estructura de un programa LEX. Obtenido de https://campusvirtual.ull.es/ocw/pluginfile.php/2300/mod_resource/content/0/perlexamples/node20.html
Rodríguez, D. P. (23 de 10 de 2009). Seminario de introducción a Flex. Obtenido de http://webdiis.unizar.es/~ezpeleta/lib/exe/fetch.php?media=misdatos:compi:2bisbisseminarioflex.pdf

Otros materiales