You are on page 1of 130

LENGUAJES Y AUTOMATAS

DR. RAMON ZATARAIN CABADA

INDICE
1. 2. 3. 4. 5. 6. INTRODUCCION GRAMATICAS AUTOMATAS FINITOS MAQUINAS DE TURING GRAMATICAS Y AUTOMATAS APLICACIONES A LENGUAJES

1. INTRODUCCION
1.1 CONJUNTOS FINITOS E INFINITOS Los conjuntos X={1,2,3} Y={a,b,c,d} se definen de una manera explcita. Los conjuntos que contienen un nmero finto muy largo de miembros o un nmero infinto de miembros se definen de manera implcita. Ejemplo: El conjunto de todos los cuadrados perfectos es definido como: {n | n=m2 para algn nmero natural m}

El conjunto vaco se representa por 0, y es el conjunto que no tiene miembros, o sea que 0={}

Una cadena de un conjunto X es una secuencia finta de elementos de X. Las cadenas son objetos fundamentales usados en la definicin de lenguajes. El conjunto de elementos de donde las cadenas son producidas son llamados alfabetos de el lenguaje. Un alfabeto consiste de un conjunto finto de objetos no divisibles. El alfabeto de un lenguaje se representa por S. El alfabeto de un lenguaje natural como el espaol consiste de las palabras de el lenguaje. Ejemplo: Sea ={a,b,c}. Las siguientes son cadenas de ese alfabeto: abc, ccb, cab,aaaabbbccc

Comnmente los elementos de un alfabeto se representan por caracteres nicos como letras (a,b,c) o dgitos (1,2,3). La cadena que contiene cero elementos es llamada cadena nula o vaca y se representa por l. La concatenacin de dos cadenas u y v, escrita uv, es pegar las dos cadenas para formar una nueva. Ejemplo: Sea u=ab , v=ca y w=bb. Entonces uv=abca vw=cabb (uv)w=abcabb u(vw)=abcabb El resultado de la concatenacin de u,v y w es independiente de el orden en que las operaciones son ejecutadas. Matematicamente esta propiedad es conocida como asociatividad.

La longitud o tamao de una cadena w es el nmero de elementos que contiene la cadena. Ejemplo: La cadena abcdef tiene una longitud de 6. Una subcadena u de la cadena v existe si existen las cadenas x y y de tal forma que v = xuy. Esto quiere decir Que u ocurre dentro de v. Un prefijo de v es una subcadena u en donde x es la cadena vaca en la descomposicin de v. Eso quiere decir que v=uy. Similarmente, u es un sufijo de v si v=xu. Ejemplo: ab es un prefijo de la cadena abcdef y ef es un sufijo de la misma cadena.

1.2 Representacin finta del lenguaje


Un lenguaje consiste de un grupo de cadenas de un alfabeto. Usualmente ciertas restricciones se aplican a las cadenas de el lenguaje. Por ejemplo el lenguaje Espaol consiste de todas las cadenas de palabras que nosotros llamamos oraciones. No todas las combinaciones de palabras forman oraciones. De alli que un lenguaje consiste de un subconjunto de el conjunto de todas las posibles cadenas que se pueden formar de el alfabeto. Ejemplo: El lenguaje L de cadenas de el alfabeto {a,b} en donde cada cadena comienza con una a y tiene longitud par. Las cadenas aa, ab, aaaa, abbb, abab, abbbaaba forman parte de ese lenguaje.

El lenguaje anterior se puede definir recursivamente como: i) Base: aa, ab son miembros de L. ii) Paso recursivo: Si u es miembro de L, Entonces uaa, uab, uba, ubb son miembros de L. iii) Cierre (Closure): Una cadena u es miembro de L solo si puede ser obtenida de los elementos base por un nmero finto de aplicaciones del paso recursivo.

Ejemplo: El lenguaje L consiste de cadenas del alfabeto {a,b} en donde cada ocurrencia de b es inmediatamente precedida por una a. Por ejemplo, l, a, abaab estan en L y bb, bab, abb no estan en L. i) Base: l es miembro de L. ii) Paso recursivo: Si u es miembro de L, Entonces ua, uab son miembros de L. iii) Cierre (Closure): Una cadena u es miembro de L solo si puede ser obtenida de los elementos base por un nmero finto de aplicaciones del paso recursivo. Definiciones recursivas como la anterior son una herramienta para definir las cadenas de un lenguaje. Sin embargo esta tcnica no es suficiente para definir lenguajes complejos como los Lenguajes de Programacin.

Otra tcnica para construr lenguajes es usar operaciones de conjuntos (sets) para construr, desde conjuntos mas simples conjuntos complejos de cadenas. Por ejemplo La concatenacin de los lenguajes X y Y, denotada XY, es el lenguaje XY = {uv | u es miembro de X y v es miembro de Y} La concatenacin de X consigo mismo n veces es denotada como Xn. X0 es definida como {l}.

Ejemplo: Sea X = {a,b,c} y Y = {abb, ba}. Entonces XY = {aabb,babb,cabb,aba,bba,cba} X0 = {l} X1 = X = {a,b,c} X2 = XX = {aa,ab,ac,ba,bb,bc,ca,cb,cc} X3 = X2X = {aaa,aab,aac,aba,abb,abc,aca,acb,acc, baa,bab,bac,bba,bbb,bbc,bca,bcb,bcc, caa,cab,cac,cba,cbb,cbc,cca,ccb,ccc} Una operacin importante es el Kleene Star, denotada para un conjunto X como X*, que no es otra cosa que la concateNacin de del mismo lenguaje.

Lo anterior tambin es representado como v X* = U Xi i=0 Contien todos loas cadenas construdas desde X incluyendo la cadena nula. Si no se incluye la cadena vaca entonces tenemos a v X+ = U Xi i=1 El conjunto de cadenas no nulas construdas desde X.

Ejemplo: El lenguaje L = {a,b}*{bb}{a,b}* consiste de las cadenas del alfabeto {a,b} que contiene la subcadena bb. La concatenacin de el conjunto {bb} asegura la presencia de bb en cualquier cadena en L. Los conjuntos {a,b}* permiten cualquier nmero de as y bs, en cualquier orden, y que preceden y siguen la ocurrencia de bb. Las cadenas bb, abba, ababbbabab, bbaaaa, aaaabb son ejemplos de cadenas de el lenguaje L.

Ejercicios. Sea X = {aa,bb} y Y = {l,b,ab} Lista las cadenas en el conjunto XY. Lista las cadenas de el conjunto Y* de longitud tres o menos. Cuntos cadenas de longitud 6 existen en X* ?

Dar un lenguaje L sobre el alfabeto {a,b} que contenga todas las cadenas que comienzan con aa y terminan con bb.
Sea L1= {aaa}*, L2= {a,b}{a,b}{a,b}{a,b} y L3= L2*. Describe las cadenas que estan en los lenguajes L2, L3 y L1 L3

2. GRAMATICAS
1.1 Introduccin a las Gramticas Una gramtica es una herramienta o notacin que nos permite definir un lenguaje por medio de una serie de reglas que nos dicen como construr cadenas validas (oraciones) para el lenguaje. Chomski formaliz el concepto de una gramatica, al hacer observaciones importantes en la complejidad de una gramtica que a su vez establece la complejidad de el lenguaje Como se estableci antes, un lenguaje es un conjunto finto de cadenas desde un alfabeto. Una gramtica es una forma de describir al lenguaje.

