Ing.Sistemas Computacionales

Páginas: 5 (1151 palabras) Publicado: 12 de mayo de 2013
Compiladores II

Ing. Carlos Vallejo
Tarea #2
MICHAEL GUSTAVO ANDINO BORJAS

10841181
Abril 28 2013

1. Escriba expresiones de tipo para los siguientes tipos:
a. Una matriz de apuntadores a reales, donde los índices van de ‐10 a 10
array(-10..10,pointer(real))

b. Función que recibe como parámetros un entero y una función que
recibe dos enteros y regresa un real, y que regresa unafunción igual a la
que recibe
(int x((int x int)->real)->((int x int)->real))

c. El tipo de la variable x en el siguiente fragmento de código:
struct nodo {
int c,b;
struct nodo *sig;
};
struct nodo *x[10];
nodo: record((c x int) x (b x int)) x pointer(nodo)
x: array(1..10 , pointer(nodo))

2. Si el nombre de tipo nodo se define como record((info x integer) x (siguiente x
enlace)) yenlace se define como pointer(nodo), ¿Cuáles de las siguientes
expresiones son estructuralmente equivalentes?
a. enlace
b. pointer(nodo)
c. pointer(enlace)
d. pointer(record((info x integer) x (siguiente x pointer(nodo)))
e. pointer(pointer(record((info x integer) x (siguiente x enlace)))
nodo: record((info x integer) x (siguiente x enlace))
enlace: pointer(nodo)
Los equivalentes seriana, b y d:
a. enlace -> pointer(nodo) -> pointer(record(info x integer) x (siguiente x pointer(nodo)))
b. pointer(nodo) -> pointer(record(info x integer) x (siguiente x pointer(nodo)))
d. pointer(record((info x integer) x (siguiente x pointer(nodo)))

3. Modifique el comprobador de tipos descrito en clase para que imprima un
mensaje descriptivo cuando detecte un error y para que continúe lacomprobación como si hubiera aparecido el tipo previsto.
E -> E1 + T

{If(E1.tipo=T.tipo && E1[integer,real])
E.tipo=E1.tipo
Else
E.tipo=Error_tipo(“Necesita
Números”)
E.tipo=E1.tipo
End If;}

E -> T

{E.tipo=T.tipo}

T -> T1 * F

{If(T1.tipo=F.tipo && T1[integer,real])
T.tipo=T1.tipo
Else
T.tipo=Error_tipo(“Necesita
Números”)
T.tipo=T1.tipo
End If;}
{T.tipo=F.tipo}{F.tipo=buscar_tipo(id.valex)}
{F.tipo=char}
{F.tipo=integer}
F.tipo=real}
{F.tipo=E.tipo}
{t=buscar_tipo(id.valex)
If(E.tipo=integer && t=array(i,s)) then
F.tipo=s
Else
F.tipo=Error_tipo(“El tipo de arreglo
no es válido”)
F.tipo=s
End If;}
{t=buscar_tipo(id.valex)
If(t==pointer(s))then
F.tipo=s
Else
F.tipo=Error_tipo(“No es un puntero”)
F.tipo=s
End If;}

T -> F
F -> id
F ->const char
F -> num
F -> num.num
F -> (E)
F -> id[E]

F -> id^

4. Exprésense, utilizando variables de tipos, los tipos de las

siguientes funciones.
a. Una función que recibe como argumentos un apuntador a un objeto de
cualquier tipo y una función que devuelve un objeto del tipo apuntado en
el primer argumento, y que devuelve un apuntador a cualquier tipo.
Pointer(α) x (γ-> α) ->pointer(β)
b. Una función que tome como argumento una matriz indizada de 1 a 10, con
elementos de
cualquier tipo, y devuelva una matriz cuyos elementos sean los objetos
apuntados por los elementos de la matriz dada.

array(1..10, α) -> array(1..10, pointer(α))

5. Encuéntrese el unificador más general, en caso de existir, para cada par
de expresiones de la siguiente lista:
a.

(pointer(α)x β)  π )

con

µα

S
µ

pointer(α) x β

π

α

pointer(α) x β  α
pointer(α) x β α
b.

δ1 ( pointer(δ2)  δ2)

con

α1 x int  (α2 array(α3))

S
δ1
α2
δ2

α1 x int
pointer(array(α3)
array(α3)

δ1 -> (pointer(δ2)-> δ2)  α1 x int -> (pointer(array(α3)) -> array(α3))
α1 x int -> (α2 -> array(α3))  α1 x int -> (pointer(array(α3)) -> array(α3))

6. Quéimprime el siguiente programa utilizando llamada por valor, por
referencia, enlace de copia y restauración y llamada por nombre?
program principal(input, output);
var a, b: integer;
procedure p(x, y, z);
begin
y := y + 1;
z := z + x + b;
end;
begin
a := 5;
b := 3;
p(a+b, b, a);
print(a);
print(b);
end;
VALOR

A

B

3

5

IMPRIME 5 y 3.

REFERENCIA

A

B

X

5

3...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • ing.sistemas computacionales
  • Ing.sistemas computacionales
  • ing.sistemas computacionales
  • ing.sistemas computacionales
  • Ing.sistemas computacionales
  • Ing.Sistemas
  • ing.sistemas
  • Ing.Sistemas

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS