Sie sind auf Seite 1von 23

TECNOLGICO NACIONAL DE MXICO

INSTITUTO TECNOLGICO DE ACAPULCO


Carrera:
Ingeniera en Sistemas Computacionales
Asignatura
Lenguajes y Autmatas I

Reporte de actividades de aprendizaje y prcticas


Unidad 2. Expresiones regulares

Competencias a
desarrollar

Crear y reconocer ER mediante un lenguaje de


programacin o un analizador lxico.

Profesor: Silvestre Bedolla Solano


Integrantes del equipo: 2
Nombre

Nmero de control

Cervantes Mundo Angel Eduardo


Davila Hilario Jose Luis
Juan Antonio Miranda Cequeida
Martha Isis Abril Diaz Bahena

12320008
12320012
14321030
13320854

Acapulco Guerrero, Septiembre 2016


ndice
Contenido
1

INTRODUCCION
..3
ACTIVIDAD 1 :INVESTIGAR LAS EXPRESIONES REGULARES Y SUS OPERACIONES..4-8
ACTIVIDAD2: GENERAR CADENAS A PARTIR DE UNA EXPRESION REGULAR9-14
ACTIVIDAD3: OBTENER UNA EXPRESION REGULAR A PARTIR DE UN GRUPO DE CADENAS O
VICEVERSA.15-20
CONCLUSION 21
BIBLIOGRAFIA ...22

Introduccin
En esta seccin, estudiaremos un ejemplo extendido de un problema real, cuya
solucin emplea autmatas nitos que desempean un importante papel. Vamos a
investigar protocolos que ayudan a gestionar el dinero electrnico (los archivos
que un cliente puede utilizar para realizar pagos por bienes a travs de Internet, y
que el vendedor puede recibir con la seguridad de que el dinero es real). El
2

vendedor debe estar seguro de que el archivo no ha sido falsicado y de que el


cliente no se ha quedado con una copia del mismo para envirselo ms de una
vez. La cuestin de la falsicacin del archivo es algo que un banco debe asegurar
mediante una poltica criptogrca.
Es decir, un tercer jugador, el banco, tiene que emitir y cifrar los archivos de
dinero, de manera que la falsicacin no constituya un problema. Sin embargo, el
banco desempea una segunda tarea tambin importante: tiene que mantener una
base de datos de todas las transacciones vlidas que se hayan realizado, de
modo que sea posible vericar al vendedor que el archivo que ha recibido
representa dinero real que ha sido ingresado en su cuenta. No vamos a abordar
los aspectos criptogrcos del problema, ni vamos a preocuparnos de cmo el
banco puede almacenar y recuperar los millones de operaciones que suponen las
transacciones de dinero electrnico. Es improbable que estos problemas
representen impedimentos a largo plazo al concepto del dinero electrnico, y
existen ejemplos de su uso a pequea escala desde nales de los aos noventa.

Actividad 1.
Investigar las expresiones regulares y sus operaciones
Definicin de las expresiones regulares:
Es un equivalente algebraico para un autmata
Utilizado en muchos lugares como un lenguaje para describir patrones
en texto que son sencillos pero muy tiles.

Pueden definir exactamente los mismos lenguajes que los autmatas


pueden describir: Lenguajes regulares.
Ofrecen algo que los autmatas no: Manera declarativa de expresar las
cadenas que queremos aceptar.
Las expresiones regulares se introducen para describir los lenguajes regulares
Entonces las expresiones regulares sern metalenguajes. Es decir las expresiones
regulares son un metalenguaje para describir los lenguajes regulares.
Una expresin regular E describe el lenguaje L que representa, y se denota como
L (E)
Ejemplos de sus usos:
Comandos de bsqueda, e.g., grep de UNIX.
Sistemas de formateo de texto: Usan notacin de tipo expresin regular
para describir patrones.
Convierte la expresin regular a un DFA o un NFA y simula el autmata
en el archivo de bsqueda.
Generadores de analizadores-lxicos. Como Lex o Flex.
Los analizadores lxicos son parte de un compilador.
Dividen el programa fuente en unidades lgicas (tokens). Tokens Como
while, nmeros, signos (+, , <, etc.)
Produce un DFA que reconoce el token.
Operaciones con los lenguajes regulares Unin o Alternativa: Consideremos
dos lenguajes diferentes definidos sobre el mismo alfabeto L1 W () y L2 W
(). Se denomina unin de ambos lenguajes al lenguaje formado por las palabras
de ambos lenguajes:
L1 U L2 = {x | x L1 o x L2}
Concatenacin: Consideremos dos lenguajes definidos sobre el mismo alfabeto,
L1 y L2. La concatenacin o producto de estos lenguajes es el lenguaje L1 L2= {xy
/ x L1 y x L2} Las palabras de este lenguaje estarn formadas al concatenar
cada una palabra del primero de los lenguajes con otra del segundo.
La concatenacin de lenguajes con el lenguaje vaci es L = L =
Potencia de un lenguaje: Se define la potencia i-sima de un lenguaje a la
operacin de concatenarlo consigo mismo i veces.
Li= LLL....L
|------------|
i
Clausura positiva de un lenguaje: Se define la clausura positiva de un lenguaje L:

