Está en la página 1de 30

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS

(Universidad del Perú, DECANA DE AMERICA)

FACULTAD DE INGENIERIA DE SISTEMAS E INFORMATICA

PRIMER EXAMEN PARCIAL


Apellidos y Nombres:_____________________________________________
Código Alumno:__________

ASIGNATURA : Lenguajes y compiladores


CICLO : IV
SEMESTRE : 2020 – 0
PROFESOR : Mg. Mario Huapaya Chumpitaz NOTA:
TURNO : Tarde
FECHA : 08/02/2020

INSTRUCCIONES:
• DURACIÓN: 80 minutos
• NO SE PERMITE EL USO DE: APUNTES, LIBROS, COPIAS, CELULARES, ETC.
• PUNTAJE: Cada pregunta tiene su puntaje indicado
• ANTES DE INICIAR EL EXAMEN ESCRIBA sus APELLIDOS Y NOMBRES
• Al terminar el examen los alumnos devolveran este tema de examen con las
respuestas de cada pregunta

I.- Marque verdadero (V) o falso(F) las siguientes preguntas:

1. ¿Un autómata finito determinista siembre tiene un número mayor de estados que
un autómata finito no–determinista asumiendo que ambos aceptan el mismo
lenguaje? . porque? MIERCOLES

Solución

Falso, sobre un autómata finito determinista podemos añadir


transiciones epsilon a nuevos estados sin alterar el lenguaje
que genera

¿L+ != L∗ si y solo si ∈ L?

2. ¿Si una gramática es ambigua también el lenguaje que genera es ambiguo?


Porque? (LUNES)

Solución

No, para que un lenguaje sea ambiguo todas las gramáticas que
lo generan tienen que ser ambiguas no es suficiente con una

1/30
3. Si dos autómatas finitos deterministas son equivalentes, entonces tienen el mismo
numero de estados finales. ¿es correcto? . dar un ejemplo (MIERCOLES)

Solución

No.

4. ¿Si un lenguaje es finito, entonces es regular?. Porque? (LUNES)

Solución

Si porque podemos construir un AF que lo genere con un camino para cada palabra que
genere ese lenguaje , entonces el lenguaje es regular.

5. Sean L1 libre de contexto y L2 regular, entonces L3 = L1 L2 es libre de contexto.


Justifique su respuesta. (MIERCOLES)

Solución

VERDADERO. Se dará una idea de la construcción de un APD M3 / L3 = L(M3)


Aunque no la demostración formal de que ese autómata reconoce efectivamente L3.

Justificación

6. Justifique su respuesta
(LUNES)
2/30
Solución
FALSO. No existen elementos en la interseccion de los lenguajes, ya que el primer
lenguaje tiene tiras que contienen por lo menos una "b", y el segundo lenguaje
tiene tiras que contienen solamente a's.

II. Marque con una (X) las siguientes preguntas:

7. Una producción compresora es: (MIERCOLES)


a) Si la longitud de su parte izquierda es menor que la de la parte derecha
b) Si la longitud de su parte derecha es menor que la de la parte izquierda
c) Si la longitud de su parte derecha es mayor que la de la parte izquierda
d) Ninguna de las anteriores

8. La longitud de la parte derecha de las producciones es siempre mayor o igual que la de la


parte izquierda es una restricción de : (LUNES)
1. Gramática de tipo 0
2. Gramática de tipo 1
3. Gramática de tipo 2
a) Solo 1 y 2
b) Solo 2 y 3
c) Solo 2
d) Todas las anteriores

9. ¿Cuál es la Mejor definición de Maquina Moore? (MIERCOLES)


a) Es un autómata que invierte la entrada binaria recibida (esto es, cambia un 0 por 1 y
un 1 por 0).
b) Es un autómata que invierte la entrada binaria recibida (esto es, cambia un 1 por 0 y
un 0 por 1).
c) Es un autómata que invierte la entrada binaria recibida (esto es, cambia un 1 por 1 y
un 0 por 0).
d) Ninguna de las anteriores