2.2 Estructuras de las gramticas Una gramtica G consiste de: Un alfabeto de smbolos terminales S Un conjunto finto de variables (smbolos no-terminales) V Un conjunto de reglas de substitucin o producciones P Un smbolo inicial S
G = (S, V, P, S) Una regla de substitucin o produccin est formada por una parte izquierda a y una parte derecha b: a b Su significado es reemplazar a con b.

La parte izquierda son cadenas desde V S, que contienen al menos una variable desde V: a es un miembro de (V S)* V (V S)*

Mientras que el lado derecho son cadenas desde V S: b es un miembro de


(V S)* La gramtica produce cadenas de S* al aplicar las producciones e iniciando con el smbolo inicial hasta que no existan variables. Cada vez que una produccin o regla es aplicada, una forma de sentencia (cadenas de variables de V y terminales de S) es producida.

El lenguaje generado por la gramtica, L(G), es el conjunto de cadenas que pueden generarse aplicando las reglas anteriormente descritas. Ejemplo: Consideremos la siguiente gramtica G = (S, V, P, S) V= {S, A} S= {a, m, o, t} P={ (1) S toAto, (2) A ma, (3) A maA } Que genera el lenguaje L(G)= {tomato, tomamato, tomamamato,...} Usando las siguientes reglas para la cadena tomamato S(1) toAto(3) tomaAto(2)tomamato

Ejercicios: Construr una gramtica con alfabeto {a,b,c} para los Siguientes lenguajes: {anb2ncm | n,m > 0} {anbmc 2n+m | n,m>0} Construr una gramtica con alfabeto {a,b} cuyo lenguaje contiene Precisamente cadenas con el mismo numero de as y bs.

2.3 Clasificacin de las Gramticas N. Chomsky en 1959 en su famoso artculo On certain formal properties of grammars defini cuatro familias de gramticas (y lenguajes) que forman lo que se llama la jerarqua de Chomsky. Estas son: gramticas sin restricciones, de contexto sensitivo, de contexto libre y regulares (tipo 0, 1, 2 y 3). La restricciones puestas en cada regla aumentan con el nmero de la gramtica. Gramticas sin Restriciones. Son el tipo de gramtica mas generales. Una produccin uv indica que una ocurrencia de una subcadena u en una cadena puede ser reemplazada con la cadena v. La nica reestriccin en una produccin es que el lado izquierdo no sea cadena nula.

Una definicin formal de una gramtica sin restricciones es la siguiente: Un cuadruplo (V, S, P, S) donde V es un conjunto finto de variables, S (el alfabeto) es un conjunto de smbolos terminales (del alfabeto), P es un conjunto de producciones y S es el smbolo inicial de V. Una produccin de esta clase de gramtica tiene la forma uv, donde u es miembro de (V S)+ y v es miembro de (V S)* . Ejemplo: La gramtica sin restricciones V= {S, A, C} S= {a,b,c} S aAbc | l A aAbC | l Cb bC Cc cc Con smbolo inicial S genera el lenguaje {ai bi ci | i>=0}.

Gramticas de Contexto Sensitivo Estas gramticas representan un paso intermedio entre las gramticas de contexto libre y las gramticas sin restricciones. Para estas gramticas no existe restriccin alguna en la parte izquierda de la produccin, pero la longitud de la parte derecha debe ser al menos la longitud de la parte izquierda. Una definicin formal de una gramtica de conexto sensitivo es la siguiente: Un cuadruplo G= (V, S , P, S) donde cada produccin tiene la forma u v, donde u es un miembro de (V S)+ , v es miembro de (V S)+ y longitud(u) >= longitud (v). Un lenguaje generado por una gramtica de contexto sensitivo es llamado lenguaje de contexto sensitivo (en gramticas sin restricciones el lenguaje tambin es llamado sin restricciones).

Si eliminamos las producciones de cadena vaca de la anterior gramtica sin restricciones, tenemos una gramtica de contexto sensitvo. S aAbc | abc A aAbC | abC que produce un lenguaje similar al ejemplo anterior. Gramticas de Contexto Libre La flexibilidad proporcionada por las gramticas de contexto libre es tal que es la mas usada para definir la sintaxis de los lenguajes de programacin. Una definicin formal de una gramtica de conexto sensitivo es la siguiente:

Es un cuadruplo G= (V, S , P, S) donde V es un conjunto finto de variables, S es un conjunto finto de smbolos terminales, P es un conjunto finto de reglas y S es el smbolo inicial. Cada produccin tiene la forma uv, donde u es una variable del conjunto V, y v es un miembro de (V S)* . Esto quiere decir En la parte izquierda dela produccin viene siempre una variable (smbolo no terminal) y en la parte derecha pueden venir cualquier nmero de smbolos terminales y no terminales incluyendo la cadena nula.
Una gramtica de contexto libre produce un lenguaje tambin de contexto libre: G L(G).

Ejemplo: La siguiente gramtica genera el lenguaje que consiste de cadenas con un nmero par positivo de as. G= (V, S , P, S) V={S,A} S={a,b} P: S AA A AAA | bA | Ab | a Una derivacin por la izquierda es la siguiente: SAAbAAbaAbaa Una derivacin por la derecha SAAAbAAbaaba

Un rbol de parsing o rbol de derivacin es una representacin grfica de la derivacin. Ejemplo: La siguiente figura representa el rbol de parsing para las cadenas del ejemplo anterior. S S A A

A
a

A
b A

Ejercicios: Construr gramticas de Contexto Libre (GCL) para los siguientes lenguajes: 1. L(G)= {anbman | n>0, m>0} 2. L(G)= {anbmcmd2n | n>=0, m>0} La solucin tambin es una gramtica de contexto sensitivo? Si no, que modificaras de la GCL para hacerla GCS? 3. Sea G una GCL S abSc | A A cAd | cd Escribe una derivacin por la izquierda de ababccddcc Construye un rbol de parsing para la misma cadena Usa notacin de conjuntos para definir L(G)

Gramticas Regulares Estas gramticas constituyen una importante subclase de las gramticas de contexto libre. Son tambin tiles en la definicin de lenguajes de programacin. Una gramtica es regular (GR) si cada regla o produccin cumple con las siguientes formas: 1. A a 2. A aB 3. A l Donde A, B son miembros de V y a es miembro de S. Una GR G genera un lenguaje regular L(G).

Ejemplo La siguiente es una GCL ( l U (ab)+a* ) G: S abSA | l A Aa | l una correspondiente gramtica regular sera: S aB | l B bS | bA A aA | l

Expresiones Regulares Sea S un alfabeto. Una expresin regular para S se define recursivamente como: i) Base: 0 (el conjunto vaco), l y a para cada a que es miembro de S, son expresiones regulares para S. ii) Paso recursivo: Sea u y v expresiones regulares para S. Las expresiones (u U v) (uv) (u*) son expresiones regulares para S. iii) Cierre: u es una expresin regular para S solo si puede ser obtenido de los elementos base por medio de un nmero infinto de aplicaciones de el paso recursivo.

Debido a que la unin y concatenacin son asociativas, los parntesis pueden ser omitdos de las expresiones que consisten de una secuencia de una de esas operaciones. Se Asigna tambin un orden de precedencia a los operadores. La operacin Kleene Star tiene el mayor grado de precedencia, seguido de la concatenacin y la unin. Por ltimo, podemos decir que las expresiones regulares, al igual que las gramticas, son una notacin usada para especificar o definir un lenguaje Ejemplo: Sea S = {a,b} 1. La expresin regular (a|b) denota el lenguaje {a, b} 2. La ER (a|b)(a|b) denota el lenguaje {aa,ab,ba,bb} 3. La ER a* denota el lenguaje {l, a, aa, aaa,...} 4. La ER (a|b)* denota el lenguaje de todos loas cadenas que contienen cero o mas instancias de una a o b, esto es, el conjunto de todas las cadenas de as y bs.

5. La ER a | a*b denota el lenguaje que contiene la cadena a y las cadenas que consisten de cero o mas as seguido de una b. 6. La ER (a|b)*bb(a|b)* denota el lenguaje que contiene las cadenas de as y bs con al menos una subcadena bb. Ejercicios: sea S = {a,b} Escribir una ER para un lenguaje con cadenas que inician y terminan con a y contienen al menos una b. Lo mismo pero par el lenguaje de cadenas que contienen la subcadena aa y y la subcadena bb. Lo mismo pero para el lenguaje de cadenas que contienen la subcadena aa mnimo dos veces (cuidaddo con aaa). Lo mismo pero para el lenguaje de cadenas que no inician con la la subcadena aaa.

2.4 Representacin de Gramticas En las secciones anteriores, se usaron pequeas gramticas para generar lenguajes tambin pequeos. Esos ejemplos sirvieron para ilustrar el uso de gramticas para definir lenguajes. Por otra parte, en el diseo de lenguajes de programacin se maneja sintxis y alfabetos mas complejas y mas grandes. Esto Por supuesto, incrementa la complejidad de las reglas para generar el lenguaje.
Notacin de BNF. John Backus y Peter Naur inventaron un sistema de reglas para definir el lenguaje de programacin ALGOL 60. Este sistema recibi el nombre de Backus-Naur Form o BNF. La sintxis del Pascal tambin fue definido con este sistema o tcnica, y hoy en da se usa para definir la gran mayora de los lenguajes de programacin.

Una especificacin BNF es un conjunto de reglas de produccin, escritas como: <Smbolo de V> ::= <expression with symbols de V y S > Ejemplo: Constantes Numricas en Pascal
<digito> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 <entero sin signo> ::= <digito> <entero sin signo> | <digito> <real sin signo> ::= <entero sin signo> . <entero sin signo> | <entero sin signo> . <entero sin signo> E <factor de escala> <entero sin signo> E <factor de escala> <factor de escala> ::= <entero sin signo> | <signo> <entero sin signo> <signo> ::= + | <numero sin signo> ::= <entero sin signo> | <real sin signo> <constante sin signo> ::= <numero sin signo> <constante> ::= <numero sin signo> | <signo> <numero sin signo>

Diagramas Sintcticos Es tambin un tipo de notacin para especificar la sintxis de Un lenguaje. La diferencia con la notacin BNF es que en esta se usan lneas y figuras en lugar de nombres.

Diagrama sintctico de un Smbolo no terminal


Smbolo no terminal

Smbolo terminal

Ejemplo: Diagramas sintcticos para expresiones aritmticas como a + b - 8

expresin

trmino trmino

+ -

trmino factor * /

factor

factor identificador nmero

factor

expresin

3. AUTOMATAS FINITOS
En este captulo estudiaremos un tipo de mquinas abstractas de computacin en donde la entrada consiste de una cadena de un determinado alfabeto, y la salida o resultado de la computacin es la aceptacin o no de la cadena de entrada. El conjunto de cadenas aceptadas por la mquina es el lenguaje reconocido por la mquina. De esta forma, asociamos lenguajes y mquinas, los dos tpicos principales de esta materia.

3.1 Autmatas Fintos Determinsticos (AFD) Un AFD es un quintuple M = (Q, S, d, q0, F), donde Q es una mquina de estados finta, S es el alfabeto, q0 es el estado inicial, F es el estado(s) final(es) y d es una funcin de Q x S a Q llamada la funcin de transicin. Ejemplo: El siguiente AFD acepta el conjunto de cadenas que contienen la subcadena bb y donde S={a,b}. Esto quiere decir que L(M) = (a|b)*bb(a|b)* . M: Q = {q0, q1, q2 } S = {a, b} F = {q2}

(Continuacin)

M: Q = {q0, q1, q2 } S = {a, b} F = {q2} La funcin de transicin d es dada en forma tabular y llamada tabla de transicin.

d
q0 q1 q2

a
q0 q0 q2

b
q1 q2 q2

Para las cadenas abba y abab tenemos las siguientes operaciones (computaciones) en la tabla: [q0, abba] -[q0, bba] -[q1, ba] -[q2, a] -[q2, l] acepta [q0, abab] -[q0, bab] -[q1, ab] -[q0, b] -[q1, l] rechazado

La cadena abba es aceptada ya que la computacin se para (halts) en estado q2. Una cadena de entrada es aceptada si existe una computacin que procesa toda la cadena de entrada y para en un estado final o aceptador.

Diagramas de Estado El diagrama de estado de un AFD es un grafo dirigido-etiquetado en el cual los nodos representan los estados de la mquina y los arcos son obtenidos de la funcin de transicin. Otra definicin es la siguiente:
El diagrama de estado de un AFD M = (Q, S, d, q0, F) es un grafo etiquetado G definido por las sig. condiciones: i) Los nodos de G son los elementos de Q. ii) Las etiquetas sobre los arcos de G son elementos de S. iii) q0 es el nodo inicial, representado con > iv) F es el conjunto de nodos aceptadores; cada nodo acaptador se representa con

v) Existe un arco desde nodo qi a qj etiquetado a si d(qi,a)=qj. vi) Por cada nodo qi y smbolo a es miembro de S, existe exactamente un arco etiquetado a que sale de qi. Ejemplo: El diagrama de estados para el DFA del ejemplo anterior:
a q0 b q1 b a,b

q2

Ejemplo: El DFA siguiente acepta el lenguaje que no contiene la subcadena aa y donde S={a,b}.

b q0 a q1 a

a,b

q2

Ejercicios: 1. Sea M un AFD M: Q = {q0, q1, q2 } S = {a, b} F = {q2}

d
q0 q1 q2

a
q0 q2 q2

b
q1 q1 q0

a) Realizar el diagrama de estados de M. b) Hacer las computaciones de M que procesan las cadenas abaa bbbabb Bababa c) Cul de las cadenas anteriores son aceptados por M? d) Escribir la expresin regular para L(M)

Ejercicios: 2. Construye AFD en forma de diagrama de estados que acepte el lenguaje descrito: El conjunto de cadenas para alfabeto {a,b} en donde la subcadena aa ocurra al menos dos veces. El conjunto de cadenas para alfabeto {a,b,c} que comienzan con a, contienen exactamente dos bs y terminan con cc. (ab)*ba (ab)*(ba)*

3.2 Autmatas Fintos No determinsticos (AFN) La diferencia es el no determinismo de esta clase de autmatas. Esto se manifiesta en la funcin de transicin que en los AFD significa moverse de un estado a otro bajo un smbolo de entrada. En un AFN la funcin de transicin tambin contempla lo anterior, pero adems contempla otras dos transiciones: moverse de un estado a varios estados bajo una sola entrada o smbolo; y moverse de un estado a otro bajo no entrada o smbolo. Estas tres transiciones se dan como:
a qn a qi

qi

qn

a
a

qj

qn