L+=ULi
i=1
Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles excepto
L. Si L no contiene la palabra vaca, la clausura positiva tampoco Cierre o
Clausura de un lenguaje: Se define el cierre o clausura de un lenguaje L como:

L* = U Li
i=0
4

Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles, incluso
L. Todas las clausuras contienen la palabra vaca.
Existen tres operaciones bsicas que se pueden realizar sobre las ER:
Seleccin de alternativas: Se indica con el operador | (barra vertical). Si r y s son
ER, entonces r | s es una ER que define a cualquier cadena que concuerde con
una r o una s, tambin se dice que r | s, es la unin de los lenguajes de r y s y lo
podemos definir: L(r | s) = L(r) U L(s). Esta operacin se puede extender a ms de
dos ER.
Concatenacin: Se indica con la yuxtaposicin de las ER. Si r y s son ER,
entonces rs es una ER que define a cualquier cadena que concuerde con la
concatenacin de r y s, esta operacin la podemos definir: L (rs) = L(r) L(s).Esta
operacin se puede extender a ms de dos ER.
Repeticin o Cerradura: Tambin se conoce con el nombre de cerradura de
Kleene. Se indica con el operador *. Si r es una ER, entonces r* es una ER que
define a las cadenas de caracteres representadas por la concatenacin repetida
de r en n veces, o sea que lo podemos definir como: L(r*) = L(r)*o tambin lo
podemos definir como la unin infinita de conjuntos.
1.Ejemplo JAVA: expresin regular para comprobar si un email es vlido.
Resultados:

2.Cdigo que muestra como controlar mediante expresiones regulares


los campos del tipo: correo electrnico, RFC, fechas, telfonos, cdigo
postal, IP y direccin MAC.

Resultado

3. Este programa ayuda a imprimar una expresin regular.

Actividad 2.
Generar cadenas a partir de una expresin regular
Las expresiones regulares se usan para analizar el contenido de cadenas de
caracteres por medio de patrones. Son muy tiles y por ello deberis aprender a
definir vuestros propios patrones.
Como en otras secciones, os remito a la gua de referencia de Perl para ver todo
el repertorio de smbolos y que se pueden usar para construir patrones.
Un patrn est delimitado por dos barras inclinadas, /patrn/ y los caracteres que
insertis en l pueden tener un significado literal u otro especial cuando vaya
precedido del modificador \. Por ejemplo, /n/ es un patrn que coincidir con
cualquier aparicin de un carcter n en una cadena. Sin embargo, /\n/ slo
coincidir con los caracteres de nueva lnea.
Los smbolos ms habituales en expresiones regulares podran ser:
/. / # Cualquier carcter excepto \n, comodn (wildcard)
/\s/ # es un espacio en blanco (space)
/\t/
# es un tabulador
/\w/ # es un carcter alfanumrico (word), incluyendo '_'
/\W/ # no es un carcter alfanumrico (word)
/\d/ # es un dgito
/\D/ # no es un dgito
/\A/
/\Z/
/^/
/$/
/\//
/[...]/

# Es el principio de una cadena


# Es el final de una cadena
# Es el principio de una lnea de archivo
# Es el final de una lnea de archivo
# Es el carcter /
# Es una clase de caracteres que hay que buscar

Los cuantificadores son:


+ una o ms veces
? cero o una vez
* cero o ms veces
{n, m} mnimo y mximo de veces
2.1.

Definicin formal de una ER

Es un equivalente algebraico para un autmata.


Utilizado en muchos lugares como un lenguaje para describir patrones en texto
que son sencillos pero muy tiles.
Pueden definir exactamente los mismos lenguajes que los autmatas pueden
describir: Lenguajes regulares.
Ofrecen algo que los autmatas no: Manera declarativa de expresar las cadenas
que queremos aceptar.
9

Dado un alfabeto Dado un alfabeto , una, expresin regular sobre expresin