10. ¿Cuál es la Mejor definición de Maquina Turing? (LUNES)


a) Si una sentencia de L es aceptada, la maquina alcanza un estado final. Pero si no se
acepta la sentencia, la máquina de Turing no se parará nunca.
b) Si una sentencia de L es aceptada, la maquina alcanza un estado final. Pero si no se
acepta la sentencia, la máquina de Turing regresara al estado inicial.
c) Si una sentencia de L No es aceptada, la maquina alcanza un estado final. Pero si no
se acepta la sentencia, la máquina de Turing no se parará nunca.
d) Todas las anteriores

11. Cuál es la expresión regular del autómata finito: (MIERCOLES)

1. (1 + 01)(01)*(1 + 00) + (00)(0 + 1)*


3/30
2. ((1 + 01)(01)*(1 + 00) +(000 + 1)*
3. ((1 + 01)(01)*(1 + 00) + 00)(0 + 1)*
a) Solo 1
b) Solo 2 y 3
c) Solo 3
d) Ninguna de las anteriores

12. Cuál es la expresión regular del autómata finito: (LUNES)

1. (a + a*bb)* + (a + a*bb)*ccc(ccc)*
2. (a + ba*b)* + (a + ba*b)*ccc(ccc)*
3. (a + bba*)* + (a + a*bb)*ccc(ccc)*
a) Solo 1 y 2
b) Solo 2
c) Solo 2 y 3
d) Ninguna de las anteriores

II. Describa los siguientes conceptos:

1. Defina la máquina de Moore y dar un ejemplo. (MIERCOLES)


2. Defina Lema de Bombeo y dar un ejemplo. (LUNES)
3. Describa el diagrama de Thomson. Dar un ejemplo (MIERCOLES)
4. Describa el procedimiento o algoritmo para convertir un AFND a AFD (LUNES)
5. Defina la gramática libre de contexto y dar un ejemplo (MIERCOLES)

Solución

GLC (tipo 2 ó G2), libres de contexto, independientes del contexto. Son aquéllas en las que las
producciones cumplen:
1.- El lado izquierdo debe consistir en un solo no terminal
2.- El lado derecho no tiene restricciones.
Ejemplo
 La gramática G1 especifica el lenguaje formado por todas las cadenas sobre Σ = {a, b,
c} que contienen a la subcadena cc.
G1 = (V = {S, A, B}, T= {a, b, c}, P, S)
donde:
P: S  AccA
A  BA | 
Ba|b|c

6. Diferencias entre AFD(Autómata Finito Determinístico) y APD(Autómata a Pila


Determinístico) y dar un ejemplo de cada uno de ellos (LUNES)

Solución

De_nición 23 Un autómata _nito es una quintupla M = (Q;A;d;q0;F) en que


4/30
. Q es un conjunto _nito llamado conjunto de estados
36 Modelos de Computación I
100
q0 q1

Figura 2.2: Autómata de Estado Finito
. A es un alfabeto llamado alfabeto de entrada
. d es una aplicación llamada función de transición
d : Q_A!Q
. q0 es un elemento de Q, llamado estado inicial
. F es un subconjunto de Q, llamado conjunto de estado _nales.

