Está en la página 1de 49

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

FACULTAD DE INGENIERIA DE SISTEMAS E INFORMATICA

CURSO: LENGUAJES Y COMPILADORES


(SESION 4)

Profesor: Mg. Mario Huapaya Chumpitaz


INDICE

UNIDAD IV: Lenguajes de contexto libres y autómatas de pilas

1. Repaso de autómatas finitos determinístico (AFD)


y autómata finito no determinístico (AFND)
2. Conceptos previos
3. Lenguajes de contexto libres
4. Estructura de datos: pilas
5. Autómatas de pilas
6. Autómatas de pilas deterministas (APD)
1. Repaso de AFD y AFND
Representación de Autómatas
1) Tablas de transición
2) Diagramas de transición

Ejemplo. Sea el autómata AFD= (Q, A, f, q0, F) , donde


Q = {q0, q1, q2}
A = {a, b}

La función de transición viene dada por:


f=(q0, a)= q1, f=(q0, b) = q2,
f=(q1, a) = q1, f=(q1, b) = q2,
f=(q2, a) = q2, f=(q2, b) = q2

F = {q1}
Solución
1. Repaso de AFD y AFND

Ejemplo. Sea el autómata ADFN= (Q, A, δ, q0, F) , donde


Q = {q0, q1, q2, q3}
A = {a, b}

La función de transición viene dada por:


δ(q0, a)= q1; δ(q0, b) =ɸ ; δ(q0, λ) =ɸ
δ(q1, a) = q0, q3; δ(q1, b) = q2, q0; δ(q1, λ) =q3
δ(q2, a) = ɸ ; δ(q2, b) = q3, q0; δ(q2, λ) =q2, q3
δ(q3, a) = ɸ ; δ(q3, b) = ɸ; δ(q3, λ) =q2

F = {q0,q3}
Solución
2. Conceptos previos

Grafico: Correspondencia entre gramáticas, lenguajes y autómatas


2. Conceptos previos
Maquina de Turing.
Una máquina de Turing o autómata de tipo 0 es una
construcción lógica, formado por una cinta infinita, dividida en
celdas, y un cabezal de lectura/escritura que se mueve sobre
dicha cinta, avanzando una celda de cada vez. En la figura se
representa el caso particular de un conjunto de símbolos en la
cinta formados por 0 y 1.

Un movimiento de la máquina de Turing, depende del símbolo


explorado con la cabeza, y del estado actual en el que se
encuentra la máquina, el resultado puede ser :
a) Cambio de estado
b) Imprime un símbolo en la cinta reemplazando el símbolo
leído.
c) Se mueve la cabeza de la cinta a la izquierda, a la derecha o
se para.
2. Conceptos previos

Maquinas de Turing

Q = {conjunto de estados}
= {conjunto de símbolos permitidos en la cinta}
B es el símbolo blanco.
es el subconjunto de símbolos de entrada no incluyendo el blanco.
donde es la función del siguiente movimiento, I
significa movimiento a izquierda, D significa movimiento a derecha, y S parada
(stop).
es el estado inicial.
es el subconjunto de estados finales
2. Conceptos previos

Maquinas de Turing.
Formalmente, el lenguaje aceptado por una máquina de Turing :

Una máquina de Turing reconoce un lenguaje L si es capaz de


reconocer todas las sentencias de dicho lenguaje. Si una sentencia de
L es aceptada, la maquina se para, es decir alcanza un estado final.
Pero si no se acepta la sentencia, la máquina de Turing no se parará
nunca.
3. Lenguaje de libre de contexto

Los lenguajes libres de contexto (LLC) forman una clase de


lenguajes más amplia que los lenguajes regulares, de
acuerdo con la jerarquía de Chomsky. Estos lenguajes son
importantes tanto desde el punto de vista teórico, por
relacionar las llamadas gramáticas libres de contexto con
los autómatas de pila.

Regla.- es una expresión de la forma , en donde


tanto como son cadenas de símbolos en donde se
pueden aparecer tanto elementos del alfabeto (llamados
constantes) como unos nuevos símbolos, llamados
variables.
Gramática.- es básicamente un conjunto de reglas.
3. Lenguaje de libre de contexto

Ejemplo:
3. Lenguaje de libre de contexto

Estas gramáticas, conocidas también, por la jerarquía de


Chomsky, como gramáticas de tipo 2 o gramáticas
independientes del contexto, son las que generan los
lenguajes libres o independientes del contexto. Los
lenguajes libres del contexto son aquellos que pueden ser
reconocidos por un autómata de pila determinístico o no
determinístico.

Como toda gramática se definen mediante una cuádrupla G