regular sobre se define de forma recursiva:
ER primitivas: , , {a | a }
Si y son ER, entonces son tambin ER: + (unin), (concatenacin), *
(cierre), ().
No existen otras reglas para la construccin de ER sobre .
Ejemplos de usos:
Comandos de bsqueda, e.g., grep de UNIX.
Sistema de formato de texto: Usan notacin de tipo expresin regular para
describir patrones.
Convierte la expresin regular a un DFA o un NFA y simula el autmata en el
archivo de bsqueda.
Generadores de analizadores - Lxicos. Como Lex o Flex.
Los analizadores lxicos son parte de un compilador. Dividen el programa fuente
en unidades lgicas (tokens) divide el programa fuente en unidades.
Produce un DFA que reconoce el token.
Las expresiones regulares denotan lenguajes.
Por ejemplo, la expresin regular: 01* + 10* denota todas las cadenas que son o
un 0 seguido de cualquier cantidad 1's o un 1 seguida de cualquier cantidad de
0's.
Operaciones de los lenguajes:
Unin: Si L y M son dos lenguajes, su unin se denota por L U M.
Concatenacin: La concatenacin es: LM o L.M.
Cerradura (o cerradura de Kleene): Si L es un lenguaje su cerradura se denota por
L *.
Si E es una expresin regular, entonces L (E) denota el lenguaje que define E. Las
expresiones se construyen de la manera siguiente:
Las contantes y son expresiones regulares que representan a los lenguajes L (Q)
= {Q} y L () L = respectivamente.
Si a es un smbolo, entonces es una expresin regular que representan al
lenguaje: L (a) = {a}.
2.2. Operaciones:
Unin o Alternativa: Consideremos dos lenguajes diferentes definidos sobre el
mismo alfabeto L1 W () y L2 W (). Se denomina unin de ambos lenguajes
al lenguaje formado por las palabras de ambos lenguajes:
L1 U L2= {x | x L1 o x L2}
Potencia de un lenguaje: Se define la potencia i-sima de un lenguaje a la
operacin de concatenarlo consigo mismo i veces.
Li= LLL....L
|------------|
10

I
Clausura positiva de un lenguaje: Se define la clausura positiva de un lenguaje
L:

L+=ULi
i=1
Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles excepto
L. Si L no contiene la palabra vaca, la clausura positiva tampoco
Cierre o Clausura de un lenguaje: Se define el cierre o clausura de un lenguaje
L como:

L* = U Li
i=0
Lenguaje obtenido uniendo el lenguaje con todas sus potencias posibles, incluso
L. Todas las clausuras contienen la palabra vaca.
Existen tres operaciones bsicas que se pueden realizar sobre las ER:
Seleccin de alternativas: Se indica con el operador | (barra vertical). Si r y s son
ER, entonces r | s es una ER que define a cualquier cadena que concuerde con
una r o una s, tambin se dice que r | s, es la unin de los lenguajes de r y s y lo
podemos definir: L(r | s) = L(r) U L(s). Esta operacin se puede extender a ms de
dos ER.
Concatenacin: Se indica con la yuxtaposicin de las ER. Si r y s son ER,
entonces rs es una ER que define a cualquier cadena que concuerde con la
concatenacin de r y s, esta operacin la podemos definir: L (rs) = L(r) L(s).Esta
operacin se puede extender a ms de dos ER.
Repeticin o Cerradura: Tambin se conoce con el nombre de cerradura de
Kleene. Se indica con el operador *. Si r es una ER, entonces r* es una ER que
define a las cadenas de caracteres representadas por la concatenacin repetida
de r en n veces, o sea que lo podemos definir como: L(r*) = L(r)*o tambin lo
podemos definir como la unin infinita de conjuntos r: r* n = r 0 r 1 r 2...r n.
2.3 Aplicaciones en problemas reales.
Una de las principales aplicaciones de los hermanos Deitel, son las expresiones
regulares que facilitan la construccin de un compilador. A menudo se utiliza una
expresin regular larga y compleja para validar la sintaxis de un programa. Si el
cdigo del programa no concuerda con la expresin regular, el compilador sabe
que hay un error de sintaxis dentro del cdigo Generalmente convierten la
expresin regular a un autmata finito no determinista y despus construyen el
autmata finito determinista.
Otra aplicacin del mismo libro es en los editores de texto. Tambin encontramos
a las expresiones regulares en la biologa molecular. Tambin hay esfuerzos
importantes para tratar de representar cadenas como generadas por expresiones
regulares o por lenguajes regulares.
11

1.Ejemplo JAVA:
Solicitar el ingreso del nombre y edad de dos personas. Mostrar el nombre de la
persona con mayor edad.