APD
Los lenguajes generados por las gramáticas libres de contexto
también tienen un autómata asociado que es capaz de reconocerlos.
Estos autómatas son parecidos a los autómatas _nitos
determinísticos, solo que ahora tendrán un dispositivo de memoria de
capacidad ilimitada:
una pila. A continuación daremos la de_nición formal de autómata con
pila no determinístico
(APND). Al contrario que en los autómatas _nitos, los autómatas con
pila no detrminísticos y
determinísticos no aceptan las mismas familias de lenguajes.
Precisamente son los no determísticos
los asociados con los lenguajes libres de contexto. Los determinísticos
aceptan una familia
mas restringida de lenguajes.
De_nición 43 Un autómata con pila no determinístico (APND) es una
septupla (Q;A;B;;q0;Z0;F)
en la que
. Q es un conjunto _nito de estados
. A es un alfabeto de entrada
. B es un alfabeto para la pila
. es la función de transición
: Q_(A[fg)_B �!(Q_B_)
. q0 es el estado inicial
. Z0 es el símbolo inicial de la pila
. F es el conjunto de estados _nales

7. Defina cuando una gramática es ambigua. Explique cómo se elimina la ambigüedad


(MIERCOLES)

Solución

Gramáticas ambiguas
La ambigüedad es un problema muy importante en informática.
No hay métodos automatizados para obtener gramáticas no ambiguas.
Sí hay "recomendaciones generales".

5/30
Def (Gramática ambigua) Una gramática es ambigua si existe alguna
cadena de terminales que pueda obtenerse mediante árboles de derivación
distintos (dos árboles distintos dan la misma cadena)
Solución
Una categoría sintáctica distinta para cada nivel de precedencia
(jerarquizar la gramática)
Lenguajes ambiguos
Def (LI ambiguo) Un lenguaje incontextual es inheremente ambiguo si
todas las gramáticas que lo representan son ambiguas
Ejemplo
El lenguaje de las expresiones aritméticas tenía una gramática ambigua,
pero también otra que no lo es lenguaje no ambiguo.
No siempre es posible eliminar la ambigüedad. No es porque no
conozcamos un algoritmo que elimine la ambigüedad, sino que estamos
seguros de que no puede hacerse.
Ejemplo

Esta gramática es ambigua:

Figura 7:

Eliminación de la Ambigüedad
• Más de un árbol sintáctico posible.
• No existe una metodología para eliminarla

6/30
• Solución: replantearse el diseño de la misma para encontrar una
gramática no ambigua equivalente (que genere el mismo lenguaje)

8. Defina cuando una gramática es recursiva por la izquierda. Explique cómo se elimina la
recursividad (LUNES)

Solución
Eliminación recursiva por la izquierda:
• Una gramática es recursiva por la izquierda.

Regla para modificar una gramática


• Regla para modificar una gramática y deje de ser recursiva por la izquierda.

7/30
9. Encontrar una gramática libre del contexto para generar el siguiente lenguaje:
(MIERCOLES)

Solución

10. Encontrar una gramática libre del contexto para generar el siguiente lenguaje: (LUNES)

8/30
11. Sea la gramática

Determinar el lenguaje que genera. (MIERCOLES)

Solución : Se generan sentencias del lenguaje aplicando las reglas hasta que se pueda
ver la forma general del lenguaje.Determinar el lenguaje que genera.

L(G5) = {cadenas que contienen abb y baab intercambiándose y reproduciéndose


cualquier número de veces, y terminando siempre con el símbolo a}
Se puede observar que la forma de expresar este lenguaje no es simple, y surge la
necesidad de tener una herramienta que permita describir los lenguajes de otra forma.

12. Sea la gramática G6 = ({S,A,B}, {a,b}, S, P) donde las producciones P son :

Determinar el lenguaje que genera. (LUNES)


Solución : Se generan algunas instrucciones.

9/30
Se puede demostrar (Hopcroft y Ullman (1979), pp. 81-82) que el lenguaje generado
es :
L(G6) = {cadenas que tienen igual nº de a que de b}
La demostración no es inmediata.
13. Obtener las expresiones regulares del siguiente AFD (MIERCOLES)

SOLUCION

Paso 1) Como el autómata tiene dos estados finales, se calculará una expresión
regular para cada uno de ellos.
El estado final e0 es también inicial. Por lo tanto se deberán eliminar todos los
estados que están en el camino de e0 a e0. El único estado a eliminar es e1.
- Eliminación del estado e1:

La expresión regular para el estado e0 es ER1 = (a + ba*b)*


El otro estado final es e4. Como no es inicial se deben eliminar los estados e1, e2
y e3 para que queden únicamente e0 (el estado inicial) y e4 (el estado final en
consideración).
- Eliminación de e1

- Eliminación de e2

10/30
Eliminación de e3

La expresión regular para el estado e4 es ER2 = (a + ba*b)*ccc(ccc)*