= (N, T, P, S), siendo:
 N es un conjunto finito de símbolos no terminales
 T es un conjunto finito de símbolos terminales N ∩T = ∅
 P es un conjunto finito de producciones
 S es el símbolo distinguido o axioma S ∉(N ∪T)
3. Lenguaje de libre de contexto

En una gramática libre del contexto, cada producción de P


tiene la forma

λ
3. Lenguaje de libre de contexto

Ejemplo:
La siguiente gramática genera las cadenas del lenguaje
L1 = {w c w | w ϵ {a, b}* }
G1 = ({A}, {a, b, c}, P1, S1), y

P1 contiene las siguientes producciones


S1 →A
A → aAa
A → bAb
A→c
3. Lenguaje de libre de contexto
Ejemplo: el lenguaje que no es regular, tiene la
gramática libre de contexto con las siguientes reglas:

1. S aSb
2. S ab

El proceso de aplicar una regla se le conoce como “paso


de derivación”, y se denota, usando una flecha gruesa
“ “ como en aaSbb aaaSbbb (aplicando una
regla S aSb).
3. Lenguaje de libre de contexto

Notación de Backus-Naur
Las gramáticas libres del contexto se escriben,
frecuentemente, utilizando una notación conocida
como BNF (Backus-Naur Form). BNF es la técnica más
común para definir la sintaxis de los lenguajes de
programación.
3. Lenguaje de libre de contexto
Notación de Backus-Naur
En esta notación se deben seguir las siguientes
convenciones:
 los no terminales se escriben entre paréntesis
angulares < >
 los terminales se representan con cadenas de
caracteres sin paréntesis angulares
 el lado izquierdo de cada regla debe tener
únicamente un no terminal (ya que es una gramática
libre del contexto)
 el símbolo ::=, que se lee “se define como” o “se
reescribe cómo”, se utiliza en lugar de →
3. Lenguaje de libre de contexto

Notación de Backus-Naur
<A> ::= <B1>
<A> ::= <B2>
.
.
.
<A> ::= <Bn>

También se puede escribir como:


<A> ::= <B1> | <B2> | ...| <Bn>
3. Lenguaje de libre de contexto
Ejemplos:
1) <cadena_par> :: = <cadena_par> <paréntesis> | <paréntesis>
<paréntesis> :: = (<cadena_par> ) | ( )

2) <simbolo> ::= <expresión con símbolos> donde <símbolo> es


un no terminal, y la expresión consiste en secuencias de
símbolos o secuencias separadas por la barra vertical, '|',
indicando una opción, el conjunto es una posible substitución
para el símbolo a la izquierda. Los símbolos que nunca aparecen
en un lado izquierdo son terminales.

3) <dirección postal> ::= <nombre> <dirección> <apartado


postal>
3. Lenguaje de libre de contexto

Derivaciones
Derivación Directa. Se representa mediante v⇒w y es la
aplicación de una regla de producción x→y a una cadena v
para convertirla en otra palabra w, de tal forma que si v =
αxγ entonces w = αyγ.

 Se dice que la producción x→y se aplica a la palabra v


para obtener la palabra w o que de v se deriva
directamente w.
 Ejemplo: E + E ⇒ id + E
3. Lenguaje de libre de contexto

Derivaciones
Derivación. Se representa mediante v ⇒* w y es la
aplicación de una secuencia de producciones a una cadena.

 Si α1, α2 …αn son palabras y α1→α2 , α2→α3 … αn-


1→αn son reglas de derivación entonces se dice que
α1⇒* αn o que de α1 se deriva de αn .

 Ejemplo: E + E * E ⇒* id + id * id
3. Lenguaje de libre de contexto

Derivaciones

Derivación Más a la Izquierda. Cuando se aplica en cada


derivación directa la producción al símbolo no terminal que
está más a la izquierda de la cadena.

 Ejemplo: E ⇒ E + E ⇒ (E) + E ⇒ ( E * E ) + E ⇒ ( id *E) + E


⇒ ( id * id) + E ⇒ ( id * id) + id
3. Lenguaje de libre de contexto

Derivaciones

Derivación Más a la Derecha. Cuando se aplica al símbolo


que está más a la derecha de la cadena.

 Ejemplo: E ⇒ E + E ⇒ E + id ⇒ ( E ) + id ⇒ ( E * E) + id ⇒
( E * id) + id ⇒ ( id * id) + id
3. Lenguaje de libre de contexto

