Sie sind auf Seite 1von 7

CUESTIONARIO:

NOMBRE: Javier Michay


1. Dada la siguiente gramática, construye el árbol sintáctico correspondiente a las siguientes
sentencias:
<asignación> := <id> = <expr>
<id> := A | B | C
<expr> := <expr> + <término> | <término>
<término> := <término> * <factor> | <factor>
<factor> := ( <expr> ) | <id>

a) A := (A + B) * C

asignación

id expr
:
=

A termino

factor termino
*

factor
(expr)

id

exp + termino
C

termino factor

id
factor

id B

A
b) := B + C + A

asignación

id expr
:
=

A expr término
+

expr término factor


+

término
factor id

factor
id
A

id
C

B
c) A := B * (C * (A + B))

asignación

id expr
:
=

A término

término factor
*

(expr)
factor

término
id

término factor
*
B
factor (expr)

id
exp + termino

C factor
termino

id
factor

id B

A
2. Escribe utilizando EBNF la definición de la sintaxis para un bucle while en el lenguaje que
conozcas (especificar el lenguaje de programación)
Python
while_stmt: 'while' test ':' suite ['else' ':' suite]
test: or_test ['if' or_test 'else' test] | lambdef

3. Determina la veracidad de las siguientes frases que hacen referencia a los lenguajes
imperativos.
a) “Todas las variables disponen de un nombre o identificador.”
Verdadero, todas las variables deben tener un identificador para que el programa los puede
reconocer.

b) “Cada identificador en un programa tiene siempre asociada una sola dirección de


memoria.”
Falso, la dirección de memoria del identificador puede cambiar dependiendo del lugar del programa
que se este ejecutando (En diferentes funciones).

c) “Es posible tener varios identificadores que hacen referencia a la misma dirección de
memoria.”
Verdadero, Utilizando los apuntadores se puede referenciar dos variables a la misma direccion de
memoria.

h) “Java es un lenguaje con disciplina de tipos”.


Verdadero, Siempre detecta los errores de tipo.

i) “En C, las variables creadas mediante la utilización de new se las considera como
variables dinámicas de stack”.
Verdadero, en C todas las variables son por defecto denominadas variables dinámicas de stack.

j) “Si un lenguaje de programación hace una evaluación dinámica del ámbito, entonces es
imposible realizar una comprobación de tipos estática de las referencias no locales”.
Verdadero.

4. ¿Qué entendemos por ligadura estática de tipos? ¿Mediante qué distintas formas realizan los
lenguajes de programación la ligadura estática de tipos? (Menciona al menos un lenguaje
para cada una de las formas.) ¿Qué ventajas aporta la ligadura estática de tipos sobre la
dinámica?
La ligadura estática de tipo ocurre antes de la ejecución y permanece igual a través de la ejecución,
puede realizarse mediante: declaración explicita-> Visual Basic, declaración implícita->Fortran.
Ventajas: Mejora la eficiencia de la ejecución, Mejora la legibilidad, Elimina ambigüedades.

5. La ligadura dinámica de tipos está muy relacionada con las variables dinámicas de heap del
tipo implícitas. Explica esta relación.
En el caso de las variables dinámicas de pila se les liga un espacia solo cuando se les asigna un
valor y la ligadura dinámica de tipos les asigna un tipo de variable dependiendo del valor que se les
asigne.

6. Distingue entre:
a) Ligadura estática de tipos, disciplina de tipos y ligadura dinámica de tipos.
Ligadura estática de tipo: El tipo se especifica mediante una sentencia de declaración.
Ligadura dinámica te tipo: El tipo depende del tipo de valor que se le asigne.
Disciplina de tipos: Si el lenguaje detecta los errores de tipos.

b) Coacción, error de tipos y comprobación de tipos.


Coacción: Un tipo puede ser convertido implícitamente mediante código generado por el
compilador en un tipo legal.
Error de tipos: Aplicación de un operador a un operando de tipo inapropiado.
Comprobación de tipos: Nos asegura que los operandos de un operador son de tipos compatibles.

c) Compatibilidad de tipos nominal y compatibilidad de tipos estructural.


Compatibilidad de tipos nominal: Dos variables tienen tipos compatibles si están ligadas al mismo
nombre de tipo.
Compatibilidad de tipos estructural: Dos variables tienen tipos compatibles si están ligadas al
mismo nombre de tipo.

7. ¿En qué categorías se clasifican las variables atendiendo a la manera en que se produce la
ligadura de espacio?
Estáticas, dinámicas de stack y dinámicas de heap.

8. Cuando en tiempo de ejecución, se entra en un bloque, las variables locales ya no contienen


los valores que almacenaban la última vez que fue ejecutado dicho bloque. ¿Por qué ocurre
esto?
Porque las variables locales se vuelven a inicializar cada vez que se le llama al bloque (Funcion).

9. Dado el siguiente esqueleto de programa escrito en C, dibuja un rectángulo alrededor de


cada uno de sus bloques, etiquétalos con las letras A, B, C, etc. y responde a las siguientes
preguntas.

int x, y, z;
fun1()
{
int j, k, l;
{
int m, n, x;
...
}
}

fun3()
{
int y, z, k;
...
}

main()
{ ... }

a) Menciona un bloque que esté anidado dentro de otro bloque.


El bloque fun1.
b) ¿En qué ámbitos son accesibles a la vez las variables globales x, y, z?
Fun1, fun3, main.
c) ¿Qué variables son accesibles desde la función main?
Las variables globales: x,y,z
d) ¿Son k de fun1 y k de fun3 la misma variable?
No, se encuentran en bloques diferentes y son inicializados cada vez que se acceda a la función.
e) ¿Son las variables globales y y z accesibles desde fun3?
No, ya que primero se toma en cuenta las variables inicializadas dentro de la función.
f) ¿En qué bloques j hace referencia a una variable local?
En la función fun1
g) ¿En qué bloques j es una variable no local?
En el bloque donde se encuentra las variables m,n,x.
h) ¿En qué bloque o bloques pueden usarse a la vez m y k?
En el bloque donde se encuentra las variables m,n,x.

10. Indica qué valor de x se imprime en el procedimiento sub1 suponiendo tanto ámbito estático
como ámbito dinámico.

program pregunta_9;
var x: integer;
procedure sub1;
begin
writeln(‘x = ‘, x);
end;

procedure sub2;
var x: integer;
begin
x := 10;
sub1;
end;

begin {de pregunta_9}


x := 5;
sub2;
end. {de pregunta_9}

Ámbito estático: Imprime el valor de 5: Primero se inicia el bloque begin y se inicializa a la variable
global x=5, este valor no se altera en el bloque sub2 ya que la asignación se está refiriendo a la
variable local.

Ámbito dinámico: Imprime el valor de 10

11. ¿Qué es el ámbito de una variable de programa? Define el término bloque. En el siguiente
esqueleto de programa indica cuáles son los entornos de referencia en los puntos A y B,
tanto para el caso de ámbito estático como para el de ámbito dinámico.
El ámbito de una variable es el rango de sentencias en las que es visible la variable.
Bloque: Sección de código en la que puede definirse variables locales.

program pregunta_10;
var a,b,c: integer;

procedure p1;
var b: integer;
begin
...
{A}
end; {de p1}

procedure p2;
var b,c: integer;

procedure p3;
var a: integer;
begin
...
p1
end; {de p3}

begin
...
{B}
p3
end; {de p2}

procedure p4;
var b: integer;
begin
...
p2
end; {de p4}
begin
...
p4;
end. {de pregunta_10}

Punto
A c de p2 a de p3 b de p1
B b,c de p2

Das könnte Ihnen auch gefallen