Paso 2) La expresión regular correspondiente al autómata se obtiene uniendo las
expresiones
regulares resultantes para cada estado final.
ER = ER1 + ER2 = (a + ba*b)* + (a + ba*b)*ccc(ccc)*

14. Obtener las expresiones regulares del siguiente AFD (LUNES)

Solucion

Paso 1) Como el autómata tiene dos estados finales, se calculará una expresión
regular para cada uno de ellos.
Estado final e1 Como no es inicial se deben eliminar los estados e2 y e3 para que
queden únicamente e0 (el estado inicial) y e1 (el estado final en consideración).
- Eliminación de e2

11/30
- Eliminación de e3

15.

La expresión regular para el estado e1 es ER1 = c*b(b+(c+ac*b(b+cc*b)*a)c*b)*


Estado final e0
12/30
El estado final e0 es también inicial. Por lo tanto se deberán eliminar todos los
estados que están en
el camino de e0 a e0, es decir e1, e2 y e3. Retomando el autómata obtenido en el
paso anterior, sólo
quedaría por eliminar el estado e1
- Eliminación de e1

Paso 2) La expresión regular correspondiente al autómata se obtiene uniendo las


expresiones
regulares resultantes para cada estado final.

III. Desarrolle los siguientes algoritmos

1) Convertir AFND a un AFD (MIERCOLES)

13/30
Solucion

2) Convertir AFND a un AFD (MIERCOLES)

AFND

SOLUCION AFD

14/30
15/30
3) Dado el lenguaje: (MIERCOLES))
{ ai bi / i ≥ 0}

Dadas las transiciones

a) Elaborar la tabla de transición del AP


b) Elaborar el Diagrama de transición del AP

4) Construir un autómata de pila que reconozca el lenguaje (LUNES)

Solución : Se puede definir un autómata de pila, P, de la forma:


donde se define :
P q0q1q20,1Z,0q0Zq0

16/30
a) Elaborar la tabla de transición del AP
b) Elaborar el Diagrama de transición del AP

5) Sea la siguiente gramática G: (MIERCOLES)

Expresión expresion operador expresión


| (expresion)
| - expresión
| id
| num
Operador
|+
|*
|/

Y sea la cadena de entrada a + b * c.

a) La gramática es ambigua?
b) De ser afirmativa elimine su ambigüedad, de lo contrario justifique su respuesta
c) Si el resultado es una gramática no ambigua; esta gramática es recursiva por la
izquierda?
d) De ser afirmativa elimine su recursividad, de lo contrario justifique su respuesta

Solución

Y sea la cadena de entrada a + b * c. Nótese que los siguientes árboles de


derivación permiten obtener la cadena de entrada utilizando caminos de
reemplazo diferente.

17/30
Para realizar un análisis descendente es importante que la gramática no sea
ambigua y por lo tanto se debe reescribir para solucionar esta condición.
Existen
algoritmos para solucionar las gramáticas conflictivas como la mostrada.
Procedimiento para eliminar la ambiguedad
Sea la gramática G como la mostrada más arriba, un procedimiento a seguir
para
eliminar la ambiguedad de este tipo de gramática es el siguiente: Crear una
tabla de precedencia creciente para los operadores:

18/30
Crear no terminales por cada nivel de precedencia:

Crear un nivel adicional para las unidades:

Crear producciones asociativas por la izquierda:

19/30
Con la nueva gramática y la cadena de entrada a + b * c se produce un solo
árbol de derivación.

ELIMINACIÓN DE LA RECURSIÓN POR LA IZQUIERDA


Sea la siguiente gramática no ambigua, obtenida en el apartado anterior:

20/30
Esta gramática es recursiva por la izquierda

Una gramática es recursiva por la izquierda si tiene un no terminal A tal que

existe una derivación Por ejemplo:

Un caso más general para sería como el siguiente:

21/30
Los métodos de análisis descendente no pueden manejar este tipo de
gramáticas, por lo que se debe eliminar la recursión por la izquierda mediante
la siguiente técnica: Primero: agrupar las producciones de A en la forma