La relacin entre AFD y AFN se sumariza con la siguiente frase: Cada AFD es AFN. La funcin de transicin de un AFD especifca exactamente que con una entrada solo se puede ir a un estado. Mientras en un AFN con una entrada se puede ir a cero, uno o mas estados. Esto quiere decir que la familia de AFDs es un subconjunto de los AFN.

Una cadena de entrada para un AFN puede generar distintas computaciones. En unos casos el automata para (halt) sin aceptar la cadena, en otros la rechaza o las acepta.

Ejemplo: El AFN M para la cadena ababb con tres diferentes computaciones. M: Q = {q0, q1, q2 } S = {a, b} F = {q2}

d
q0 q1 q2

a
q0 0 0

b
{q0, q1} q2 0

[q0 ,ababb] -[q0 ,babb] -[q0 ,abb] -[q0 ,bb] -[q0 ,b] -[q0 , l]

[q0 ,ababb] -[q0 ,babb] -[q1 ,abb]

[q0 , ababb] -[q0 , babb] -[q0 , abb] -[q0 , bb] -[q1 , b] -[q2 , l]

La primera computacin procesa toda la entrada y para en un estado de rechazar. La segunda computacin, para (halt) despus de ejecutar tres instrucciones ya que no existe accin cuando la mquina esta en estado q1 y leyendo una a. Por ltimo, la tercera computacin acepta la entrada. Una cadena de entrada es aceptada si existe una computacin que procesa toda la cadena de entrada y para en un estado final o aceptador. Una cadena de entrada est en el lenguaje de un AFN si existe una computacin que lo acepte. El lenguaje de un AFN M, denotado L(M), es el conjunto de cadenas aceptadas por M.

El diagrama de estados para el AFN del ejemplo anterior es el siguiente:

a,b

q0

q1

q2

El diagrama aceptado por este ltimo AFN es (a | b)*bb Es AFN porqu existen dos transiciones de q0 a q0 y de q0 a q1 ante una misma entrada: b

El siguiente diagrama de estados para un AFN acepta el lenguaje expresado por (ab)* | a*

q0 a q3 a

q1

b a

q2

Es AFN porqu existen dos transiciones de q0 a q1 y de q0 a q3 ante una misma entrada: a

Transiciones Lambda Las transiciones de estado a estado en AFD y AFN se llevan a cabo al procesar o leer un smbolo de entrada. Podemos tambin redefinir a un AFN de tal manera que admita transiciones de estado a estado sin leer un smbolo de entrada. Una transicin de esta forma es llamada transicin lambda. A este tipo de mquinas se les llama AFN- l. Por medio de movimientos lambda se puede construr mquinas complejas a partir de mquinas mas simples. La definicin de halting (cuando parar) se extiende para incluir la posibilidad que una computacin puede continuar usando transiciones lambda despus de que toda la cadena de entrada ha sido leda. Tambin se pide, al igual que en los anteriores autmatas, que termine en un estado final, esto para finalizar el AFN-l con xito.

Ejemplo: Sea M1 y M2 las siguientes mquinas que aceptan los lenguajes descritos por (a | b)*bb (a | b)* y (b | ab)* (a | l).
a,b

M1
b Q1,1 b

a,b

M2
a

q1,0

Q1,2

Q2,0

Q2,1

Podemos construr mquinas compuestas combinando los doagramas de estado M1 y M2.

a,b

a,b b b Q1,2

q1,0

Q1,1

l
b

a Q2,0 b Q2,1

El lenguaje del AFN-l M es L(M1) U L(M2) Una computacin en la mquina M comienza siguiendo un arco lambda a un estado inicial de M1 o M2.

Ejemplo: Un AFN-l M que acepta L(M1) L(M2), la concatenacin de dos lenguajes se construye juntando las dos mquinas con un arco lambda.
a,b

M1
b
Q1,1 b

a,b

M2
a

q1,0

l
Q1,2
Q2,0

Q2,1

Una cadena de entrada es aceptada solo si consiste de una cadena de L(M1) seguido de una cadena de L(M2) .

3.3 Equivalencia de AFN y AFD Tres clases de autmatas finitos se han estudiado. En esta seccin demostraremos que los tres tipos de autmatas aceptan el mismo tipo de lenguajes; mejor dicho, el lenguaje aceptado por un AFN- l es aceptado por un equivalente AFN y tambin por un equivalente AFD. Demostraremos como a un AFN- l y aun AFN le podemos quitar su no determinismo mediante la construccin de un AFD equivalente.

l
q2 Q3

a q1

a Q4, Q5

l
Q6

En la figura anterior las transiciones de el estado q1 ante entrada a son el conjunto {q2, q3, q5, q6}. Esto debido a que podemos alcanzar o llegar a esos estados desde el estado q1 y solo leyendo a. Al estado q4 llegamos leyendo solo l.

La funcin de transicin t de un NFA- l es una funcin un poco diferente a la funcin de transicin d de un AFD o un AFN. En la funcin t, las transiciones ante l son vlidas para moverse de un estado a otro y juntndola con una entrada del alfabeto.

Ejemplo: Las tablas de transicin siguientes ejemplifican las funciones de transicin d y t para el siguiente AFN- l (diagrama de estado M). El lenguaje de M es a+c*b*.

a q0
a a l

b q1

q0
q1 q2

{q0, q1, q2}


0 0

0
{q1} 0

0
0 {q2}

{q1}

q2 c

t q0 q1 q2

a {q0, q1, q2} 0 0

b 0 {q1} {q1} 0 0

{ q1, q2}

La funcin de transicin t es usada para construir un autmata finito determinstico equivalente. El procedimiento usa el diagrama de estados de el AFN- l para construir el diagrama de estados de el equivalente AFD. Ejemplo: Construir un AFD equivalente para el siguiente AFN- l. a b q0 a q2 c

a l

q1

a q0 a

b q1 l Su correspondiente diagrama de estados:


t q0 q1 q2 {q1} { q1, q2} {q0, q1, q2} a {q0, q1, q2} 0 0 0 0 {q0, q1, q2} b 0 {q1} {q1} {q1} {q1} {q1} 0 0 { q1, q2} 0 { q1, q2} { q1, q2} c

a q2

c Se crean tres nuevos estados a los cuales se les aplica el mismo procedimiento para obtener hacia que estados se mover. Este procedimiento termina hasta que no hay no se genere un nuevo estado

A partir del diagrama de estados se puede construir el AFD equivalente. a

t q0 q1 q2 {q1} { q1, q2}

a {q0, q1, q2} 0 0

b 0 {q1} {q1} 0 0

{q0}

{q0, q1, q2} c c {q1, q2} b

{ q1, q2} {q1} {q1} 0 { q1, q2}

b,c

0 0

0 a,b,c

a,c b

{q1} a

{q0, q1, q2}

{q0, q1, q2}

{q1}

{ q1, q2}

El AFN M acepta el lenguaje a+ b+. Procedemos a convertirlo a un equivalente AFD.


M: a a b a

q0

q1

q2

a
M: {q0} a {q0, q1} a, b

b a

{q1, q2} b

Las mquinas M1 and M2 aceptan a(ba)* and a* respectivamente.

M1 :

q1

a q2 M2 : q3

Usando arcos lambda para conectar un nuevo estado inicial a los estados iniciales de las mquinas originales creamos un NFA- l M que acepta a(ba)* | a*.
a b

q1

q2

M:

q0

l
q3

La funcin de transicin para M es


t q0 q1 a {q2, q3} {q2} 0 b

q2

{q1}

