vacas

8
Preguntas: Lea los temas 1.1 a 1.3 del archivo A7.pdf proporcionado en el material del curso Preguntas: 1. ¿Cuál es el objetivo de un compilador? R: básicamente es traducir un programa (o texto) escrito en un lenguaje “fuente”, que llamaremos programa fuente, en un equivalente en otro lenguaje denominado “objeto”, al que llamaremos programa o código objeto. 2. ¿Cuántas fases componen un compilador? ¿Cuáles son? R: Analisis léxico Analisis sintáctico Analisis semántico Generacion de código Optimizacion de código Generalizacion de codigo 3. ¿Cuál es la función de cada una de ellas? R: Análisis léxico La cadena de entrada se recibe como una sucesión de caracteres. El análisis léxico agrupa los caracteres en secuencias con significado colectivo y mínimo en el lenguaje, llamadas componentes léxicos (palabras o “token”), con ciertos atributos léxicos. Análisis sintáctico Los componentes léxicos se agrupan para formar frases. El valor léxico de los componentes es en este momento irrelevante. Normalmente las frases se representan

Upload: berenice-barcena

Post on 10-Dec-2015

212 views

Category:

Documents


0 download

DESCRIPTION

cuestionario

TRANSCRIPT

Page 1: Vacas

Preguntas:

Lea los temas 1.1 a 1.3 del archivo A7.pdf proporcionado en el material del curso

Preguntas:

1. ¿Cuál es el objetivo de un compilador?

R: básicamente es traducir un programa (o texto) escrito en un lenguaje “fuente”, que llamaremos programa fuente, en un equivalente en otro lenguaje denominado “objeto”, al que llamaremos programa o código objeto.

2. ¿Cuántas fases componen un compilador? ¿Cuáles son?

R:

Analisis léxico

Analisis sintáctico

Analisis semántico

Generacion de código

Optimizacion de código

Generalizacion de codigo

3. ¿Cuál es la función de cada una de ellas?

R:

Análisis léxico La cadena de entrada se recibe como una sucesión de caracteres. El análisis léxico agrupa los caracteres en secuencias con significado colectivo y mínimo en el lenguaje, llamadas componentes léxicos (palabras o “token”), con ciertos atributos léxicos.

Análisis sintáctico Los componentes léxicos se agrupan para formar frases. El valor léxico de los componentes es en este momento irrelevante. Normalmente las frases se representan mediante una estructura de árbol sintáctico, siguiendo reglas que describen el lenguaje.

Análisis semántico En esta etapa se revisa el resultado del análisis sintáctico, recopilando por ejemplo información de tipos y construyendo una representación aún más abstracta.

Generación de código intermedio Se genera en esta fase un código intermedio para una máquina abstracta, y es posible que explícitament . Esta representación debe ser fácil de producir y fácil de traducir al programa objeto. Puede tener diversas formas.

Page 2: Vacas

Optimación de código Se trata en esta fase de mejorar el código, en el sentido de reducir la cantidad de resursos (tiempo y memoria) necesarios.

Generación de código En esta fase final se genera por fin el código objeto, normalmente código máquina relocalizable o ensamblador. Se seleccionan entonces posiciones de memoria relativas o registros para las variables y cada sentencia del código intermedio se traduce a una secuencia de instrucciones que ejecutan la tarea

4. ¿En cuántas y cuáles son las subfases de cada una de ellas?

5. ¿Cuáles son las funciones principales de cada una de ellas?

Análisis léxico:

Consiste en agrupar caracteres para formar las unidades que ya tienen significado por s mismas (tokens). NOTA. Token es la moneda de menor valor. Nosotros diríamos céntimo.

Análisis sintáctico: Se analizan las sentencias, que están compuestas de tokens, de acuerdo con la sintaxis del lenguaje.

Análisis semántico y Generador de código intermedio son dos etapas que se representan juntas porque la generación de código intermedio utiliza el mismo árbol del análisis semántico.

