Ejercicios Resueltos De Lenguajes Y Compiladores

Páginas: 21 (5054 palabras) Publicado: 2 de junio de 2012
PREGUNTAS Y RESPUESTAS (LENGUAJES Y COMPILADORES)

Pregunta N°1 :
a) ¿Por qué los lenguajes dinámicos son intérpretes?
b) ¿Los lenguajes estáticos tienen variables globales?
c) ¿En la tabla de símbolos pueden quedar huecos?

Respuesta:
a) Porque no puedo generar código se debe averiguar el tipo para poder generarlo, en cambio en los lenguajes tipo Algol yo se que variable estáinvolucrada, conozco su tipo y valor.

b) Sí y la organización tipo pila se produce solamente en Algol

c) Eso no sucede en la TS

Pregunta N°2 :
¿Por qué el alcance dinámico exige un TS en tiempo de ejecución?

Respuesta:
Las variables que existen están en TS, y sólo pueden ser usadas las variables que tienen valor, es así como lo usan los lenguajes Smalltalk, APL, J, Basic, Lisp.

Pregunta N°3:
Suponga una generación de código que se realiza utilizando las siguientes tipos:
Lista de reglas, árbol sintáctico, polaca inversa, assembler y suponga la siguiente secuencia:
a:=b*c donde a y b son enteros y c es real.
La ejecución de esta sentencia implica la conversión de B a real, y la multiplicación de reales la conversión de reales a enteros.
Se desea representar en toda lasestructuras intermedias estas dos conversiones. Mostrar como se indican las mismas en cada una.

Respuesta:
En la regla semántica NO SE PUEDE EFECTUAR, "EJECUTAR" la conversión. En la regla semántica se "genera" el código correspondiente para que en run-time (cuando se corre el programa objeto generado) se efectúen las conversiones.
En tiempo de compilación no se conocen los valores "verdaderos" delas variables, y por lo tanto no se puede "convertir" en ese momento las variables. Sólo se puede generar el código correspondiente para que cuando los valores se conozcan (run-time del programa objeto) se apliquen las conversiones correspondientes.

Cómo debería quedar la polaca generada:
Cuando hablamos de polacas, sólo hay OPERADORES Y OPERANDOS. No existe nada más que no sean OPERADORES YOPERANDOS. ¿Y un "while", que es una "sentencia de control"? ¿Y un "goto"? y ¿una "declaración"?, no existe nada de esto!!.
Se modela todo como OPERADORES ó como OPERANDOS.
While, goto: son OPERANDOS? NO!!!. Son OPERADORES.
Un while se modela como un operador, un goto también,... y por lo tanto, una "promoción" de un tipo es un OPERADOR!!!
 
Entonces: a = b * c
 
en polaca, sin darleimportancia a los tipos, quedaría: a b c * =
 
Si se quiere modificar el "tipo" a algún OPERANDO, se debe "inventar" un OPERADOR, que será "unario" (como el menos unario), y ejecutarlo antes de la operación "mayor" donde este OPERANDO está involucrado.
Entonces:
si a es entera
si b es entera
C es real
y no se puede sumar enteros con reales sin promover previamente B a real, se debegenerar la siguiente polaca:
 
a b REAL c * =
 
Donde REAL es un operador unario, que toma un elemento, el tope de la pila (b), opera sobre él, lo "levanta" a real y pushea el resultado. Entonces, luego de ejecutar ese operador en la pila de ejecución se tendría la a y encima de ella la b pero en el formato "REAL".
Ahora se puede sumar la "b REAL " con la c. Eso, en tiempo de ejecución, dejaríala pila con la a en la base, y encima de ella el producto de b y c.
Ahora para asignarle a la variable a ese valor, se debe bajar a entero, por lo tanto sobre el tope de pila (que tiene el resultado de b*c) se debe ejecutar un operador que te convierta el resultado a entero. Entonces la polaca quedaría:
 
a b REAL c * INT =
 
Esta es la polaca que el compilador debería generar.
Supongamos queestá generada. Olvidémonos del compilador y vamos a Run-time. Ejecutémosla:
push a la pila la a
push a la pila la b
pop la b, convierto a real y push
en la pila tengo:
a b_REAL
push a la pila la c
pop 2 operandos, multiplico y push el resultado. Tengo en la pila:
a b_Real_*_C
 
viene el operador "INT"
pop el el operando (b_Real_*_c), convierto a INT y luego push. La pila queda:
a...
Leer documento completo

Regístrate para leer el documento completo.

Estos documentos también te pueden resultar útiles

  • Ejercicios Resueltos
  • Ejercicios Resueltos
  • ejercicios resueltos
  • Compilado ccna exsamenes resueltos
  • Ejercicios Resueltos
  • Ejercicios Resueltos
  • Ejercicio Resuelto
  • Ejercicios Resueltos

Conviértase en miembro formal de Buenas Tareas

INSCRÍBETE - ES GRATIS