EXPRESIÓN REGULAR

Es una secuencia de caracteres que forma un patrón de búsqueda, principalmente utilizada para la búsqueda de patrones de cadenas de caracteres u operaciones de sustituciones. La mayoría de las formalizaciones proporcionan los siguientes constructores: una expresión regular es una forma de representar los lenguajes regulares (finitos o infinitos) y se construye utilizando caracteres del alfabeto sobre el cual se define el lenguaje.

En informática, las expresiones regulares proporcionan una manera muy flexible de buscar o reconocer cadenas de texto.

Su utilidad más obvia es la de describir un conjunto de cadenas para una determinada función, resultando de utilidad en editores de texto y otras aplicaciones informáticas para buscar y manipular textos.

Numerosos editores de texto y otras herramientas utilizan expresiones regulares para buscar y reemplazar patrones en un texto. Inicialmente, este reconocimiento de cadenas se programaba para cada aplicación sin mecanismo alguno inherente al lenguaje de programación pero, con el tiempo, se ha ido incorporado el uso de expresiones regulares para facilitar programar la detección de ciertas cadenas.

CONSTRUCCIÓN DE UNA EXPRESIÓN REGULAR

Específicamente, las expresiones regulares se construyen utilizando los operadores unión, concatenación y clausura de Kleene. Toda expresión regular tiene algún autómata finito asociado.

Alternación: Una barra vertical separa las alternativas.

Cuantificación: Un cuantificador tras un carácter específica la frecuencia con la que éste puede ocurrir. Los cuantificadores más comunes son “?”, “+” y “*”:

  • ?: El signo de interrogación indica que el carácter que le precede puede aparecer como mucho una vez.
  • +: El signo más indica que el carácter que le precede debe aparecer al menos una vez..
  • *: El asterisco indica que el carácter que le precede puede aparecer cero, una, o más veces.

Agrupación: Los paréntesis pueden usarse para definir el ámbito y precedencia de los demás operadores.

Los constructores pueden combinarse libremente dentro de la misma expresión.

LENGUAJE REGULAR

Son los lenguajes formales más simples, con los mecanismos de representación y reconocimiento más estudiados. Su aplicación práctica en la teoría y construcción de intérpretes y compiladores de lenguajes de programación o de especificación o formato de información, especialmente como microcomponentes del analizador lexicográfico que detecta los tókenes como constantes numéricas, cadenas de texto, operadores, palabras reservadas (keywords), separadores, etc. Pero también se puede apreciar su uso en máquinas expendedoras, teléfonos públicos, calculadoras y otros artefactos electromecánicos.

Se dice que un lenguaje es regular si y sólo si se cumple cualquiera de las siguientes proposiciones:

  • Tiene al menos una gramática regular G que lo produce.
  • Puede ser reconocido por un autómata finito A.
  • Existe una expresión regular Er que representa a todas las cadenas de L.

IMPORTANCIA DE LOS LENGUAJES REGULARES

La existencia y formalización de los lenguajes regulares (LR) y su vinculación con otros artefactos lingüísticos-matemáticos ya bien formalizados, estudiados e incluso llevados a la práctica ha sido de vital importancia en el ulterior desarrollo de los mecanismos de procesamiento de lenguajes de computadora, fundamentalmente en los analizadores lexicográficos gracias a la posibilidad de derivar el reconocimiento de los LR mediante autómatas finitos que son fáciles de implementar computacionalmente con mecanismos simples y rápidos, óptimos en la obtención de parsers veloces y robustos que a su vez le ofrecen a los desarrolladores información detallada de los errores léxicos, sintácticos e incluso advierten sobre errores semánticos.

Lo mismo sucede por ejemplo con las expresiones regulares implementadas ya en muchos Lenguaje de programación de propósito general modernos que permiten a los desarrolladores de lenguajes mecanismos muy eficientes para la obtención intuitiva de partes de compiladores que reconocen los tókenes o partículas lexicales del código fuente como fase del proceso completo de interpretación o compilado, según sea el caso.