Resultado:

Para almacenar un nombre debemos definir una variable de tipo String y su


ingreso por teclado se hace llamando al mtodo next() del objeto teclado:
nombre1=teclado.next();
La primera salvedad que tenemos que hacer cuando utilizamos el mtodo next()
es que solo nos permite ingresar una cadena de caracteres con la excepcin del
espacio en blanco (es decir debemos ingresar un nombre de persona y no su
nombre y apellido separado por un espacio en blanco)
Veamos que existe otro mtodo llamado nextLine() que nos permite cargar
espacios en blanco pero para su uso se complica cuando cargamos otras valores
de tipo distinto a String (por ejemplo int, float etc.)
12

2. Solicita el ingreso de horas trabajadas de un trabajador y calcula su sueldo.

Resultado:

13

3. Este programa imprime una cadena de instrucciones , como matricula ,


empleado , etc.

14

Actividad 3.
Obtener una expresin regular a partir de un grupo de cadenas o viceversa
En las operaciones de deteccin de coincidencias se pueden usar varios
modificadores. Se muestran a continuacin los modificadores relacionados con la
interpretacin de una expresin regular. Trata la cadena como si fuera un conjunto
de lneas. Es decir, cambia el significado de "^" y "$", que detectan el principio y el
final de la cadena respectivamente, para que detecten el principio y el final de
cualquier lnea en cualquier parte de la cadena. Si se usan juntos, como /ms,
permiten que "." detecte cualquier carcter y, a la vez, que "^" y "$" detecten,
respectivamente, las posiciones justo a continuacin e inmediatamente antes de
los caracteres de nueva lnea en la cadena.
/x indica al analizador de expresiones regulares que ignore el espacio en blanco
que no est marcado con barras diagonales inversas de escape o que no est
dentro de una clase de caracteres. Puede usar esto para descomponer la
expresin regular en partes (un poco) ms legibles.
El carcter # tambin es un Meta carcter que antecede a un comentario, al igual
que en el cdigo Perl normal. Esto tambin significa que si desea usar espacio en
blanco real o caracteres # en el patrn (excepto en una clase de caracteres, donde
no les afecta /x), tendr que marcarlos con barras diagonales inversas de escape
o \Q...\E, o codificarlos en octal, hexadecimal o secuencias de escape \N{}. En
conjunto, estas caractersticas mejoran en gran medida la legibilidad de las
expresiones regulares de Perl. Debe tener cuidado para no incluir el delimitador de
patrn en el comentario: Perl no puede adivinar que no pretenda cerrar el patrn
en ese punto. Vea el cdigo de eliminacin de comentarios estilo C en perlop.
Recuerde tambin que lo que est dentro de una secuencia \Q...\E no se ve
afectado por /x. Y tenga en cuenta que /x no afecta a la interpretacin de los
espacios dentro de una construccin multicarcter. Por ejemplo, en \x {...} no
puede haber espacios, independientemente de que se use el modificador /x. Y lo
mismo para un cuantificador, como {3} o {5,}. De forma similar, en (?:...) no puede
haber ningn espacio entre (y): pero s puede haber espacios entre (y) Para una
construccin como esta, con cualquier tipo de delimitadores, los espacios
permitidos no se vern afectados por /x, y dependen de la propia construccin.
Por ejemplo, \x {...} no puede contener espacios porque los nmeros
hexadecimales no contienen espacios. Pero las propiedades Unicode s pueden
contener espacios, por lo que en \p {...} puede haber espacios que cumplan las
reglas de Unicode. En un momento dado solo puede estar en vigor uno de estos
modificadores. Con ellos, Perl puede mantener el comportamiento originalmente
compilado de una expresin regular, independientemente de las normas que estn
en vigor cuando se ejecute dicha expresin. Y si se interpola en una expresin
15

regular ms grande, las normas originales se siguen aplicando a esta expresin