Optimización del código:

Es una sección optativa pero muy difundida y demandada entre los compiladores profesionales. Por ello, Los constructores de compiladores gastan mucho dinero en ella. Trata de optimizar el código en tamaño y/o velocidad.

Generador de código final:

Se encarga de generar el código en el lenguaje objeto del compilador

6. Dibuje la estructura general de un compilador

Page 3: Vacas

7. ¿Qué es el código objeto?

Código generado por un compilador o un ensamblador traducido por un código fuente de un programa.Casi siempre este término se refiere al código máquina que puede ejecutarse directamente en la unidad central de proceso (CPU) del sistema, pero también puede ser código fuente de lenguaje ensamblador o una variante de código máquina.

Consulte en Internet el siguiente vínculo: http://es.wikipedia.org/wiki/Estructuras_de_control#Tipos_de_estructura_de_control

Preguntas:

8. ¿Cuántos tipos de instrucciones existen en cualquier lenguaje?¿Cuáles son?

Estos son los tipos de instrucciones:

– instrucciones declarativas:

ejemplo:

include <iostream.h> ——> cin , cout..

#include <conio.h> ——> funcion getch()..

#include <string.h> ——> para manipular cadenas

#include <math.h> ——> para operaciones numericas

#include <time.h> ——> para usar la hora

#include <stdio.h> ——> para usar alternativas de entrda – salida como printf , scanf

float vector [12];         ——> Declarando un arreglo tipo flotante ( decimal )

– instrucciones de asignacion:

Ejemplo:

Sirven para dar valores a las variables, y llevan éste formato:

nombre_variable = expresión ;

– instrucciones selectivas

Ejemplo:

if ( expresión a evaluar )   

else ——> Pero si ésa expresión era falsa, se ejecutarán las acciones 3 y 4.

switch ( expresion a evaluar )         ——> Esta es la expresion que vamos a evaluar.

{

case 1 :   accion 1 ;

case 2 :   accion 2 ;

case 3 :   accion 3 ;

}

– instrucciones repetitivas

Ejemplo:

Page 4: Vacas

While ( expresión )    ——> Mientras esa expresión sea verdadera hará las acciones 1 y 2.

Do

{

acción 1;

acción 2;

} While ( expresión )                  ——> Mientras esa expresión sea verdadera hará las acciones 1 y 2.

for ( expresión inicial ; expresión final ; incremento / decremento )    

{

acciónes; ——> Hasta que no llegue a la “expresión final“, se ejecurá la acción una y otra vez.

}

– instrucciones de entrada y salida de datos:

Ejemplo:

cin >> nombre_del_usuario ;

– Para la salida de datos ( mostrar )

cout << nombre_del_usuario

– instrucciones de bifurcación:

Ejemplo:

Switch ( expresión que estamos evaluando )

{

case 1 : cout << ” Hola! “ ; break ;

case 2 : cout << ” amig@s “ ;

}

9. ¿Elija uno de ellos y describa los componentes de esa instrucción detallándolos lo mejor posible?

R: float vector [12];         ——> Declarando un arreglo tipo flotante ( decimal )

Ese “vector” que se ha declarado arriba, al ser un arreglo quiere decir que hay 12 variables con el mismo

nombre

y son del mismo tipo, pero diferenciadas unicamente en su posicion, asi:

vector[0],vector[1],vector[2],vector[3],vector[4],vector[5],vector[6], ………….. ,vector[10],vector[11].

Nota: los arreglos siempre comienzan en la posicion cero ( 0 ) por eso llegan hasta una unidad menos, en

éste caso como declaramos un arreglo de 12 , su tope será de 11; puesto a que desde cero ( 0 ) hasta once

( 11 ) hay doce ( 12 ) variables

10. ¿Qué es la tabla de símbolos?

R: Tabla: conjunto de pares clave-valor, llamados elementos de la tabla.

La tabla de símbolos es una componente necesaria de un compilador. Al declarar un identificador (normalmente una sola vez), éste es insertado en la tabla. Cada

