Está en la página 1de 8

18-9-2022 Regular Lenguajes

Introducción

Un lenguaje regular es un lenguaje que se puede expresar con una expresión regular o un
autómata finito determinista o no determinista o una máquina de estado. Un idioma es un
conjunto de cadenas que se componen de caracteres de un alfabeto específico o conjunto de
símbolos. Los lenguajes regulares son un subconjunto del conjunto de todas las cadenas.
Los lenguajes regulares se utilizan para analizar y diseñar lenguajes de programación y son
uno de los primeros conceptos que se enseñan en los cursos de computabilidad. Estos son
útiles para ayudar a los científicos informáticos a reconocer patrones en los datos y agrupar
ciertos problemas computacionales; una vez que lo hacen, pueden adoptar enfoques
similares para resolver los problemas agrupados. Los lenguajes regulares son un tema clave
en la teoría de la computabilidad.
Expresiones regulares

Los lenguajes regulares y los autómatas finitos pueden modelar problemas computacionales
que requieren una cantidad muy pequeña de memoria. Por ejemplo, un autómata finito
puede generar un lenguaje regular para describir si un interruptor de luz está encendido o
apagado, pero no puede realizar un seguimiento de cuántas veces se encendió o apagó la
luz.

La máquina anterior puede saber en qué estado se encuentra actualmente, encendida o


apagada, pero no sabe cuál fue el historial de cambios para llegar a donde está (es decir, no
sabe cuántas veces se ha activado el interruptor). Encendido o apagado).

Los autómatas finitos generan o modelan lenguajes regulares. Esto significa que los
lenguajes regulares se pueden describir mediante un diagrama de máquina de estado
simple. Una máquina de estados finitos, M,M, describe un lenguaje dado, LL. Se dice que
MM acepta una cadena ww si la máquina comienza en un estado de inicio, pasa por una
serie de transiciones de estado y termina en un estado de aceptación. Decimos que la
máquina MM reconoce el lenguaje LL si MM acepta todas las cadenas ww que están en
LL. Un lenguaje es un lenguaje regular si existe un autómata finito que lo reconoce.

Por ejemplo, esta máquina reconoce el idioma de las cadenas que tienen un número par de
ceros, ya que cualquier cadena que tenga un número par de ceros pasará del estado de inicio
a un estado de aceptación.
-Traducir entre lenguajes regulares, autómatas finitos y expresiones regulares
Los autómatas finitos y las expresiones regulares son formas diferentes de representar
lenguajes regulares.
Los autómatas finitos se pueden usar para generar cadenas en un lenguaje regular. Un
autómata finito para un lenguaje en particular está “programado”, en cierto modo, para
generar las cadenas de un lenguaje dado a través de sus estados y funciones de transición.
Puede caminar a través de una máquina de estado finito para ver qué cadenas se pueden
hacer y, por lo tanto, son parte del lenguaje que describió la máquina, o puede ingresar una
cadena de entrada para ver si la máquina puede hacer una entrada determinada.
Decidibilidad de emparejamiento
La prueba de la parte (a) del Teorema de Kleene nos proporciona una respuesta positiva a la
pregunta (a) en la diapositiva 9. En otras palabras, proporciona un método que, dada
cualquier cadena u y una expresión regular r, decide si u coincide o no con r. El método es:
• construir un DFA M que satisfaga L(M) = L(r);
• comenzando en el estado de inicio de M, llevar a cabo la secuencia de transiciones en M
correspondiente a la cuerda u, alcanzando algún estado q de M (debido a que M es
determinista, hay una tal secuencia de transición única);
• comprobar si q acepta o no: si lo es, entonces u ∈ L(M) = L(r), por lo que u coincide con
r; de lo contrario, u /∈ L(M) = L(r), por lo que u no coincide con r.
-Expresiones regulares de autómatas finitos
Dado cualquier DFA M, tenemos que encontrar una expresión regular r (sobre el alfabeto
de símbolos de entrada de M) satisfaciendo L(r) = L(M). De hecho, hacemos algo más
general que esto, como se describe en el lema de la diapositiva 24.1 Tenga en cuenta que si
podemos encontrar tales expresiones regulares r q q,q′ para cualquier elección de Q, q y q ′,
entonces el problema está resuelto. Por tomar Q como el conjunto de StatesM y q sea el
estado inicial, digamos s, entonces por definición de r q s,q′ , una cadena u coincide con
este regular expresión iff hay una secuencia de transición s tu−→∗ q ′ en M. Como q ′
oscila sobre el finito muchos estados de aceptación, q1, . . . , qk digamos, entonces hacemos
coincidir exactamente todas las cadenas aceptadas por M. En otras palabras, la expresión
regular r q s,q1 | · · · |r q sqk tiene la propiedad que queremos para la parte (b) del teorema
de Kleene. (En el caso de k = 0, es decir, no hay estados de aceptación en M, entonces
L(M) es vacío y entonces podemos usar la expresión regular ∅.)
Máquinas de estados finitos