Por ejemplo:

Segundo: sustituir las producciones de A por:

Por ejemplo:

22/30
Con esta nueva gramática y la cadena de entrada a + b * c se produce el
siguiente árbol de derivación.

23/30
6) Sea la siguiente gramática G: (LUNES)
proposición if expresión then proposición
| if expresión then proposición else proposición
| otra_proposición

Y sea la cadena de entrada if E1 then if E2 then S1 else S2.


a) La gramática es ambigua?
b) De ser afirmativa elimine su ambigüedad, de lo contrario justifique su respuesta
c) Si el resultado es una gramática no ambigua; esta gramática es recursiva por la
izquierda?
d) De ser afirmativa elimine su recursividad, de lo contrario justifique su respuesta

Solución

Comentario respecto a la eliminación de la ambiguedad


Sin embargo, no siempre es fácil reescribir la gramática para eliminar la
ambiguedad. Para demostrar este hecho considere la siguiente gramática para
la
proposición if – the – else típica de un lenguaje de programación estructurado.

Y sea la cadena de entrada if E1 then if E2 then S1 else S2. Nótese que esta
cadena representa la estructura de programación siguiente:

Con la gramática presentada esta cadena puede derivarse en dos caminos


diferentes:

24/30
En las gramáticas estructuradas siempre se decide la expansión por el primer
árbol, asociando el else con el último if. Para esto se reescribe la gramática en
la
siguiente forma, utilizando un desarrollo analítico del problema. El análisis lo
puede encontrar en el libro de Compiladores de Aho y Ullman.

25/30
Con esta gramática y la cadena de entrada if E 1 then if E2 then S1 else S2 se
obtiene el siguiente árbol:

IV.- FACTORIZACIÓN POR LA IZQUIERDA

Sean las siguientes reglas para la gramática no ambigua, referida a la


proposición
if – then – else mostrada en la sección dos:

26/30
Estas reglas tienen un prefijo común que es if expresión then, por lo tanto es
factible de factorizarla por la izquierda.

Una gramática tiene reglas con prefijos comunes si es que existen

producciones del tipo


Por ejemplo:

Los métodos de análisis descendente no pueden manejar este tipo de


gramáticas, por lo que se debe eliminar la recursión por la izquierda mediante
la siguiente técnica:
Primero: agrupar las producciones de A en la forma

Segundo: sustituir las producciones de A por:

Por ejemplo:

Entonces la gramática resultante es:

27/30
Con esta gramática y la cadena de entrada if E 1 then if E2 then S1 else S2 se
obtiene el siguiente árbol:

7) Sea la Gramática LL1 para expresiones aritmética con sumas, restas,


productos, división y paréntesis: (MIERCOLES)

28/30
a) Determinar todos los conjuntos Primero y siguiente
b) Construir la tabla del Análisis Sintáctico Descendente
c) Reconocer la cadena num+id*num con el analizador sintáctico construido

8) Sea la Gramática LL1 para expresiones aritmética con sumas, restas,


productos, división y paréntesis: (LUNES)

a) Determinar todos los conjuntos Primero y Siguiente.


b) Construir la tabla del Análisis Sintáctico Descendente
c) Reconocer la cadena num+num*num con el analizador sintáctico construido

Pregunta Puntaje Criterios de Evaluación


6 puntos Por cada respuesta CORRECTA tendrá 01 punto; de lo contrario
I. Del 1 tendrá 0 punto
al 6
II.1 01 punto Define correctamente el concepto y da ejemplos 01
Punto
II.2 01 punto Define correctamente el concepto y da ejemplos 01
Punto
II.3 01 punto Define correctamente el concepto y da ejemplos 01
Punto
II.4 01 punto Define correctamente el concepto 01 punto

III.1 02 puntos El algoritmo representa correctamente la solución del problema (2


puntos)
III.2 02 puntos El algoritmo representa correctamente la solución del problema (2
puntos)
III.3 03 puntos El algoritmo representa correctamente la solución del problema (4
puntos)
III.4 03 puntos

29/30
30/30

También podría gustarte