regular (y solo a ella).
De manera predeterminada se garantiza que el carcter "^" detecte slo el
principio de la cadena, el carcter "$" slo el final (o la posicin anterior al carcter
de nueva lnea al final) y Perl har determinadas optimizaciones suponiendo que
la cadena contiene una sola lnea. Los caracteres de nueva lnea incrustados
dentro de la cadena no se pueden detectar con "^" o "$". Sin embargo, puede que
desee tratar a la cadena como un bfer de varias lneas, de modo que "^" coincida
despus de cualquier carcter de nueva lnea que haya en la cadena (excepto si
dicho carcter es el ltimo en la cadena), y "$" coincida delante de cualquier
carcter de nueva lnea. A costa de una ligera sobrecarga, puede hacer esto
mediante el modificador /m en el patrn del operador de deteccin de
coincidencias de patrones.
Para simplificar la sustitucin de varias lneas, el carcter "." no coincide con un
carcter de nueva lnea a menos que utilice el modificador /s, que indica a Perl
que suponga que la cadena es una sola lnea, aunque no lo sea.
La clase WikiParser incluye mtodos que convierten texto Wiki de entrada en la
salida HTML equivalente. Esta aplicacin de conversin de Wiki no es muy slida,
pero ilustra algunos usos tiles de las expresiones regulares para la deteccin de
patrones y la conversin de cadenas.
La funcin constructora, junto con el mtodo setWikiData(), simplemente inicializa
una cadena de ejemplo de texto de entrada de Wiki, de la manera siguiente:
public function WikiParser()
{
WikiData = setWikiData();
}
Cuando el usuario hace clic en el botn Test de la aplicacin de ejemplo, la
aplicacin invoca al mtodo parseWikiString() del objeto WikiParser. Este mtodo
llama a otros mtodos, que a su vez crean la cadena HTML resultante.
public function parseWikiString(wikiString:String): String
{
var result:String = parseBold(wikiString);
result = parseItalic(result);
result = linesToParagraphs(result);
result = parseBullets(result);
return result;
}
Cada uno de los mtodos llamados, parseBold (), parseItalic (), linesToParagraphs
() y parseBullets () utiliza el mtodo replace () de la cadena para sustituir patrones
coincidentes, definidos por una expresin regular, a fin de transformar el texto de
entrada del Wiki en texto con formato HTML.

16

Ejemplos
Solicitar el ingreso de dos apellidos. Mostrar un mensaje si son iguales o distintos.

17

2.Determinar el salario bruto y neto semanal de un trabajador considerando que si


trabaja mas de 40 horas el exceso sera considerado horas extras cuya tarifa es de
50% mas que la tarifa normal, ademas el trabajo se somete a un impuesto del
10% si su salario bruto sobre pasa los 80 soles. Mostrar el salario bruto,
descuento y salario neto.

Resultado:

18

3. saca la nomina de un trabajador

1. Comprobar datos mediante expresiones regulares

19

En este caso vamos a experimentar si podemos validar datos mediante una


expresin regular, validaremos los datos con una fecha tipo dd/mm/aaaa, un
numero tipo DNI y un nmero tipo sueldo

Asignaremos como condicin que solo se los campos solo puedan validarse si el
usuario inserta nicamente 8 nmeros enteros y por ultimo una entrada que solo
admita un separador decimal por ejemplo un punto o una diagonal, una vez
compilado y ejecutado el programa se mostrara la pequea aplicacin en la cual
insertaremos los datos requeridos, se observa que la validacin es correcta por
que aparece una ventana con el mensaje de error porque el usuario ha insertado
ms dgitos de los permitidos.

20

Conclusiones
Un AFD tiene un conjunto nito de estados y un conjunto nito de smbolos de
entrada. Un estado se disea para que sea el estado inicial, y cero o ms estados
para que sean estados de aceptacin. Una funcin de transicin determina cmo
cambia el estado cada vez que se procesa un smbolo de entrada.
El autmata acepta cadenas. Una cadena es aceptada si, comenzando por el
estado inicial, la transicin causada por el procesamiento de los smbolos de dicha
cadena, uno cada vez, lleva a un estado de aceptacin. En trminos del diagrama
de transiciones, una cadena es aceptada si sus smbolos son las etiquetas de un
camino que va desde el estado inicial hasta algn estado de aceptacin.

21

Bibliografa
Biophysics. (1945). En W. W.S.McCulloch, A logical calculus of the ideas
immanent in nervious activity (pgs. 115-133).

princeton Univ.Press. (1956). En J. M. C.E.Shannon, Automata Studies (pgs.


234-345). princeton Univ.

UNAM. (03 de NOVIEMBRE de 2014). Obtenido de


http://www.revista.unam.mx/vol.4/num2/art4/biblio.htm_cadenas apartir
de una expresion regular _ lenguajes y automatas

UNAM. (03 de noviembre de 2014). Obtenido de


http://bibliotecas.unam.mx/index.php/bibliotecasunam_libro teoria de
automatas y lenguajes formales

UNAM. (03 de noviembre de 2014). Obtenido de


http://www.revista.unam.mx/vol.4/num2/art4/biblio.html_revista los
automatas

22

23

Das könnte Ihnen auch gefallen