Arboles de derivación
Un árbol es un conjunto de puntos, llamados nodos, unidos
por líneas, llamadas arcos. Un arco conecta dos nodos
distintos. Para ser un árbol un conjunto de nodos y arcos
debe satisfacer ciertas propiedades:

 el nodo raíz está rotulado con el símbolo distinguido de


la gramática;
 cada hoja corresponde a un símbolo terminal o un
símbolo no terminal;
 cada nodo interior corresponde a un símbolo no
terminal.
3. Lenguaje de libre de contexto

Arboles de derivación
3. Lenguaje de libre de contexto

Arboles de derivación
La siguiente definición BNF describe la sintaxis
(simplificada) de una sentencia de asignación de un
lenguaje tipo Pascal:
<sent_asig> ::= <var> := <expresion>
<expresion> ::= <expresion> + <termino> | <expresion> -
<termino> | <termino>
<termino> ::= <termino> * <factor> | <termino> / <factor>
| <factor>
<factor> ::= ( <expresion> ) | <var> | <num>
<var> ::= A B C D ... Z
<num> ::= 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9
3. Lenguaje de libre de contexto
Ejemplo,
La sentencia A:= A + B es una sentencia de asignación que
pertenece al lenguaje definido por la definición BNF dada;
elaborar el árbol de derivación:

Solución
3. Lenguaje de libre de contexto
Ejemplo,
La sentencia C := D – E * F es una sentencia de asignación que
pertenece al lenguaje definido por la definición BNF dada;
elaborar el árbol de derivación: :

Solución
3. Lenguaje de libre de contexto
Ambiguedad
Una gramática es ambigua cuando tiene la capacidad de
producir, para la misma cadena, más de una derivación o
árbol, ya sea por la izquierda o por la derecha. Es decir, se
puede sustituir los no terminales en más de un orden y llegar
al mismo conjunto de símbolos terminales.
3. Lenguaje de libre de contexto

Ambigüedad
Ejemplo:
Considerando que se tiene la siguiente regla gramatical:
E→E+E
E→E–E
E→x|y|z

La forma de llegar a la expresión y+x-z, podría ser:


Solución
3. Lenguaje de libre de contexto

Ambiguedad
Ejercicio:
Considerando que se tiene la siguiente regla gramatical:
G = (VN, VT, E, P) con VT= {id, num, +, *, (, )} VN = {E}
P: E→E+E | E*E | (E) | id | num

La forma de llegar a la expresión id*id+id:


Solución
3. Lenguaje de libre de contexto

Ambiguedad
Ejercicio:
Considerando que se tiene la siguiente regla gramatical:
G = (VN, VT, E, P) con VT= {id , + , - , \ , *, ( , ) }
VN = {E, T, F}
P: E E+T|E-T|T
TT*F|T/F|F
F  ( E ) | id
Estudiar los posibles árboles de derivación para la cadena
id*(id+id)/id - id:
Solución
4. Estructura de datos: pilas
Definición:
Una pila es una colección ordenada de elementos en la cual, en
un extremo, pueden insertarse o retirarse otros elementos,
ubicados por la parte superior de la pila. Una pila permite la
inserción y eliminación de elementos, por lo que realmente es
un objeto dinámico que cambia constantemente.
Trabajan con filosofía LIFO (Last In- First Out ).
Ejemplos:
Pila de platos
Pila de discos
Pila de llamadas a funciones
Pila de recursión
Pila de resultados parciales de formulas aritméticas, etc.
4: Estructura de datos: pilas
4. Estructura de datos: pilas
Operaciones básicas con pilas
 PUSH (insertar).- Agrega un elementos a la pila en el extremo
llamado tope.
 POP (remover).- Remueve el elemento de la pila que se encuentra en
el extremo llamado tope.
 VACIA.- Indica si la pila contiene o no contiene elementos.
 LLENA.- Indica si es posible o no agregar nuevos elementos a la pila.
4. Estructura de datos: pilas

Representación de pilas
Usando arreglos: Define un arreglo de una dimensión (vector)
donde se almacenan los elementos.

0 1 2 3 4 5

TOPE: Apunta hacia el elemento que se encuentra en el extremo


de la pila. (inicialmente es -1).
4. Estructura de datos: pilas
Ejemplo

Insertar Insertar Insertar Eliminar


Inicio A: B: C: elemento
:

C
B B B
A A A A
Tope -1 Tope Tope Tope Tope
5. Autómata de Pila
5. Autómatas de pilas

Los autómatas tipo pila son máquinas reconocedoras que


aceptan lenguajes de contexto libre, su estructura es
semejante a los autómatas finitos, un Autómata tipo Pila
difiere de un Autómata Finito en que le primero utiliza una
memoria auxiliar con estructura de pila para llevar a cabo sus
transiciones.
5. Autómatas de pilas

 Las gramáticas libres de contexto tienen un tipo de


autómata que las define llamado pushdown autómata.

 Un pushdown autómata (PDA) es básicamente un λ-NFA con


un stack, en donde se puede almacenar una cadena y por lo
tanto se puede recordar información.

 Los pushdown autómatas reconocen todas y solamente las


gramaticas libres de contexto.

 Como solo pueden acceder a la información almacenada en


forma LIFO, existen lenguajes reconocidos por una
computadora pero no por un APD
Por ejemplo:
5. Autómatas de pilas

Como funciona un autómata de pila:


 Configuración inicial: el autómata esta en el estado inicial q0
leyendo al principio de la entrada y la pila solo contiene el
símbolo $ o Z0
 La entrada se lee de izquierda a derecha una vez
 Cada movimiento depende de en que estado estoy, que
símbolo leo en la entrada y que símbolo leo en la pila
 En cada movimiento cambio de estado y apilo o desapilo
 Es una maquina no determinista, puede haber varias
opciones y puedo mover sin leer símbolo de la entrada
6. Autómatas de pilas deterministas (APD)

En una transición el APD:


1. Consume un símbolo de entrada (si se usa entonces no
se consume ningún símbolo)
2. Se va a un nuevo estado (que puede ser el mismo)
3. Reemplaza el primer elemento del stack por alguna
cadena
 Puede ser el mismo símbolo de arriba del stack (no
hace nada)
 Hace pop (lo que corresponde con λ )
 Cambia el primer elemento por otro (reemplazo sin
push o pop o se puede ver como haciendo ambos)
 Hace push de una cadena al stack posiblemente
cambiando el primer elemento
6. Autómatas de pilas deterministas (APD)

Formalmente, un APD es una séptupla:

λ
λ
6. Autómatas de pilas deterministas (APD)
Ejemplo: sea con una gramática:
P → 0P0,
P → 1P1,
P → λ.
Podemos definir un APD para tiene 3 estados y operando
de la siguiente manera:

1. Empieza en q0 y mientras esta ahí lee los símbolos y los


almacena en el stack.
2. En cualquier momento adivina que esta en medio de la cadena
y se mueve espontáneamente al estado q1.
3. En q1, esta leyendo y compara el valor de la cadena con el
valor de hasta arriba del stack. Si son iguales hace un pop y se
queda en el estado q1.
4. Si se vacía el stack, se va al estado q2 y acepta..
6. Autómatas de pilas deterministas (APD)

El PDA para tiene el siguiente diagrama de transición:


6. Autómatas de pilas deterministas (APD)

 Los nodos, nodo inicial y final, son como los hemos visto antes.
La diferencia principal es que en las transiciones (arcos) la
etiqueta significa que tiene el par . Ósea nos
dice la entrada (a) y como estaba (X) y como queda la parte
superior del stack.

 Lo único que no nos dice es cual es el símbolo inicial del stack.


Por convención se usa Z0.
6. Autómatas de pilas deterministas (APD)
 Así queda el APD:

λ λ λ

λ
6. Autómatas de pilas deterministas (APD)
Ejemplo: Diseñe un APD para que genere el lenguaje
L=

 Estados q0, q1, q2


 Estado inicial q0
 Estado final q2
 Alfabeto de entrada = {0, 1}
 Alfabeto de pila = {a, Z0}

Reglas o condiciones:
 Si estoy en el estado q0 con 0 en la entrada y Z0 en la cima: (q0, aZ0)
quiere decir apila a y continua en estado q0
 Si estoy en el estado q0 con 1 en la entrada y a en la cima: (q1, λ)
quiere decir desapila a y cambia al estado q1
 Si estoy en el estado q1 y leo como entrada 1 y en la cima hay una a
desapilo
 Si termino la entrada con la pila vacía acepto
6. Autómatas de pilas deterministas (APD)

Ejercicios: Diseñe un APD para que genere el lenguaje


L= {w ∈ {a, b}∗ | |w|a = |w|b }
 Estados q0, q1
 Estado inicial q0
 Estado final q1
 Alfabeto de entrada = {a, b}
 Alfabeto de pila {a, b, Zo}

Reglas o condiciones:
 La pila apila la primera parte de la palabra
 Usamos no determinismo para empezar la segunda parte
 En la segunda parte si en la cima hay una a y leo una a Desapilo
 En la segunda parte si en la cima hay una b y leo una b Desapilo
 Si termino la entrada con la pila vacıa acepto
Muchas Gracias!!!
mhuapaya.chu@gmail.com

También podría gustarte