q3

{q3}

El equivalente AFD obtenido es


a {q0, q1, q3} b b

a {q2, q3}
b

{q3}

{q1} b a
{q2} b

a,b

3.4 Propiedades de los Lenguajes aceptados por un Autmata Finito. Cada autmata finito con alfabeto S acepta un lenguaje para S. Podemos probar que la familia de lenguajes aceptados por un autmata finito consiste precisamente de los conjuntos o lenguajes regulares para S. Primero demostramos que cada conjunto o lenguaje regular es aceptado por algn AFN- l. La demostracin va de acuerdo a una definicin recursiva. Los lenguajes o conjuntos regulares se construyen a partir de los elementos bsicos 0 (conjunto o estado vaco), l (cadena vaca) y conjuntos individuales que contienen elementos del alfabeto.

Los diagramas de estado para las mquinas que aceptan dichos conjuntos son:

q0

q1 a

q0
q0

q1

q1

Conjuntos regulares se construyen de los elementos bsicos usando unin, concatenacin y operacin Kleene Star. Al igual que los conjuntos regulares, autmatas fintos mas complejos se pueden construir a partir de los diagramas anteriores y que acepten la unin, concatenacin y operacin Kleene Star de lenguajes regulares. Ejemplo: El lenguaje L(M1) U L(M2) es aceptado por la mquina siguiente:
SM1

l S l
SM2

M1

FM1

l F

M2

FM2

La concatenacin de dos lenguajes L(M1) L(M2) regulares puede ser aceptado por la mquina siguiente: l

SM1

M1

FM1

SM2

M2

FM2

Una mquina que acepta L(M1)* es la siguiente: l


l S SM1 M1 l l FM1 F

CONCLUSION Usando los autmatas finitos anteriores podemos construir una mquina para cualquier expresin regular que describa a un lenguaje o conjunto regular. Por lo tanto, la conclusin es de que la familia de lenguajes aceptados por una mquina o autmata finito son del tipo regular.

Ejercicio: Construir un AFN- l que acepte el lenguaje denotado por (a|b)*ba. a b

ba

(a|b) a l l b l

(a|b)*

l l

l
l b

l l l l

(a|b)*ba l l a

l
l b

l l l l

l
l

3.5 Autmatas Finitos y Expresiones Regulares. Los lenguajes regulares son definidos por medio de expresiones regulares y aceptados por medio de autmatas finitos. Podemos establecer que un lenguaje es regular si Es una expresin regular bajo un S. Es aceptado por un AFD, AFN o AFN- l. Es generado por una gramtica regular. En cuanto a las expresiones regulares y autmatas, hemos ya comprobado en la seccin anterior que podemos construir un autmata finito para cualquier expresin regular dada. Por otra parte existen mtodos para producir una expresin regular a partir de un autmata finito.

3.6 Determinacin de lenguajes regulares y no regulares. Dado el lenguaje {aibi | i<=n} podemos construir un AFD que acepte dicho lenguaje? El siguiente AFD acepta dicho lenguaje pero est incompleto. a b b a

a b
b b

b
b

El AFD anterior est incompleto puesto que es imposible construir un AFD para un lenguaje que no es regular. De hecho dicho lenguaje es del tipo contexto libre, o es un lenguaje no regular. Se puede demostrar que un lenguaje es regular al construir un autmata finito que lo acepte. Pero para demostrar que no es regular necesitamos usar otras tcnicas (e.g. Pumping lemma) que veremos en otro captulo.

4. AUTOMATAS DE PUSHDOWN
Los lenguajes regulares se caracterizan por ser lenguajes generados por gramticas regulares y aceptados por autmatas finitos. En este captulo estudiaremos un tipo de mquina usada para aceptar lenguajes de contexto libre. Esta mquina recibe el nombre de autmata de push-down (APD).

4.1 Definicin. Un Autmata de Push-Down (APD) es una mquina de estado finto aumentada o extendida con una pila de memoria externa. La adicin de la pila al autmata le proporciona a este un medio de almacenamiento de memoria LIFO (last-in, first-out). Esta combinacin de pila con estados le da la posibilidad a un APD de aceptar lenguajes como {aibi | i>=0}. Un APD es un sextuple (Q, S, G, d, q0, F), donde Q es el conjunto finito de estados, S es un conjunto finito de el alfabeto de entrada, G es un conjunto finito llamado el alfabeto de la pila, q0 es el estado inicial, F (un subconjunto de Q) es el conjunto de estados finales y es la funcin de transicin de Q x (S U {l}) x (G U {l}) a subconjuntos Q x (G U {l}) .

Un APD consulta el estado actual, el smbolo de entrada y el el smbolo en el tope de la pila para determinar la transicin en la mquina. La funcin de transicin lista todas las posibles transiciones dada una determinada combinacin de estado, smbolo y tope de la pila. El valor de la funcin de transicin d(qi,a,A) = {[qj,B], [qk,C]} Indica que dos transiciones son posibles cuando el autmata esta en estado qi y leyendo una a con A en el tope de la pila. Si tomamos la primera opcin [qj,B],esto causar que la mquina cambie de estado qi a estado qj procese el smbolo a (leer el siguiente smbolo) Remover A del tope de la pila Meter B dentro de la pila Un APD tambin puede representarse por medio de un diagrama de estados (nuestros ejemplos los utilizaran).

La transicin d(qi,a,A) = {[qj,B]} es representada por

qi

a A/B

qj

El smbolo / representa reemplazo (reemplazar A en el tope de la pila por B). El dominio de la funcin de transicin permite transiciones lambda en el smbolo de entrada y en el tope de la pila.

Ejemplo:

1. d(qi, l,A) = [qi, l]


qi

l A/l *Pop una A

2. d(qi, l, l) = [qi, A]
qi

l l/A *Push una A a l/l qi

3. d(qi,a, l) = [qj, l]

qj
*Lee una a

4.2 Lenguajes aceptados por un Autmata de Push-Down La adicin o extensin al autmata finto al manejar una pila (APD) le permite a este ser un aceptador no solo de lenguajes regulares sino tambin de lenguajes de contexto libre. Esto nos permite establecer que existe una correspondencia entre un APD y una gramtica de contexto libre. Lo anterior es demostrable y la forma de hacerlo es por medio de ir construyendo un APD a partir de cada produccin de una gramtica de contexto libre. Para cada regla existe una transicin dentro del APD. Por otra parte un APD podra implementarse con puras transiciones de leer los smbolos de entrada pero sin movimientos en la pila (l/l). Esto nos dara una mquina similar a un autmata finito la cual obviamente va a aceptar cualquier gramtica regular.

4.3 APD determinstico. Un APD es determinstico si existe no mas de una transicin que es aplicable por cada combinacin de estado, smbolo de entrada y tope de la pila. A continuacin construimos un APD M determinstico para aceptar el lenguaje {aibi | i>=0}. M: Q = {q0,q1} S = {a,b} G = {A} F = {q0,q1} d(q0,a, l) = {[q0, A]} d(q0,b, A) = {[q1, l]} d(q1,b, A) = {[q1, l]}

a l/A
q0

b A/l b A/l
q1

Ejercicios: Construir un APD que acepte el lenguaje {wcwR | w es un miembro de {a,b}*}. Construir un APD que acepte el lenguaje {aicjbi | i,j>=0}.

Construir un APD que acepte el lenguaje {aibjck | i+k=j}.

