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. 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 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 + = U L i 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.