Beruflich Dokumente
Kultur Dokumente
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
+
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.
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.
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.
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.
int x, y, z;
fun1()
{
int j, k, l;
{
int m, n, x;
...
}
}
fun3()
{
int y, z, k;
...
}
main()
{ ... }
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;
Á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.
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