Page 5: Vacas

vez que se utilice el identificador se realizará una búsqueda en la tabla para obtener la información asociada (el valor).

11. ¿Cuáles son los elementos que integran la tabla de símbolos? Almacenamiento del nombre. Se puede hacer con o sin límite. El tipo también se almacena en la tabla Dirección de memoria en que se guardará. Esta dirección es necesaria, porque las

instrucciones que referencian a una variable deben saber dónde encontrar el valor de esa variable en tiempo de ejecución, también cuando se trata de variables globales.

El número de dimensiones de una variable array, o el de parámetros de una función o procedimiento junto con el tipo de cada uno de ellos es útil para el chequeo semántico.

12. ¿Cuál es la utilidad de la tabla de símbolos?

Las tablas de símbolos se crean en las primeras fases del proceso, durante el análisis léxico y sintáctico, permitiendo a las siguientes asociar un contexto a cada uno de los símbolos que haga posible saber, por ejemplo, si un identificador representa una variable o el nombre de un procedimiento, cuál es el tipo de dato de la variable o la lista de argumentos que precisa ese procedimiento, cuál es el ámbito que les corresponde en el caso de los lenguajes con estructura de bloques y orientados a objetos, etc.

13. ¿Cuáles son los tipos de datos que podemos encontrar en un lenguaje?

“Tipos de datos” para englobar a cualquier cosa que ocupa un espacio ... Esto es una cuestión que atañe a la concepción del lenguaje de programación. ...

Consulte en internet el siguiente vínculo: http://www.giaa.inf.uc3m.es/docencia/ITIG/Semantico.pdf y responda las siguientes preguntas

14. ¿En qué consiste la comprobación de flujo de control?

Que son instrucciones del tipo"si se cumple esta condición, hazlo; si no se cumple,

haz esto otro". También existen instrucciones del tipo "repite esto mientras se

cumpla esta condición".

Si se utilizan estructuras de control de flujo, los programas dejan de ser una

sucesión lineal de instrucciones para convertirse en programas inteligentes que

pueden tomar decisiones en función del valor de las variables.

Ejemplo:

if(condicion) {

Page 6: Vacas

...

}

Si la condición se cumple (es decir, si su valor es true) se ejecutan todas las

instrucciones que se encuentran dentro de{...}. Si la condición no se cumple (es

decir, si su valor es false) no se ejecuta ninguna instrucción contenida en {...}y

el programa continúa ejecutando el resto de instrucciones del script.

15.¿En qué consiste la comprobación de unicidad? Comprobación de unicidad int a; char a; //una sola vez Comprobación relacionadas con nombres: <¿Cómo se realiza la comprobación de unicidad? A través de la tabla de símbolos.>

16. ¿En qué consiste la comprobación de emparejamiento? Un compilador debe comprobar si el programa fuente sigue tanto las convenciones sintácticas como las semánticas del lenguaje fuente. Esta comprobación, llamada comprobación estática (para distinguirla de la comprobación dinámica que se realiza durante la ejecución del programa objeto), garantiza la detección y comunicación de algunas clases de errores de programación.

17. ¿Explique con su palabras los siguientes conceptos?

a) Semántica Operacional

Enfasis en explicar cómo se ejecuta en una máquina abstracta. • Especificación de expresiones y comandos dirigidos por sintaxis.

Semántica Denotacional

Idea: “El significado de un programa es la función denotada por el programa”. Semántica Axiomática :

Enfasis en demostrar la correctitud de inicio a fin.

Significado de cada instrucción como una regla de lógica.

b) Gramáticas con atributos

Page 7: Vacas

una gramática independiente del contexto en la cual a sus símbolos terminales y no terminales se les dota de unos atributos y a sus producciones de unas funciones de evaluación que hacen que dichos atributos se propaguen a través de la gramática.

¿Cuáles son las diferencias entre ellas? Justifique su respuesta.