4.4 APD y Gramticas de Contexto Libre Podemos probar que cada lenguaje libre de contexto es aceptado por un APD. Para llevar a cabo esto, las reglas de la gramtica se usan para generar las transiciones de un APD equivalente. Sea L un lenguaje libre de contextos y G una gramtica para ese lenguaje en forma normal de Greibach. En esta forma de Greibach todas las producciones de una gramtica tienen una de las siguientes formas: A aA1A2.An Aa Al La gramtica G en forma de Greibach que acepta {aibi | i>=0} es usada para ilustrar la construccin de un APD equivalente.

S aAB | aB A aAB | aB Bb El APD tiene dos estados: un estado inicial q0 y un estado aceptador o final q1. Una regla S de la forma S aA1A2An genera una transicin que procesa el smbolo terminal a, mete (push) las variables A1A2An a la pila y se mueve al estado q1. El resto de las operaciones usan el smbolo de entrada y el tope de la pila para determinar la transicin apropiada. La funcin de transicin de el APD es definido directamente de las reglas de G. d(q0,a, l) = {[q1,AB], [q1,B]} d(q1,a,A) = {[q1,AB], [q1,B]} d(q1,a,B) = {[q1, l]} Por otra parte es tambin posible construr una gramtica de contexto libre a partir de un APD. G:

5. MAQUINAS DE TURING
La mquina de Turing nos proporciona muchas de las caractersticas comnmente asociadas con una computadora moderna. De hecho, la mquina de Turing fue el modelo utilizado para disear y construir la primer computadora de programa almacenado. Esta mquina utiliza una secuencia de operaciones elementales para acceder y alterar una posicin de memoria. A diferencia de una computadora, una mquina de Turing no tiene un lmite de memoria o de tiempo para realizar un clculo. Por ltimo, la mquina de Turing representa lo mximo dentro de los dispositivos de computacin abstractos.

5.1 Definicin de Mquina de Turing. Una mquina de Turing es una mquina de estado finto en donde en una transicin se escribe un smbolo en la cinta (tape). La cabeza de la cinta puede moverse en cualquier direccin, permitiendo que la mquina lea y manipule la entrada tantas veces como se desee. Mas formalmente, una mquina de Turing es un quintuple M = (Q, S, G, d, q0) donde Q es un conjunto finito de estados, G es un conjunto finito llamado el alfabeto de la cinta y contiene un smbolo especial B que representa un blanco, S es un subconjunto de S {B} llamado el alfabeto de entrada, d es una funcin parcial de Q x G a Q x G x {L,R} llamado la funcin de transicin y q0 (miembro de Q) es un estado distinguido llamado estado inicial.

5.2 funcionamiento de la mquina de Turing. La cinta de una mquina de Turing se extiende indefinidamente en una direccin. Las posiciones de la cinta estn numeradas por los nmeros naturales siendo la posicin mas a la izquierda la nmero cero. 0 1 2 3 4 5 6

.
q0

Una computacin comienza con la mquina en estado q0 y la cabeza de la cinta leyendo la posicin mas a la izquierda. La entrada, una cadena de S* se escribe en la cinta comenzando en posicin uno. Posicin cero y el resto de la cinta es asumido que estn iniciadas con blancos.

El alfabeto de la cinta proporciona smbolos adicionales que pueden ser usados durante la computacin. Una transicin consiste de tres acciones: cambiar el estado, escribir un smbolo en el cuadro ledo por la cabeza de la cinta y mover la cabeza de la cinta. La direccin del movimiento de la cabeza de la cinta puede ser a la izquierda (L) o a la derecha (R). La configuracin de la mquina x
q1

y transicin d(qi,x) = [qj,y,L] se combinan para producir la nueva configuracin

y
qj

La transicin cambi el estado de qi a qj, reemplaz el smbolo x con y y movi la cabeza de la cinta un cuadro a la izquierda. Una mquina de Turing halts (termina) cuando encuentra un estado (par de smbolos) para los cuales no existe definida una transicin. Esto es una terminacin normal. Una transicin de la posicin cero en la cinta puede especificar un movimiento a la izquierda de los lmites de la cinta. Cuando esto ocurre, la computacin se dice termina anormalmente.

Mquina de Turing Standard Son diseadas para ejecutar computaciones en cadenas del alfabeto de entrada. Una computacin comienza con la cabeza de la cinta leyendo el cuadro mas a la izquierda y la cadena de entrada posicin uno. Todos los cuadros a la derecha de la cadena de entrada es asumido estn en blanco.

Ejemplo: La funcin de transicin de una mquina de Turing standard con alfabeto de entrad {a,b} es mostrada a continuacin. La transicin del estado q0 mueve la cabeza de la cinta a posicin uno para leer la entrada. Las transiciones en estado q1 leen la cadena de entrada e intercambian los smbolos a y b. Las transiciones en q2 retornan la mquina a la posicin inicial.

d
q0 q1 q2

B q1,B,R q2,B,L

q1,b,R q1,a,R q2,a,L q2,b,L

Una mquina de Turing puede representarse grficamente por un diagrama de estados. Ejemplo (tabla anterior): Intercambia as y bs en la cadena de entrada.
a/b R b/a R
B/B R q0 B/B L a/a L b/b L

q1

q2

Ejemplo: La siguiente Mquina de Turing con alfabeto de entrada {a,b} produce una copia de la cadena de entrada. Esto quiere decir que una computacin que comienza con la cinta teniendo la forma BuB termina con la cinta BuBuB.
a/a R b/b R q2 q3 b/b R a/a R B/b L a/a R b/b R X/X R Y/Y R

a/X R COPY: q0 B/B R B/B L X/a L Y/b L q1

B/B R

B/a L

a/a L
a/a R b/b R q4 b/b L B/B L

b/Y R

q6 q7

B/B R

q5

Ejercicios: Construir una mquina de Turing para mover la entrada un espacio a la derecha. La configuracin de entrada q0BuB resulta en qfBBuB. Construir una mquina de Turing para concatenar una copia de la cadena de entrada en reversa. La configuracin de entrada q0BuB resulta en qfBuuRB.

5.3 Lenguajes aceptados por la mquina de Turing Una mquina de Turing puede ser usada para calcular funciones y para aceptar lenguajes. En el primer caso el resultado de una computacin se define in trminos del estado en donde termina la computacin o la configuracin de la cinta. En el segundo caso, una computacin acepta o rechaza la cadena de entrada. A diferencia de un autmata finto o de Push Down, la mquina de Turing no necesita leer toda la cadena de entrada para aceptar la cadena. Una mquina de Turing aumentada con estados finales es un sextuple (Q, S, G, d, q0, F) donde F es un subconjunto de Q y contiene los estados finales.

Un lenguaje aceptado por una mquina de Turing es llamado lenguaje recursivamente enumerable. La hablidad de una mquina de Turing para moverse en ambas direcciones y procesar blancos introduce la posibilidad de no parar (halt) ante ciertas entradas. Un lenguaje que es aceptado por una mquina de Turing y que termina (halt) ante todas las cadenas de entrada es llamado lenguaje recursivo. Existen muchas mquinas de Turing que aceptan un lenguaje en particular; algunas pueden parar (halt) para todas las entradas mientras otras no. La existencia de una mquina de Turing que para (halt) con todas las entradas es suficiente para demostrar que el lenguaje es recursivo.

Ejemplo: La mquina de Turing


b/b R B/B R q0 a/a R b/b R

q1

q2

a/a R

q3

acepta el lenguaje (a U b)*aa(a U b)*. La computacin para la cadena aabb examina solo la mitad de la entrada antes de aceptar la cadena completa. El lenguaje (a U b)*aa(a U b)* es recursivo; las computaciones en la mquina terminan (halt) para cada cadena de entrada. Una computacin exitosa termina cuando una subcadena aa es encontrada.

5.4 Ejemplo de mayor fuerza de la Mquina de Turing

5.5 Extensiones de la Mquina de Turing Existen variaciones al modelo de la mquina de Turing standard. Cada variacin o extensin parece incrementar la capacidad de la mquina, pero la realidad es que los lenguajes aceptados por esas mquinas de Turing extendidas son tambin aceptados por mquinas de Turing Standard. Mquinas de Turing de Multipistas En este tipo de mquinas la cinta es dividida en varias pistas. Una posicin en la multipista-cinta contiene n smbolos del alfabeto de la cinta.
PISTA 1 PISTA 2

qj

Una posicin en la cinta en una mquina de 2 pistas es representada por un par ordenado [x,y] donde x es el smbolo en pista 1 y y en pista 2. Una transicin lee y escribe la posicin completa de la cinta y se escribe como: d(qi,[x,y]) = [qj,[z,w],d] donde d es {L,R}

La entrada es puesta en la pista 1. Todas las posiciones en la pista 2 estn en blanco. Aceptacin en este tipo de mquinas de Turing es por medio de estado final. Este tipo de mquinas de Turing, al ser equivalentes a la mquina de Turing standard, acepta lenguajes recursivamente enumerables.

Mquinas de Turing de dos direcciones (two-way) Este tipo de mquinas es identico a una mquina de Turing standard excepto que la cinta se extiende indefinidamente en ambas direcciones (izquierda y derecha). En este tipo de mquinas la cadena de entrad puede ser puesta en cualquier lugar de la cinta. Todas las dems posiciones de la cinta se asume que estn en blanco.

.
q0

Se puede colocar un smbolo especial (#) en una posicin para que sea el lmite de la izquierda (como en una mquina standard). Este tipo de mquinas es tambin equivalente al de la mquina standard (aceptan Lenguajes Rec. Enumerables).

Mquinas de Mltiple Cintas Consiste de k cintas y k cabezas de cintas independientes. Los estados y alfabetos son los mismos que en la mquina standard. La mquina lee las cintas simultneamente pero solo tiene un estado.

CINTA 1 CINTA 2 CINTA 3 qi

Una transicin es determinada por el estado y el smbolo ledo por cada cabeza de cinta. Una transicin puede cambiar el estado escribir un smbolo en cada cinta independientemente reposicionar cada cabeza de cinta. El reposicionamiento consiste de mover la cabeza de la cinta un cuadro a la izquierda o la derecha o incluso dejar la cabeza en su posicin actual. La entrada a la mquina es puesta en la cinta 1. Todas las dems cintas estarn en blanco. Al igual que en las mquinas anteriores este tipo de mquinas acepta lenguajes Rec. Enumerables.

5.6 Mquinas de Turing No Determinsticas Estas mquinas pueden especificar cualquier nmero finito de transiciones para una configuracin dada. Los componentes de una mquina no determinstica, con excepcin de la funcin de transicin, son idnticos a los de una mquina de Turing standard. Las transiciones en una mquina no determinstica son definidas por una funcin de Q x G a los subconjuntos Q x G x {L,R}. Cundo una transicin indica que mas de una accin es posible, una computacin arbitrariamente escoge una de las transiciones. Una cadena de entrada es aceptada por una mquina no determinstica si existe una computacin que termina en un estado aceptador.

5.7 El problema de Halting para las Mquinas de Turing Un problema de decisin consiste de un conjunto de preguntas cuyas respuestas son si o no. Una solucin a un problema de decisin es un procedimiento efectivo que determine la respuesta para cada una de las preguntas. Una mquina de turing es un sistema matemtico ideal para solucionar problemas de decisin. La teora de Church-Turing dice que se puede disear siempre una mquina de Turing para resolver cualquier problema de decisin que tenga solucin por un procedimiento efectivo. Entonces, para establecer que un problema no tiene solucin es suficiente con mostrar que no existe solucin en una mquina de Turing (Undecidability). El mas famoso de los problemas sin solucin (undecidable problem) es el problema de Halting.

El problema de Halting se formula de la forma siguiente: Dada una mquina de Turing arbitraria M con alfabeto de entrada S y una cadena w que pertenece a S* , Parara la computacin de M con la entrada w ? Es importante entender la declaracin del problema. Debemos ser capaces de determinar si una mquina de Turing en particular parar (halt) con una cadena determinada. Por ejemplo la ltima mquina de Turing revisada para (halt) con todas las cadenas conteniendo la subcadena aa. Sin embargo, una solucin del problema halting requiere un algoritmo general que responda la pregunta de halting que para cada combinacin posible de mquina de Turing y cadena de entrada la mquina va a parar.

Ejemplo: Tenemos una mquina de Turing H que resuelve el problema de parada Halting.
M hace parada con entrada w acepta R(M)w

rechaza M no hace parada con entrada w

La entrada consiste de la representacin de la mquina de Turing M seguido de cadena w. La computacin de M con entrada w hace parada. La mquina H es modificada para construir H. Las computaciones de H son las mismas que H excepto que H se cicla indefinidamente cuando H termina en un estado aceptador. Las transiciones de H son construidas agregandole a H que causan que H se mueva indefinidamente a la derecha cuando H entre a un estado aceptador.

H es combinado con una mquina de Turing que copia otra mquina de Turing para formar una nueva mquina D. D
M para con entrada R(M) R(M)
copy
R(M)R(M)

ciclo

para M no para con entrada R(M)

La entrada a la mquina D puede representarse por cualquier mquina Turing. Considera una computacin de D con entrada R(D). Entonces tendriamos lo siguiente: D
D para con entrada R(D) R(D)
copy
R(D)R(D)

ciclo

para D no para con entrada R(D)

En esta ltima mquina D, vemos que D hace parada con entrada R(D), si y solo si, D no hace parada con entrada R(D). Esto es una contradiccin. Sin embargo, mquina D puede construirse desde mquina H que resuelve el problema de parada. La premisa que el problema de parada tiene solucin nos lleva a la contradiccin. Podemos concluir que el problema de parada no tiene solucin.

6. GRAMATICAS Y AUTOMATAS
Las gramticas fueron estudiadas en el captulo 2 donde se introdujo la clasificacin de estas dada por Chomsky. En esta clasificacin las gramticas eran divididas en 4 clases de gramticas: regulares, de contexto libre, de contexto sensitivo y de estructura de frase o sin restricciones. En esta unidad 6 regresamos a estudiar las tres primeras gramticas con un poco mas de profundidad.

6.1 Lenguajes Regulares. Teorema de Kleene. Este teorema establece que un lenguaje L es aceptado por un AFD con alfabeto S si y solo si, L es un conjunto regular para S. Para demostrar esto haremos uso de dos propiedades: 1. La primera ya explicada durante el tema 3.4, se refiere a que cada conjunto regular es aceptado por algn AFN- l. 2. La segunda dice que cada lenguaje aceptado por un autmata finito es un conjunto regular. Y de acuerdo a lo establecido anteriormente sobre la equivalencia de autmatas determinsticos y no determinsticos conclumos con la validez del teorema de Kleene.

Para demostrar la segunda afirmacin, extenderemos la nocin de diagrama de estado. Un grafo de expresin es un grafo dirigido con etiquetas en donde los arcos estn etiquetados por expresiones regulares y contiene un nodo inicial y nodos aceptadores o finales. El lenguaje de un grafo de expresin es la unin de los conjuntos representados por las expresiones regulares aceptadas. Los caminos (paths) en un grafo de expresin generan expresiones regulares. Ejemplo: Los sig. grafos aceptan las exp. reg. u* y u*vw*. u

u
v

Para los grafos anteriores los cuales son muy sencillos es simple determinar las expresiones regulares aceptadas. Existe un procedimiento para reducir un grafo de expresin a una de dos formas simples. Esta reduccin se lleva a cabo por medio de repetir remover nodos de el grafo de tal manera que produce la expresin aceptada por el grafo. El diagrama de estados de un autmata finito puede tener cualquier nmero de estados aceptadores. Cada uno de esos estados exhibe la aceptacin de un conjunto de cadenas. El lenguaje de la mquina es la unin de esos conjuntos. Para determinar el lenguaje de un autmata, la observacin anterior nos permite considerar los estados aceptadores separadamente.

El algoritmo para construir una expresin regular desde un diagrama de estados hace exactamente eso; construye una expresin para un conjunto de cadenas aceptadas por cada estado aceptador individual. Los nodos de un AFN- l en el algoritmo se asumen estn numerados. La etiqueta de un arco de nodo i a nodo j se denota como wi,j. Si no hay arco de nodo i a j, wi,j = 0.

Algoritmo: Construccin de una expresin regular desde un autmata finito. Entrada: Diagrama de estados G de un autmata finito Los nodos de G numerados 1,2,,n 1. Sea M el nmero de estados aceptadores de G. Hacer m copias de G, cada una de cual tiene un estado aceptador. Nombra a cada una G1,G2,,Gm. Cada estado aceptador de G es el estado aceptador de algn Gt, para t= 1,2,.,m. 2. Para cada Gt Hacer 2.1 Repetir 2.1.1 Escoger un nodo i en Gt que no sea ni el nodo incial ni un nodo aceptador de Gt. 2.1.2 Borrar el nodo i en Gt de acuerdo al siguiente procedimiento: Para cada j,k no igual a i (esto incluye j = k) Hacer i. Si wj,i <> 0, wi,k<>0 y wi,i = 0 Entonces agregar un arco desde nodo j hasta nodo k etiquetado wj,iwi,k ii. Si wj,i <> 0, wi,k<>0 y wi,i<>0 Entonces agregar un arco desde nodo j hasta nodo k etiquetado wj,i(wi,i)*wi,k iii. Si nodos j y k tienen arcos etiquetados w1,w2,.,ws conectandose Entonces reemplazarlos por un solo arco etiquetado w1Uw2U.Ws iv. Remover el nodo i y todos los arcos que inciden en nodo i en Gt Hasta que los nicos nodos en Gt sean el nodo inicial y un nico estado aceptador 2.2 Determinar la expresin aceptada por Gt Fin End 3. La expresin regular aceptada por G es obtenida juntando las expresiones para cada Gt con U (unin)

Ejemplo: G:

b c c

De G se construyen dos grafos de expresin G1 y G2:: b b c c

G1:

b c c

G2:

Se reduce G1 borrando nodos 2 y 3:

b cc b

La expresin aceptada por G1 es b*. Se remueve nodo 2 de G2 y se tiene: b b cc con expresin asociada b*ccb*.

La expresin aceptada por G, construida desde las expresiones G1 y G2, es b*| b*ccb*. Y con esto se prueba lo establecido en el teorema de Kleene. Las Aplicaciones del Lema de Pumping El lema de Pumping es usado para demostrar o establecer que un lenguaje no es regular y se basa en ciertas reglas de descomposicin que se aplican a las cadenas de los lenguajes regulares. Bombear (Pumping) una cadena se refiere a construir nuevas cadenas repitiendo (bombeando) subcadenas de la cadena original.

Ejemplo: M: q0 a q2

b a b q1

b q3 a,b

Considere la cadena z=ababbaaab en L(M). Esta cadena puede descomponerse en subcadenas u, v y w donde u=a, v=bab, w=baaab y z=uvw. Las cadenas a(bab)ibaaab son obtenidas al bombear (pumping) la subcadena bab en ababbaaab.

El lenguaje L(M) es regular pues producimos un autmata finito para el. Si las cadenas producidas al bomberase la cadena original tambin pertenecen a L(M), entonces L(M) es regular, si no, entonces L(M) no es regular. El lema de Pumping para lenguajes regulares tiene como objetivo principal demostrar que un lenguaje no es regular. Ejemplo: Para demostrar que L={aibi | i>=0} no es regular probaremos con una cadena z=akbk y descomponiendo esta en subcadenas u=ai,v=aj y w=ak-i-jbk, donde i+j<=k y j>0. Si bombeamos cualquier cadena de esta forma produce uvw=aiajajak-i-jbk, que no pertenece a L. Por lo tanto, ya que z pertenece a L y no tiene descomposicin que satisface las condiciones del lema de pumping, concluimos que L no es regular.

El Teorema Myhill-Nerode As como el teorema de Kleene establece la relacin entre lenguajes regulares y autmatas finitos, el teorema MyhillNerode caracteriza la regularidad por medio de la existencia de una relacin de equivalencia en las cadenas del lenguaje. Esta caracterizacin proporciona un mtodo para obtener un AFD mnimo que acepta un lenguaje. Este teorema se utiliza, al igual que el lema de Pumping, para demostrar que un lenguaje no es regular.

6.2 Lenguajes de Contexto Libre Forma Normal de Chomsky. Una gramtica de contexto libre est en forma normal de Chomsky si cada regla tiene una de las siguientes formas: A BC Aa Sl Donde B,C son smbolos no terminales y no son smbolo inicial. El rbol de derivacin asociado con una derivacin en una gramtica en forma normal de Chomsky es un arbol binario. Autmata de Push-Down. (tema cubierto en captulo IV)

Compilador de Lenguajes Formales Un compilador es un programa que traduce otro programa escrito en un lenguaje de alto nivel (java, C++, Ada, etc.) produciendo como salida un programa objeto usualmente en cdigo mquina. El compilador para realizar su tarea divide todo el trabajo en varias fases, las cuales pueden ser: Anlisis de lxico Anlisis de sintaxis Anlisis de semntica Generacin de cdigo intermedio Generacin de cdigo objeto Optimizacin de cdigo Las dos primeras fases utilizan lenguages formales como especificacin de entrada a la fase.

Anlisis de lxico. En esta fase el compilador descompone el programa fuente en tokens (identificadores, constantes, operadores, etc.) los cules son especificados por medio de expresiones regulares. Ejemplo: Identificador = letra (letra | digito)* Nmero entero = digito digito* Anlisis de sintxis. En esta fase el compilador revisa si los estatutos, expresiones o declaraciones del programa fuente cumplen con las especificaciones definidas por una gramtica de contexto libre para el lenguaje siendo compilado. Existen muchas tcnicas para implementar un analizador de sintaxis, los cules son llamadas Parsers.

Ejemplos de Parsers son: Recursivo descendente LL(1) Operador precedencia LR SLR LALR Tambin existen herramientas para producir por medio de especificaciones analizadores de lxico y sintaxis. Algunas de estas herramientas son: Lex Yacc JavaCC Sable

You might also like