Estaremos haciendo uso de modelos matemáticos de sistemas físicos llamados autómatas


finitos, o máquinas de estados finitos para reconocer si una cadena está o no en un idioma
en particular. Esta sección introduce esta idea y da la definición precisa de lo que constituye
un finito autómata. Observamos varias variaciones de la definición (relacionadas con el
concepto de determinismo) y ver que son equivalentes a efectos de reconocer si una cadena
está en un idioma determinado.
-autómatas finitos
Las características clave de esta noción abstracta de "máquina".

• Solo hay un número finito de estados diferentes en los que puede estar un autómata finito.
ejemplo, hay cuatro estados, etiquetados como q0, q1, q2 y q3.
• No nos importa en absoluto la estructura interna de los estados de la máquina. Todo lo
que nos importa es qué transiciones puede hacer la máquina entre los estados. Un símbolo
de algunos el alfabeto fijo Σ está asociado con cada transición: pensamos en los elementos
de Σ como símbolos de entrada. Así todas las posibles transiciones del autómata finito
pueden ser especificado dando un gráfico finito cuyos vértices son los estados y cuyas
aristas tienen
anto una dirección como una etiqueta (dibujada a partir de Σ). En el ejemplo Σ = {a, b} y el
único las posibles transiciones desde el estado q1 son q1 b−→ q0 y q1 a−→ q2. En otras
palabras, en el estado q1 la máquina puede ingresar el símbolo b e ingresar al estado q0, o
puede ingresar el símbolo a e ingresar al estado q2. (Tenga en cuenta que las transiciones
de un estado volver al mismo estado están permitidos: p. q3 a−→ q3 en el ejemplo.)
• Hay un estado de inicio distinguido. 1 En el ejemplo es q0. en el gráfico representación de
un autómata finito, el estado inicial suele indicarse mediante una flecha sin etiqueta.
• Los estados se dividen en dos clases: estados de aceptación2 y estados de no aceptación.
En la representación gráfica de un autómata finito, los estados de aceptación se indican por
círculos dobles alrededor del nombre de cada estado, y los estados que no aceptan son
indicado usando círculos simples. En el ejemplo solo hay un estado de aceptación, q3; los
otros tres estados no aceptan. (Las dos posibilidades extremas de que todos los estados sean
aceptar, o que ningún estado está aceptando, están permitidos; también está permitido para
el inicio Estado para estar aceptando.) La razón de la partición de los estados de un
autómata finito en "aceptar" y 'no aceptar' tiene que ver con el uso que uno les da a los
autómatas finitos, a saber, reconocer sea o no una cuerda u ∈ Σ ∗ está en un idioma
particular (= subconjunto de Σ ∗). Dado que nosotros comenzar en el estado de inicio del
autómata y recorrer su gráfico de transiciones, agotando el símbolo en u en el orden
correcto leyendo la cadena de izquierda a derecha. Si podemos usar todo el símbolo en u de
esta manera y alcanzan un estado de aceptación, entonces u está en el lenguaje 'aceptado' (o
'reconocido') por este autómata en particular
-Autómatas finitos a partir de expresiones regulares
Dada una expresión regular r, sobre un alfabeto Σ digamos, deseamos construir un DFA M
con alfabeto de símbolos de entrada Σ y con la propiedad de que para cada u ∈ Σ ∗, u
coincide con r si u es aceptado por M, de modo que L(r) = L(M). Nótese que por el
Teorema de la Diapositiva 18 es suficiente construir un NFAε N con la propiedad L(N) =
L(r). Entonces podemos aplicar la construcción de subconjuntos a N para obtener un DFA
M = P N con L(M) = L(P N) = L(N) = L(r). Trabajar con autómatas finitos que son no
deterministas y tienen ε-transiciones simplifica la construcción de un finito adecuado
autómata de r. Fijémonos en un alfabeto particular Σ y de ahora en adelante solo
consideremos autómatas finitos cuyo conjunto de símbolos de entrada es Σ. La construcción
de un NFAε para cada expresión regular r sobre Σ procede por recursión en la estructura
sintáctica de la expresión regular, como sigue(i) Para cada forma atómica de expresión
regular, a (a ∈ Σ), ε y ∅, damos un NFAε aceptando solo las cadenas que coincidan con esa
expresión regular. (ii) Dado cualquier NFAε s M1 y M2, construimos un nuevo NFAε ,
Unión (M1, M2) con el propiedad L(Unión(M1, M2)) = {u | u ∈ L(M1) o u ∈ L(M2)}. Así
L(r1|r2) = L(Unión(M1, M2)) cuando L(r1) = L(M1) y L(r2) = L(M2). (iii) Dado cualquier
NFAε s M1 y M2, construimos un nuevo NFAε , Concat(M1, M2) con el propiedad
L(Concat(M1, M2)) = {u1u2 | u1 ∈ L(M1) y u2 ∈ L(M2)}. Así L(r1r2) = L (Concat(M1,
M2)) cuando L(r1) = L(M1) y L(r2) = L(M2). (iv) Dado cualquier NFAε M, construimos
un nuevo NFAε , Estrella (M) con la propiedad L(Estrella(M)) = {u1u2 . . . un | n ≥ 0 y
cada ui ∈ L(M)}. Así L(r ∗ ) = L(Estrella(M)) cuando L(r) = L(M). Por lo tanto,
comenzando con el paso (i) y aplicando las construcciones en los pasos (ii)–(iv) una y otra
vez nuevamente, eventualmente construimos NFAε s con la propiedad requerida para cada
expresión regular r. Dicho de manera más formal, uno puede probar la declaración para
todo n ≥ 0, y para todas las expresiones regulares de tamaño ≤ n, existe un NFAε M tal que
L(r) = L(M) por inducción matemática sobre n, usando el paso (i) para el caso base y los
pasos (ii)–(iv) para el pasos de inducción Aquí podemos tomar el tamaño de una expresión
regular como el número de ocurrencias de unión (−|−), concatenación (− −) o estrella (−∗)
en eso.
- El lema de bombeo
En el contexto de los lenguajes de programación, un ejemplo típico de un lenguaje regular
es el conjunto de todas las cadenas de caracteres que son tokens bien formados (palabras
clave básicas, identificadores, etc) en un lenguaje de programación particular, digamos
Java. Por el contrario, el conjunto de todas las cadenas que representar programas Java bien
formados es un ejemplo típico de un lenguaje que no es regular. Ofrece algunos ejemplos
más simples de idiomas no regulares. Por ejemplo, no hay manera de utilizar una búsqueda
basada en la coincidencia de una expresión regular para encontrar todos los palíndromos en
un fragmento de texto (aunque, por supuesto, existen otros tipos de algoritmos para hacer
esto).
-Demostración del lema de bombeo
Como L es regular, es igual al conjunto L(M) de cadenas aceptado por algún DFA M.
Entonces puede tomar el número ℓ mencionado en la diapositiva 29 como el número de
estados en M. Supongamos que w = a1a2. . . an con n ≥ ℓ. Si w ∈ L(M), entonces hay una
secuencia de transición como se muestra en la parte superior de la diapositiva 30. Entonces
w se puede dividir en tres partes como se muestra en esa diapositiva. Tenga en cuenta que
por elección de i y j, longitud (v) = j − i ≥ 1 y longitud (u1v) = j ≤ ℓ. Así que solo queda
para comprobar que u1v nu2 ∈ L para todo n ≥ 0. Como se muestra en la mitad inferior de
la diapositiva 30, la cadena v lleva la máquina M del estado qi al mismo estado (ya que qi =
qj). Así que para cualquier n, u1v nu2 nos lleva del estado inicial sM = qo a qi , luego n
veces alrededor del bucle desde qi a sí mismo, y luego de qi a qn ∈ Aceptar M . Por lo tanto
para cualquier n ≥ 0, u1v nu2 es aceptado por M, es decir, u1v nu2 ∈ L.
Bibliografía

Marcelo Fiore Cambridge University Computer Laboratory Regular Languages and Finite
Automata for Part IA of the Computer Science Tripos

También podría gustarte