Lenguajes Formales, Gramáticas y Autómatas Dr. Salvador Godoy Calderón
Nociones Básicas La importancia del estudio de los lenguajes formales y sus gramáticas radica en su utilidad para definir el conjunto de datos sobre los que debe operar un programa (y por tanto, ayudar a validar lógicamente su entrada y su salida), así como para definir los lenguajes de programación. Definition Un Alfabeto Alfabeto es un conjunto conjunto finito finito de de símbo símbolos. los. Existe siempre, en todo alfabeto, un símbolo especial llamado el Símbolo nulo ( nulo ( ).
Definition Una Palabra o Cadena Cadena es una secuencia finita de cero o más más símbolos, símbolos, tomados de algún algún alfabeto conocido, y colocados en secuencia o concatenación. A la palabra formada por cero sím bolos se le llama Palabra vacía o vacía o Cadena Cadena vacía y se le denota ( ).
Definition conforman.
La Longitud de una palabra o cadena cadena es el número de símbolos símbolos (diferentes (diferentes del símbolo nulo) nulo) que la
La longitud de una palabra w se denota |w| y es siempre un número entero.
Example
Sobre el alfabeto B
0, 1, la cadena s
s| 10010111 tiene longitud | s|
8.
Por definición, || 0 , por ello, aunque la palabra vacía puede ocurrir como parte de otra cadena, su presencia no modifica la longitud de dicha cadena, esto sin importar cuántas veces aparezca como parte de ella o si es concatenada por la izquierda
o por la derecha derecha de la misma. Así, para una palabr palabra a w , w
Definition
w
w, y además, |w | w| |w| |w|.
Un Lenguaje, Lenguaje, o Lenguaje Lenguaje Formal, Formal, es cualquier cualquier conjunto conjunto de cadenas. cadenas.
Si A es un alfabeto, entonces un Lenguaje sobre A es cualquier lenguaje cuyas cadenas cadenas están f ormadas exclusivamente A con los símbolos en .
Si A es un alfabeto entonces, el conjunto de todas las palabras o cadenas que es posible formar con sus sím bolos, se denota A (leído "A estrella" ). A es el lenguaje más grande posible sobre A y, cualquier otro lenguaje sobre A es un subconjunto de A . Nótese que aunque A es finito por definición, A siempre será infinito (aunque numerable).
Example
Si A
a entonces, A
, a, aa, aa, aaa, aaa, aaaa, aaaa, . . . .
Cuatro sencillos lenguajes sobre A son: , , a y , a, aa, aa, aaa, aaa, aaaa, aaaa, . . . .
Nótese que todos ellos son subconjuntos de A . Computacionalmente resulta muy útil establecer definiciones inductivas de ciertos conjuntos como A :
Definition
Sea A un alfabeto conocido. conocido. El conjunto conjunto A se define inductivamente de la siguiente manera: Caso base:
A
Inducc Inducció ión: n:
a Si a
Cerradura:
A y además, w A , entonces cat a, w A .
A está formado, única y exclusivamente por aquellos elementos que satisfagan los dos pasos anteriores.
Algunas cadenas se pueden representar con la notación de exponente para la concatenación, de forma tal que, w 0 , w w, w 2 ww, w 3 www y así sucesivamente. sucesivamente. De esa forma, es posible posible representar representar algunos algunos conjuntos conjuntos de cadenas cadenas de una forma más concisa, por ejemplo: si A a entonces A a n | n . Igualmente, 1
ab n |n n n
a, ab, ab, abb, abb, abbb, abbb, . . .
a b |n
, ab, ab, aabb, aabb, aaabbb, aaabbb, . . .
ab n |n
, ab, ab, abab, abab, ababab, ababab, . . .
De forma general se utilizan letras letras mayúsculas como símbolos de alfabetos y lenguajes; lenguajes; las letras minúsculas se usan para representar representar símbolos en un alfabeto. También es común usar letras griegas griegas mayúsculas para alfabetos. alfabetos.
Construcciones con Lenguajes Dado que los lenguajes son conjuntos, pueden ser combinados mediante los mismos operadores de los conjuntos: unión, intersección, intersección, diferencia e inclusive complemento. Además, los lenguajes formales son cerrados en el mismo sentido que los conjuntos lo son. Por ejemplo, las siguientes operaciones operaciones entre lenguajes formales dan como resultado otro lenguaje formal: La unión de unión de dos lenguajes L 1 L 2 es también un lenguaje lenguaje La intersección de dos lenguajes L 1 L 2 es también un lenguaje La diferencia entre dos lenguajes L 1 L 2 es también un lenguaje El complemen complemento to de un lenguaje lenguaje L L es también un lenguaje
Example
Sean L
00,11 y M 101,010 dos lenguajes formales sobre el alfabeto B
0, 1. Entonces: Entonces:
L M 00,11,101,010 L M L
c
B L
Algunos operadores de conjuntos requieren un pequeño ajuste para ser aplicados sobre lenguajes, por ejemplo, el operador de Producto Cartesiano se redefine para lenguajes, llamándolo sólo Producto y se especifica de la siguiente manera: Definition Si L y M son dos lenguajes, entonces su producto se define: L M cat s, t | s L t M
Example
Si L
ab, ac y M x, xy, xz , entonces: L M abx, abxy, abxz , acx, acxy, acxz
De manera semejante al uso de la notación de exponente para palabras, también es posible usar dicha notación para lenguajes. La siguiente es una definción inductiva de ese operador:
Definition
Si L es un lenguaje y n un número natural, entonces: Caso base: L 0
n
L L n1
Inducción: Cerradura:
L
L n está formado, única y exclusivamente por aquellos elementos que satisfagan los dos pasos anteriores.
Example Si L 0,11 es un lenguaje sobre el alfabeto B 0 L L 1 L 0,11 L 2 L L 00,011,110,1111
0, 1, entonces:
L 3
L L 2
000,0011,0110,01111,1100,11011,11110,111111
Al operar lenguajes con el operador de producto la palabra vacía ejemplo: L L
tiene un efecto semejante al de el conjunto vacío, por
L
L
L
L
Observe que: . La palabra vacía es diferente del símbolo nulo, a su vez, la palabra vacía es también difierente del lenguaje que contiene únicamente a dicha palabra y éste es distinto del conjunto vacío.
Resulta bastante obvio que el producto de lenguajes es asociativo, es decir, si L , M y N son lenguajes, entonces: L M N
L M N
Por lo tanto, es posible escribir productos de lenguajes sin usar paréntesis. Sin embargo, también resulta claro que el mismo producto NO es conmutativo, esto es, podemos encontrar, por lo menos dos lenguajes L y M , para los cuales: L M M L
Otra propiedad interesante y útil del producto de lenguajes es que, se distribuye sobre los operadores de unión e intersección:
Definition
L M N
L M L N
y M N L
M L N L
L M N
L M L N
y M N L
M L N L
Si L es un lenguaje sobre el alfabeto A, entonces la Cerradura de L, denotada L se define: L
Definition
L 0 L 1 L 2 . . .
La Cerradura Positiva de L, denotada L se define: L
L 1 L 2 L 3 . . .
Obsérvese, en primer lugar, que la definición de cerradura coincide totalmente con la anterior definición de la estrella de un alfabeto, es decir, el conjunto de todas las palabras que es posible formar con los elementos de un alfabeto. Por tanto, esa será la interpretación de la cerradura de un lenguaje: el conjunto de todas las posibles palabras que se pueden formar con los elementos del alfabeto sobre el cual se define el lenguaje.
En segundo lugar, observe que de las dos definiciones anteriores es fácil concluir que L L . Sin embargo, no necesariamente resulta cierto que L L . Por ejemplo, suponga el alfabeto A a y, sobre él, el lenguaje L , a. En ese caso resulta que: L
L
Propiedades de la Cerradura 1.
L L
2.
3. L
L L
L
L
4. L M L
5. L M
L M
L M L
L M
Lenguajes Regulares Hemos estudiado que un lenguaje formal es un conjunto de cadenas sobre un alfabeto finito. Si L es un lenguaje sobre el alfabeto A ,entonces L A . Ahora comenzaremos a tratar el problema de reconocimiento que, en su primera forma más elemental, se expresa: Dado un lenguaje formal L y una cadena cualquiera w, ¿Cómo se puede saber si w
L ?
En una primera instancia la respuesta depende de la precisión con la que se especifique el lenguaje L. Algunos lenguajes son fáciles de especificar y otros no lo son. A continuación estudiaremos una familia especial de lenguajes que resultan fáciles de especificar y para la cual existen diversos algoritmos que permiten resolver el problema de reconocimiento. Se trata de la familia de los Lenguajes Regulares. Estos lenguajes se distinguen de otros similares porque pueden ser especificados usando las operaciones de unión, concatenación y cerradura. Formalmente los lenguajes regulares, sobre el alfabeto A , se definien inductivamente de la siguiente forma:
Caso base:
, y s son Lenguajes
Regulares para todo s
A.
Inducción: Si L y M son lenguajes regulares, entonces también lo son: L M , ML y L Cerradura:
Los lenguajes regulares son única y exclusivamente aquellos que satisfacen los dos pasos anteriores.
Example Si A a, b es un alfabeto, entonces, por el paso base de la definición anterior, los siguientes son lenguajes regulares sobre A : ,
, a y b
Por el paso de inducción anterior, los siguientes también son algunos otros lenguajes regulares sobre el mismo alfabeto a b
a, b
b a, b
ba, bb y b
, b, bb, . . . ,b n , . . .
De manera que, para saber si un cierto lenguaje es regular o no, basta con encontrar alguna forma de expresar dicho lenguaje (factorizarlo) usando las operaciones de unión, concatenación o cerradura.
Example Si A a, b es un alfabeto y L a, ab, abb, . . . ,ab n , . . . es un lenguaje sobre A , ¿Es L un lenguaje regular? La respuesta es sí, puesto que L se puede expresar como el producto de los dos siguientes lenguajes: L
a, ab, abb, . . . ,ab n , . . .
a , b, bb, . . . ,b n , . . .
y, a su vez, el segundo conjunto es equivalente a b , por lo tanto: L
lo cual, por definición, es un lenguaje regular .
a b
A:
Example
Sobre el mismo alfabeto anterior ¿Será regular el siguiente lenguaje? , a, b, aa, bb, . . . ,a n , b n , . . .
Nuevamente la respuesta es sí, ya que: , a, b, aa, bb, . . . ,a n , b n , . . .
, a, aa, . . . ,a n , . . . , b, bb, . . . ,b n , . . .
a b
y ambos son, por definición, lenguajes regulares .
Los dos ejemplos anteriores muestran que existen muchos lenguajes que potencialmente son regulares pero, puede resultar difícil averiguarlo. Desde un punto de vista computacional es de sumo interés encontrar algoritmos que puedan reconocer si una cadena pertenece o no a un lenguaje regular. Para ayudar en tal tarea conviene disponer de una forma más conveniente (compacta aunque precisa) para representar a los lenguajes naturales.
Expresiones Regulares Se trata de expresiones algebráicas para denotar lenguajes regulares. Para denotar a estos lenguajes las expresiones regulares deben representar las mismas tres operaciones con las que se construyen lenguajes regulares: unión, concatenación y cerradura. Si L y M son dos lenguajes formales, entonces la siguiente tabla indica la forma en que las expresiones regulares denotan las operaciones básicas: Operación con Lenguajes Expresión Regular L M
L M
L M
LM
L
L
Una expresión regular siempre denota un lenguaje formal (uno regular), sin embargo, la unidad atómica de expresión son
los símbolos del alfabeto sobre el cual se define el lenguaje. Es decir, una expresión regular indica la estructura que tienen las cadenas que pertenecen al lenguaje denotado. Para aclarar esto se definirá a continuación, de forma inductiva, el conjunto de las expresiones regulares sobre un alfabeto A: Caso base: Inducción:
y s son expresiones regulares para todo s
,
A.
Si R y S son expresiones regulares, entonces también lo son: R, R S , RS y R .
Cerradura:
Las expresiones regulares son, única y exclusivamente aquellas que satisfagan los dos pasos anteriores.
Además, con la intención de que las expresiones regulares sean lo más compactas posible, aunque sin perder precisión, se evita el uso excesivo de paréntesis asumiendo la siguiente jerarquía de prioridades entre los operadores: Operación
Prioridad
( cerradura)
Alta
Orden (calcular al inicio)
( producto ) Media
(unión)
Baja
(calcular al final)
Example Sea 0, 1 un alfabeto y sea L un lenguaje sobre que contiene todas aquellas cadenas que están formadas estrictamente por parejas de ceros y parejas de unos. El lenguaje L se puede representar mediante la expresión informal: L
,00,11,0011,0000,1111,1100,...
o bien, usando la siguiente expresión regular: 00 11
La expresión regular anterior se debe interpretar de la siguiente forma: " cero o más ocurrencias ( por la cerradura ), ya sea de doble cero, o bien ( por la unión ), de doble uno"
Observe que la definición inductiva de las expresiones regulares no incluye la cerradura positiva, sólamente la cerradura transitiva. De manera que una expresión regular como a sólo puede interpretarse como " cero o más ocurrencias del símbolo a ". Si se quisiera expresar un lenguaje cuya descripción fuera "una o más ocurrencias del símbolo a ", entonces se tienen dos alternativas: 1. Modificar la definición inductiva, en el paso de inducción, para que incluya L como una expresión regular aceptada: a 2. Forzar una ocurrencia del símbolo en la expresión regular: aa
Al lenguaje descrito por una expresión regular R se le denota algunas de las expresiones regulares más notables:
s R S RS R
R.
La siguiente tabla indica el lenguaje denotado por
s para todos los s
R S R S R
A partir de la asociación mostrada en la tabla anterior resulta claro que, toda expresión regular denota un lenguaje y, reciprocamente, todo lenguaje regular puede ser representado por una expresión regular. Además, la tabla puede ser de utilidad para determinar el lenguaje denotado por una expresión regular:
Example
Para determinar el lenguaje denotado por la expresión regular: a bc
sobre el alfabeto
a, b, c, se puede proceder de la siguiente forma:
a bc
a bc a b c
a b c
es decir, "el lenguaje de las cadenas sobre cero o más ocurrencias del símbolo c ".
,
a b c
a b , c, cc, ccc, . . .
a b, bc, bcc, bccc, . . .
a, b, bc, bcc, bccc, . . .
formadas, ya sea por el símbolo a, o bien por un símbolo b seguido por
Lo anterior significa que, todo lenguaje regular que sea finito se puede representar por una expresión regular que símplemente sea la unión de cada uno de los símbolos en el alfabeto del lenguaje, esto es, todo lenguaje finito es regular . Por otra parte, los lenguajes infinitos pueden ser o no ser regulares.
Sin embargo, no es seguro que expresiones regulares distintas representen diferentes lenguajes regulares. Dos expresiones regulares distintas pueden denotar al mismo lenguaje, como es el caso con las expresiones: a b y b a . Observe que, por la propiedad conmutativa de la unión: a b b a
a, b
Representando el caso contrario tenemos a las expresiones regulares ab y ba que no denotan al mismo lenguaje, pues ab
ab ba
ba
En términos generales resulta claro que, dado que el producto no tiene la propiedad de conmutatividad, entonces algunas expresiones que, a simple vista, parecerían denotar al mismo lenguaje, en realidad no ocurre así. Considere como ejemplo las expresiones
ab c y b c a ab c
b c a
ab, ac
ab, ac, pero
ba, ca y, ba, ca
Ejemplos Todos los ejemplos de esta sección se refieren a lenguajes formales sobre el alfabeto B
0, 1.
Example La expresión regular 101 denota al lenguaje de todas las palabras formadas por cero o más ocurrencias de la cadena 101. Es decir, 101
,101,101101,101101101,...
Example La expresión regular 00 11 denota al lenguaje de las palabras formadas por cero o más ocurrencias de la cadena 00 o de la cadena 11 ,
00 11
,00,11,0000,0011,1100,1111,...
Example La expresión regular 00 11 es diferente de la expresión en el ejemplo anterior. En este caso denota el lenguaje de todas las palabras formadas por: cero o más ocurrencias de la cadena 00 , o bien, cero o más ocurrencias de la cadena 11 . 00 11
,00,0000,000000,...,11,1111,111111,...
Example La expresión regular 1100 10 denota al lenguaje de todas aquellas palabras, sobre el alfabeto B , tales que comienzan con doble 1 , continúan con cero o más ocurrencias de la cadena 00 y terminan con la cadena 10 . Observe que este lenguaje no incluye la palabra vacía. 11 00 10
1110,110010,11000010,1100000010,...
Propiedades de las Expresiones Regulares A continuación se presenta una lista con algunas de las propiedades más notables de las expresiones regulares. Observe que son análogas a las correspondientes propiedades de los lenguajes. Sean R , S y T expresiones regulares sobre algún alfabeto .
Propiedades de la unión:
Propiedades del producto:
Propiedades distributivas:
1
R S S R
2
R
3
R R
4
R S T R S T
5
R
R
6
R
R
7
RS T RST
8
RS T
RS RT
9
S T R
R TR
Propiedades de la cerradura: 10
R
R
R
R
11 R
R R
12 R R
R
RR
13 R S
R S
14 R S
R S R
15 RSR
16 R S
R S
17 RS
R R
R S
R SR
RS R
S
R R S
Durante el tema anterior quedó claro que no todos los lenguajes formales son regulares. Existen otros lenguajes formales que no pueden ser construidos a partir de sólo las operaciones elementales de unión, producto y cerradura. El caso más evidente de ello es el lenguaje:
a n b n | n
para el cual, no existe forma de verificar la variable n, es decir, no hay forma de verificar que el número de símbolos a sea exactamente igual al número de símbolos b . Esta limitación resulta bastante fuerte, por lo que es de gran interés estudiar otras clases de lenguajes formales, sus propiedades asociadas y, por supuesto, los mecanismos para especificar dichos lenguajes. Para ello se presentan en este tema las gramáticas.
Gramáticas Informalmente, tal como se entiende en el contexto de los lenguajes naturales, una gramática es un conjunto de reglas que definen la estructura de algún lenguaje formal. Esto es, la estructura de las cadenas válidas dentro de dicho lenguaje. Definition Una Gramática es una tupla de la forma: A, T , S , R
donde: A T S A R
es un alfabeto de símbolos (llamados Símbolos No-Terminales) es otro alfabeto de símbolos llamados Símbolos Terminales es un símbolo no-terminal especial llamado Símbololo Inicial. es un conjunto de Reglas de Producción o símplemente Producciones.
Las reglas de producción de una gramática son todas de la forma:
leído: "alfa produce beta"
y el conjunto R de reglas debe cumplir las siguientes restricciones:
1) ,
A T
Tanto como son cadenas en el alfabeto A T , es decir, cadenas formadas por cualquier combinación de símbolos
terminales y no-terminales.
2)
El lado izquierdo de una producción nunca puede contener exclusivamente la palabra vacía.
3) r R r : S
Existe al menos una regla de producción tal que, en su lado izquierdo, contiene exclusivamente al símbolo inicial.
Las reglas de producción, en una gramática, permiten construir ciertas cadenas. Por ello, el conjunto de todas las cadenas que permite formar una gramática, se conoce como el Lenguaje de dicha gramática. Es decir, cada gramática determina un lenguaje formal específico.
Construcción de cadenas Si G es una gramática, entonces el conjunto de todas las cadenas, sobre el mismo alfabeto que G , que es posible formar, siguiendo las reglas de producción en G , se denomina el Lenguaje de G y se denota G.
Para construir las cadenas que pertenecen al lenguaje formal de una gramática es necesario seguir las reglas de producción y usar las operaciones de substitución y concatenación. Por ejemplo, considere la siguiente gramática: G
donde:
S , A, a, b, S , Rp
Rp es el siguiente conjunto de reglas de producción: S
S bA A
aaA
A
b
El mecanismo para construir cadenas válidas en el lenguaje de una gramática es el siguiente:
PASOS:
RESULTADO:
1) Comenzar con el símbolo inicial
" S "
2) Substituir el símbolo inicial por la parte derecha de alguna producción cuyo lado
" bA"
izquierdo sea justo dicho símbolo 3) De la misma forma, substituir cada símbolo no-terminal por el lado derecho de alguna
" baaA"
producción con dicho símbolo en su lado izquierdo hasta que la cadena no contenga ningún
" baaaaA"
símbolo no-terminal. "baaaab"
Es decir, el lenguaje
G de
la gramática G se puede explicar de la siguiente forma: Todas las cadenas, sobre el alfabeto a, b, tales que comienzan y terminan con el símbolo b y en medio contienen cero o más parejas de símbolos a .
Así, todas las siguientes cadenas forman parte de ,
G :
bb, baab, baaaab, baaaaaab, . . .
pero todas las siguientes cadenas NO son parte de ese lenguaje porque no es posible construirlas a partir de las reglas de producción en G : ab, aa, bab, abab, bbabb, aabbaa. . .
En general, el proceso para construir cadenas válidas en el lenguaje de una gramática se denomina Proceso de Derivación y cada paso o substitución se denota con el símbolo (leído "deriva"). De esa forma, el proceso de derivación del ejemplo anterior puede se denota de la siguiente forma: S bA
baaA baaaaA baaaab
Nótese, como lo indican las reglas del proceso de derivación, que toda derivación comienza con el símbolo inicial de la gramática (en este caso S ) y termina con una cadena formada exclusivamente por símbolos terminales de la misma gramática (en este caso a y b ).
Variantes Como se puede observar en el ejemplo anterior, varias reglas de producción pueden tener el mismo símbolo en su lado izquierdo, tal es el caso, en la gramática G anterior, de los dos siguientes grupos de reglas: S
S bA
A
aaA
A
b
Las reglas de producción en esta circunstancia pueden ser escritas de forma compacta usando el símbolo vertical):
| (barra
S
| ba
A
aaA | b
De la misma forma, un proceso de derivación también puede expresarse en forma compacta si se consideran las siguientes variantes del símbolo de derivación: Deriva directamente (en un solo paso)
Deriva en CERO o más pasos
Deriva en UNO o más pasos
Así es posible resumir procesos de derivación en expresiones cortas, por ejemplo, es posible definir en términos generales el lenguaje G para cualquier gramática G de la siguiente forma: G
w | w T S w
Para definir la gramática de algún lenguaje formal es necesario, al menos, observar si el lenguaje que se quiere describir es finito o infinito. Si el lenguaje es FINITO, entonces la gramática puede consistir de todas las reglas de la forma S w para cada cadena w en el lenguaje. Sin embargo, si el lenguaje que se desea describir es INFINITO, entonces al menos una de las reglas de producción en la gramática deberá ser una regla recursiva:
Definition Una regla de producción se denomina Recursiva cuando y sólo cuando su lado izquierdo aparece como parte de su lado derecho. Definition Una regla se denomina Indirectamente Recursiva si su lado izquierdo aparece en el lado derecho de alguna otra regla derivable a partir de la primera.
Para ilustrar lo anterior considérese la regla de producción S b | aS , evidentemente se trata de una regla recursiva, sin embargo, se en alguna otra gramática se encontraran las siguientes reglas de producción:
S b | aA A
c | bS
Entonces se tienen dos reglas indirectamente recursivas, por una parte, S aA es indirectamente recursiva ya que: S aA
Por otra parte, también la regla A
bS es
abS
indirectamente recursiva, ya que: A
bS baA
Así que, de las cuatro reglas de producción contenidas en la gramática, dos de ellas son indirectamente recursivas.
Definition Una gramática se denomina Gramática Recursiva si y sólo si contiene alguna regla de producción recursiva, o bien alguna regla indirectamente recursiva. Por lo tanto, es posible realizar la siguiente afirmación acerca de las gramáticas que describen lenguajes infinitos: Una gramática cuyo lenguaje es infinito, forzosamente es recursiva
Además, la conclusión anterior conduce inevitablemente a reflexionar sobre la estructura de las reglas de producción en una gramática cualquiera. Siempre es posible tener reglas que no sean ni recursivas, ni indirectamente recursivas, y algunas veces se encontrarán reglas que sí lo sean. Lo cual, inevitablemente lleva a observar que: El lenguaje
G definido por una gramática
G, siempre es
un conjunto definido inductivamente de la siguiente forma
Sea G una gramática cualquiera, con símbolo inicial S y sea w cualquier cadena en el mismo alfabeto de G, entonces:
Todas las cadenas w que pueden ser derivadas a partir de S
Caso Base:
sin usar ninguna regla recursiva o indirectamente recursiva, pertenecen a G.
Si w G y alguna derivación S w contiene un símbolo
Inducción:
no-terminal de alguna regla recursiva o indirectamente recursiva, entonces agregar un paso más a la derivación, usando dicha regla para obtener S x y entonces, x G.
Cerradura:
G está formado únicamente por aquellos símbolos
considerados en esta definición y por ningún otro.
Example siguientes:
Sea G
A, B, 0, 1, S , Rp una gramática cuyas reglas de producción en el conjunto Rp son las S B
Para describir el lenguaje
G se
|
0 B
1 | 1 B
debe proporcionar un caso base y una regla de inducción. Según la observación
anterior, el caso base está formado por todas las cadenas derivables sin usar recursividad. En la gramática existen tres reglas de producción que no son ni recursivas, ni indirectamente recursivas: S , S 0 B y B 1. Sólo existen dos cadenas que pueden ser derivadas usando estas reglas: S
Por lo tanto, queda conformado el caso base:
y S 0 B
01
Caso Base:
,
01
G.
Ahora, para formar la regla de inducción, se observa la única regla recursiva: B 1 B. Según lo establecido anteriormente, cualquier elemento de G cuya derivación contenga una ocurrencia del símbolo B se puede usar para agregar un paso más y obtener nuevos elementos de G. La única derivación apta para tal proceso es: S 0 B
01
Si se agrega un paso más, usando para ello la regla recursiva, se obtiene:
S 0 B
01 B
011
Y así queda conformada la regla de inducción de la siguiente forma:
Inducción:
Si x es una cadena formada exclusivamente por símbolos 1 , y 0 x
G,
entonces también 01 x
G .
Agregando la cláusula de cerradura, se tiene completa la definición inductiva de
G.
De acuerdo a esa definición, 01 G implica que 011 G. Si ahora se usa ese conocimiento se puede deducir, por la regla de inducción que 0111 G y también que 01111 G. En general, esa estructura sugiere que: G
01 n |n
Ejemplos Para finalizar esta sección se presentan algunos ejemplos útiles de gramáticas que describen lenguajes formales bastante conocidos. En la siguiente sección se presentarán los elementos teóricos y prácticos para realizar combinaciones de gramáticas. Example (Numerales decimales enteros) Es posible definir una gramática para representar a los numerales decimales enteros haciendo la sencilla observación de que todos ellos están formados, ya sea por un dígito, o bien por un dígito seguido de otro numeral. Así la siguiente es una gramática correcta para el lenguaje de los numerales decimales: Nd S , D, 0,1,2,3,4,5,6,7,8,9, S , Rp
donde Rp está formado por las siguientes producciones: S D | DS D
0
|1|2|3|4|5|6|7|8|9
Con esta gramática es posible derivar cualquier numeral decimal entero, por ejemplo, el 8107 puede ser derivado de la siguiente forma: S DS 8S 8 DS 81S 81 DS 810S 810 D
8107
Esta derivación no es única. Es posible definir distintas derivaciones de una misma cadena. Por ejemplo, el mismo numeral anterior puede también ser derivado de esta otra forma: S DS DDS D1 DS D10S D10 D
D107
8107
Example (Numerales decimales pares) Tomando como referencia el ejemplo anterior es también posible definir una gramática para representar el lenguaje de todos los numerales decimales pares, para ello basta con observar que todo
numeral decimal par siempre termina en cero o en un dígito par: Ndp
S , D, P , N , 0,1,2,3,4,5,6,7,8,9, S , Rp
donde Rp está formado por las siguientes producciones: S P | NP N D | DN P 0 | 2 | 4 | 6 | 8 D
0
|1|2|3|4|5|6|7|8|9
Por ejemplo, para derivar el numeral par 376 el proceso podría ser: S NP DNP 3 NP 3 DP 37 P 386
Autómatas de Estados Finitos Hasta este momento se han estudiado los lenguajes formales, regulares y libres de contexto. Se han estudiado también dos mecanismos para describir a estos lenguajes: las expresiones regulares y las gramáticas. Ahora corresponde estudiar la relación entre los lenguajes formales y la teoría de máquinas. Estas máquinas son elementos complementarios a las gramáticas y que permiten resolver el problema de reconocimiento de un lenguaje de forma eficaz y elegante. Los Autómatas de Estados Finitos que se presentan en esta sección constituyen el fundamento teórico y operativo de las computadoras modernas.
Máquinas de Estados Las expresiones regulares tienen la capacidad de describir, de forma algebráica, la estructura de las palabras o cadenas que forman un determinado lenguaje. Por su parte, las gramáticas libres de contexto facilitan la construcción o derivación de todas las palabras en un determinado lenguaje. Ambos mecanismos pueden colaborar para conocer los lenguajes que se desea estudiar, pero aún resulta necesario disponer de algún otro mecanismo específico para resolver el problema de reconocimiento, es decir, que dada la especificación de un lenguaje y alguna cadena en el mismo alfabeto que el lenguaje,
permita identificar si la cadena pertenece o no al lenguaje especificado.
El mecanismo necesario es justamente una máquina de estados. Estas máquinas (conceptuales o teóricas) son capaces de estar en uno de varios estados de procesamiento y, a partir del análisis de su entrada, cambian de estado hasta agotar su entrada o llegar a un estado final. De ahí el nombre de máquinas de estados.
Definition
Un Autómata de Estados Finitos (AF) es una tupla de la forma:
, Q, , q 0 , F donde:
Q q0 F
Es un Alfabeto de referencia Es un conjunto Q q 0 , q 1 , . . . ,q k de Estados de Operación Es una Relación de Transición definida : Q Q Es un elemento de Q , denominado Estado Inicial Es un subconjunto F q p , . . . ,q q Q de Estados Finales
Esta máquina puede encontrase en cualquiera de los k estados definidos en Q . A partir de su inicio de operación (en el estado inicial q 0 ), el autómata "lee", en orden secuencial, cada uno de los símbolos que forman la cadena de entrada. Ante cada símobolo encontrado en la cadena de entrada, el autómata reacciona cambiando de estado, hasta que eventualmente examina el último símbolo de la cadena de entrada. Llegado ese momento, si el estado en que se encuentra el autómata es un estado final (alguno de los estados contenidos en el conjunto F ) entonces, la cadena de entrada al autómata sí pertenece al lenguaje especificado, de lo contrario, no pertenece a dicho lenguaje.
Example
Considere el siguiente AF: a, b, q 0 , q 1 , q 2 , , q 0 , q 1
donde la relación está dada por la siguiente matríz:
a
b
q0 q1 q2 q1 q1 q1 q2 q2 q2
En este caso, el autómata opera sobre el alfabeto a, b, tiene tres estados q 0 , q 1 , q 2 , de los cuales q 0 es el estado inicial y sólo q 1 es un estado final o de aceptación. La relación expresa el funcionamiento del autómata, esta relación tradicionalmente se representa, ya sea en forma tabular como se acaba de presentar, o bien, en forma de grafo dirigido. La misma relación anterior se expresa como grafo así:
Como se puede apreciar, no se trata de una representación convencional de un grafo dirigido. En primer lugar se agrega una transición etiquetada "Inicio" para identificar el estado inicial. En segundo lugar, los estados finales o de aceptación se distinguen marcándolos con doble contorno o el interior sombreado como en el caso anterior. Cuando la situación no cause confusión, para denotar un autómata se presentará exclusivamente el grafo de su relación de transición. Todos los demás elementos de la tupla correspondiente pueden ser deducidos de dicho grafo.
Example
Considere el autómata siguiente:
Al observar el grafo de la relación de transición debe resultar claro que se trata de un autómata cuya tupla definidora es: a, b, 0,1,2,3, , 0, 3
y que la relación de transición es justamente representada por el grafo.
Autómatas y Lenguajes Regulares Dependiendo de su estructura y su relación de transición un autómata de estados finitos es capaz de reconocer un determinado conjunto de palabras sobre el alfabeto que opera. Al igual que en el caso de las gramáticas, al conjunto de cadenas aceptadas o reconocidas por un autómata de estados finitos A, se le denomina el Lenguaje del Autómata y también se denota A.
Aunque durante este curso propedéutico no se realizan demostraciones, es importante mencionar un teorema fundamental, debido al notable matemático Steephen Kleene, quien en 1956 demostró que: "La familia de lenguajes formales que pueden ser reconocidos o aceptados por los autómatas de estados finitos, es exactamente igual a la familia de los Lenguajes Regulares" Este importantísimo teorema indica que los autómatas de estados finitos son justamente la máquina adecuada para reconocer lenguajes regulares. Así, para cualquier lenguaje regular, es siempre posible construir un autómata de estados finitos que lo reconoce. Igualmente, ya que como se estudió en la sección correspondiente, las expresiones regulares denotan
justamente la misma familia de lenguajes, entonces resulta que, a partir de la expresión regular que denota a algún lenguaje regular, es también posible construir un autómata de estados finitos que reconozca justo dicho lenguaje y viceversa.
Comencemos el estudio de esta simetría presentando un algoritmo que permite construir una expresión regular que especifique exactamente el mismo lenguaje que es reconocido por un autómata de estados finitos. Este algoritmo construye la expresión regular a partir de la simplificación y reordenamiento de las etiquetas de cada transición, por ello resulta útil estudiar primero el siguiente procedimiento para simplificación de estados en un autómata:
Algorithm
Dado un autómata que relaciona los estados i y j a través de un estado intermedio k en la forma:
lo cual se denotará algebráicamente como: old i, j
simplificar el autómata, eliminando el estado intermedio y creando una sola transición desde el estado cuya etiqueta está dada por la expresión regular: newi, j
i hacia el estado j,
old i, j old i, k old k , k old k , j
Este algoritmo considera todas las transiciones importantes entre los estados i, j y k . Cuando alguna de estas transiciones no existe se considera vacía .
Example
Simplifique el siguiente autómata, eliminando el estado intermedio:
Siguiendo el algoritmo anterior y considerando que la transición directa entre i y j no está presente, entonces: newi, j
old i, j old i, k old k , k old k , j
a a b
aa b
y, por lo tanto, la simplificación pedida es:
Este algoritmo resulta útil en más de una forma. En primer lugar, permite la simplificación de autómatas sin modificar el lenguaje reconocido. En segundo lugar, establece la relación básica entre la transición entre estados que realiza un autómata y la estructura de las cadenas aceptadas (y denotadas por la expresión regular). Este algoritmo se usará en forma de procedimiento como parte del algoritmo siguiente: Algorithm Dado un Autómata de Estados Finitos A, construir una Expresión Regular E con la propiedad de que E A, de la siguiente forma:
1
Crear un nuevo estado inicial ( s ) y una transición,etiquetada , desde s hacia el estado inicial original.
2
Crear un nuevo estado final ( f ) y transiciones, etiquetadas , desde todos los estados finales originales hacia el nuevo estado
3
Por cada pareja de estados i , j que presenten más de una transición entre ellos, reemplazarlas todas por una sola transición etiquetada con la expresión regular de la suma de todas las etiquetas anteriores.
4
Usando el procedimiento de eliminación de estados visto anteriormente, eliminar un estado a la vez en el autómata, hasta que los únicos estados restantes sean s y f . Al llegar ese momento la etiqueta de la única transición restante será la expresión regular buscada.
Veamos un ejemplo del funcionamiento de este algoritmo:
Example autómata:
Obtenga una expresión regular cuyo lenguaje sea exactamente el mismo que es reconocido por el siguiente
Sin necesidad de conocer el lenguaje reconocido por el autómata, es posible seguir, paso a paso, el algoritmo anterior para obterner la expresión regular pedida.
Tal como se indica en los primeros dos pasos del algoritmo, creamos un nuevo estado inicial que substituye al original y un nuevo estado final que también substituye a todos los estados finales anteriores. En ambos casos establecemos las transiciones indicadas por el algoritmo:
Después, se deben eliminar sucesivamente todos los nodos anteriores del autómata. Para ello conviene identificar primero aquellos estados por los cuales no pasa ninguna trayectoria que conecte estados adyacentes. Tal es el caso del estado ( 2) y, por tanto, este estado puede ser eliminado por completo, ya que no afecta el resultado final:
En seguida parece inmediata la reducción del estado ( 0) aplicando el procedimiento respectivo para simplificar la
trayectoria que une a los estados ( s) y (1): new s, 1
old s, 1 old s, 0old 0, 0 old 0, 1
a
a
Por lo que el autómata queda:
Por último, eliminar el estado ( 1) usando el mismo procedimiento: new s, f
old s, f old s, 1old 1, 1 old 1, f
aa b
a
a b
Con lo cual se llega a la expresión buscada.
Como se mencionó más arriba, el hecho de que, tanto las expresiones regulared, como los autómatas de estados finitos, están asociados con los lenguajes regulares, permite establecer algoritmos de conversión en ambos sentidos. El algoritmo
anterior obtiene una expresión regular para el lenguaje reconocido por un autómata y, el algoritmo que a continuación se presentará opera justo de manera inversa, construyendo un autómata para reconocer el mismo lenguaje descrito por un a expresión regular. Ambos procesos pueden realizarse de forma intuitiva y empírica cuando el lenguaje en cuestión es sencillo, por ejemplo:
Example Construya un autómata de estados finitos que sea capaz de reconocer exactamente el mismo lenguaje que la expresión regular a b abb sobre el alfabeto a, b. Inicialmente se identifica que el lenguaje especificado por dicha expresión es el de todas las palabras, sobre a, b, tales que terminan con la subcadena abb. Dicho lenguaje no es complicado de manejar y se puede, intuitivamente diseñar un autómata que lo reconoce:
Observe que, la única trayectoria desde el nodo inicial hasta el único nodo de aceptación pasa por todos los estados y está etiquetada secuencialmente abb. Cualquier otro símbolo encontrado en la palabra de entrada ocasionará que el autómata cambie a un estado que no es final.
En ocasiones, sin embargo, se puede estar estudiando un lenguaje regular que no sea tan sencillo para diseñar un autómata que lo reconozca. Afortunadamente se dispone de un algoritmo general que permite, a partir de cualquier expresión regular, diseñar el autómata que reconoce el mismo lenguaje.
Algorithm Para construir un Autómata de Estados Finitos, capaz de reconocer el mismo lenguaje especificado por una Expresión Regular: 1) Crear un estado inicial y uno final, así como una transición entre ellos etiquetada con la expresión regular en cuestión.
2) Transformar sucesivamente todos los sub-diagramas según la siguiente tabla: Los sub-diagramas del tipo:
Transormarlos en:
Según este algoritmo, la expresión regular correspondiente a la cerradura debe ser transformada en un diagrama que involucra símbolos nulos. Los autómatas que contienen transiciones de este tipo (etiquetadas con el símbolo nulo) se denominan Autómatas Finitos No-Determinísticos. En general, para distinguir a estos autómatas no-determinísticos de todos los demás se hace notar que, para que un autómata sea no-determinístico debe cumplir alguna de las siguientes condiciones: