Está en la página 1de 7

Previo1:

L1 = { a + b +} ------ > AFD porque el lenguaje es regular


m m
L2 = { a b / m >= 1} ---- > AFD? NO porque no es regular
L2 es sublenguaje de L1.

Previo2: Question
Dado R un reconocedor para el lenguaje L, será R también un reconocedor para L1, donde L1
es un subconjunto de L ? --- >

Previo3:
Clasificacion de los lenguajes

Lenguajes Generales

L. Sensitivos al contexto
L. Libres de Contexto
Lenguajes
Regulares

Lenguaje Regular ----- > { a+ b+}


Lenguaje Libre de contexto --- > { am bm / m >= 1}

Lenguaje Sensitivo al contexto -- > { am bm cm / m >= 1}

Autómata a Pila
Un Autómata a Pila (AP) es una maquina de estados con capacidad de memoria que actua como
reconocedor para un lenguaje libre de contexto. Formalmente se define como una 6-tupla (Q, Vt,
Vp, q0, δ, qF)

donde:
Q es un conjunto finito de estados
Vt es el alfabeto de entrada
Vp es el lenguaje de la pila
q0 es el estado inicial
δ son las reglas de transición Q X Vt X Vp -- > Q
qF es el estado final o conjunto de estados finales
Representación como reglas de transición

Lenguajes y Compiladores / Jaime Pariona Quispe


Con los AP podemos reconocer lenguajes no regulares, es decir aquellos que no pueden ser
reconocidos por AFDs. Por ejm para L = { an bn / n >= 1} tenemos (Q, Vt, Vp, q0, δ, qF)
Q = { q0, q1, q2, qf} conjunto de estados
Vt = { a, b } alfabeto
Vp = { P0, a } lenguaje de la pila
δ : ( q0, a, P0 ) --- > (q1, a ) reglas de transición
( q1, a, a ) --- > (q1, a )
( q1, b, a ) --- > (q2, )
( q2, b, a ) --- > (q2, )
( q2, $, P0 ) --- > (qF, - )
q0 ---- > estado inicial
qF ---- > estado final

Cada regla de transición tiene:


(estado actual, símbolo de llegada, estado de la pila) --- > (estado sgte, acción en la pila)

El estado de la pila puede ser:


P0 = pila vacia
a = elemento al tope de la pila

La acción en la pila puede ser:


a = empilar(a)
= desempilar()
- = no hacer nada

Entonces la regla ( q1, b, a ) --- > (q2, ) significa: si estamos en el estado q1 y llega el símbolo
b, estando el símbolo a al tope de la pila, entonces pasaremos al estado q2 y desempilaremos.

Representación como grafo

Para L = { an bn / n>=1 } tenemos el siguiente autómata, representado como grafo

Algoritmo de Implementación
Podemos usar el ejemplo anterior para mostrar una posible forma de implementación:

Lenguajes y Compiladores / Jaime Pariona Quispe


1. Usando Reglas de transición

#define QF 100
#define QE -1
q = 0;
token = scanner();
mientras ( q !=QF && q!=QE ) {
caso ( q ) {
0 : si (token == ‘a’ && vacio())
q = 1;
empilar(‘a’);
sino
q = QE;
1 : si (token == ‘a’ && cabezapila()==’a’)
q = 1;
empilar(‘a’);
sino
si (token == ‘b’ && cabezapila()==’a’)
q = 2;
tem = desempilar();
sino
q = QE;
2 : si (token == ‘b’ && cabezapila()==’a’)
q = 2;
tem = desempilar();
sino
si (token == ‘$’ && vacio() )
q = QF;
sino
q = QE;
}
token = scanner();
}
si (q==QF)
reconoce();
sino
error();

Criterios de aceptacion
1. Por estado final, fin de cadena y pila vacia

Lenguajes y Compiladores / Jaime Pariona Quispe


2. Por estado final y pila no vacia
3. Por pila vacia
4. Por fin de cadena

Ejemplos:

1. L = { (am )n (an )m / m>=1, n>=1 }

2. L = { an b cn / n>=1 }

3. L = { am bn cm / m>=1, n>=1 }

4. L = { am bn cm+n / m, n >=1 }

5. L = { a2m cm / m>=1 }

6. L = { numero binario con igual cantidad de 0s y 1s } = { 0101, 001011, 110100, .. }

7. L = { expresiones parentizadas } = { ()(), ([[()]]), …. }

8. L = { w c wt / w=(a│b) + }

9. L = { am bn cm dn / m>=1, n>=1 }

10. L = { am bn cm+n dm-n / m > n >= 1 }

11. L = { am bm cm / m>=1}

12. L = { am bn / m > n >= 1 }

13. L = { am bn / n > m >= 1 }

14. L = { am bn c p / m, p > n >=1}

15. L = { am bn / m <> n}

Lenguajes y Compiladores / Jaime Pariona Quispe


16. L = { am bn / m es par, n es impar }

Automatas a Pilas No Deterministas


Un APND es aquel que tiene reglas de los siguientes tipos:
1) (q1, a, x ) -- > (q2, y)
(q1, a, x ) -- > (q3, z)

2) (q1, λ , x ) -- > (q2, y)

Jerarquia de Automatas

Maquina de Turing

Automata a Pila
AFD
Sistemas
Combinacionales

Modelo de Turing: Maquina de Turing

Planteado por Alan Turing en 1936. Es un modelo matemático de un dispositivo que implementa
un autómata finito.

Este dispositivo es importante porque plantea los conceptos de Almacenamiento y Unidad de


Control, los cuales son componentes fundamentales de un computador.

La Maquina de Turing consta de una cinta infinita conteniendo elementos de datos. Ademas
cuenta con un Cabezal Lector/Escritor, que le permite posicionarse en un elemento especifico, y
sobre dicho elemento puede Leer o Escribir. Igualmente el Cabezal tiene la propiedad de poder
moverse hacia la Izuierda (Left>) o hacia le Derecha (Right).

En esta maquina empezamos en un estado inicial q0 y a partir de ahí realizamos transiciones hasta
llegar a un estado final qF.

Lenguajes y Compiladores / Jaime Pariona Quispe


Cada transición tiene el formato:

(Estado Actual, Simbolo Actual) --> (Estado Siguiente, Simbolo a grabar, Desplazamiento)

Simbolo Actual se refiere al valor leído por el cabezal en su posición actual. Si el valor es B
entonces significa que es un valor en blanco o vacio.
Simbolo a grabar, se refiere al símbolo que graba el cabezal en la posición actual, antes de realizar
el desplazamiento.
Desplazamiento, es el movimiento del Cabezal, que puede ser a Izquierda (L), a Derecha (R), o sin
movimiento (-).

Por ejemplo dada una cinta con los siguientes elementos y el cabezal en la posición especificada.

Las siguientes transiciones


δ (q0, 0) = (q0, 1, D)
δ (q0, 1) = (q0, 0, D)
δ (q0, B) = (qF, B, -)

Se empieza en el estado inicial q0 y realizamos la transición que corresponda, de acuerdo al valor


leído. Pasamos luego al siguiente estado (que puede ser el mismo estado), realizamos una
grabación en la posición actual y después realizamos un desplazamiento.

El resultado de la ejecución de dicho conjunto de transiciones (que podemos ver como un


“programa”) dado ese valor inicial de la cinta será:

Apreciamos que el resultado es la negación binaria del numero original.

Ejem. Dado un numero binario obtener el siguiente numero binario, es decir realizar la operación
incremento.

Analizando vemos que si el digito menos significativo es 0 entonces solo habrá que cambiarlo a 1.
Pero si dicho digito es 1 entonces habrá que cambiarlo a 0 y los dígitos siguientes, de derecha a

Lenguajes y Compiladores / Jaime Pariona Quispe


izquierda, que sean 1 seran cambiados a 0 y asi hasta encontrar el primer 0, que se cambia por 1 y
termina. En caso de que no haya ningún 0 en ese recorrido entonces hay que añadir un 1 a la
izquierda del digito mas significativo.

Por ejem. el incremento de 10110 --- > 10111


10111 --- > 11000
11111 --- > 100000 (se ha añadido un 1 bit)

Las reglas de transición serian:

δ (q0, 0) = (q0, 0, D) // Se avanza al extremo derecho del numero


δ (q0, 1) = (q0, 1, D)
δ (q0, B) = (q1, B, I) // Al llegar al blanco retrocedemos una posición
δ (q1, 0) = (qF, 1, - ) // Si es 0 cambiamos por 1 y terminamos.
δ (q1, 1) = (q1, 0, I) // Si es 1 cambiamos por 0 y desplazamos a Izq.
δ (q1, B) = (qF, 1, - )

Para los números binarios del ejemplo y considerando que empezamos en el estado q0, y con el
cabezal en el digito mas significativo, las secuencias de aplicación de las reglas de transición serian:

10110 2da regla, 1ra, 2da, 2da, 1ra, 3ra, 4ta


10111 2da regla, 1ra, 2da, 2da, 2da, 3ra, 5ta, 5ta, 5ta, 4ta
11111 2da regla, 2da, 2da, 2da, 2da, 3ra, 5ta, 5ta, 5ta, 5ta, 5ta, 6ta

Si bien la maquina de Turing proporciono la idea de unidad de control, almacenamiento y rutina


de procesamiento, su implementación practica en una computadora no es eficiente debido a su
acceso secuencial.

Lenguajes y Compiladores / Jaime Pariona Quispe

También podría gustarte