Está en la página 1de 1

7$5($1ı&$3,78/2*(1(5$'25'(&2',*2/(;

&XUVR7(25,$'(/(1*8$-(6<$87Ï0$7$6

En el lenguaje de programación que usted prefiera. La fecha de presentación es única no hay retrasos.
Debe incluir: Programa con código fuente adecuadamente estructurado. Se califica modularidad y
documentación. Entrega en archivos (CD-ROM). Se aplicara módulos de prueba.

 La finalidad es estudiar e implementar la relación entre una expresión regular y un


autómata finito, así mismo utilizarlo en búsqueda de texto:

D Recibe como entrada un expresión regular (correctamente escrita). El programa debe


convertir la expresión regular en un AFND, luego convertir este AFND en un AFD,
finamente generar el código de una función denominada Lex(char *s) que reconoce si
una cadena (que recibe como entrada) pertenecen al lenguaje definido por la expresión

E La Expresión Regular de entrada para el programa cumple:


regular.

L  denota concatenación.
LL  denota estrella de kleene.
LLL  _ denota la unión de dos expresiones regulares.
LY $=D]denotan los símbolos del alfabeto.

Ejemplo: a.b.(a|b)*

Para facilitar la manipulación de la expresión regular puede emplear paréntesis.

F La función Lex, lee carácter a carácter la entrada entregada a través de un puntero si


en algún momento llega a un estado de aceptación (correspondiente al AFD) entonces
retorna inmediatamente 1, de lo contrario continua la lectura. Si al terminar de leer la
cadena no se ha llegado a un estado de aceptación entonces se retorna 0, indicando que

G Ejemplo:
la no pertenencia.

Entrada:
b.(a.b)*.a

Salida:
int Lex(char * s){
.... /* implementación */
return 0; /* si la cadena no pertenece al lenguaje*/
.... /* implementación */
return 1; /* acepta */
.... /* implementación */
}