actividad numero 2compiladores
Post on 19-Jan-2016
84 Views
Preview:
TRANSCRIPT
COMPILADORES
CARLOS ANDRÉS BONILLA CARDONA
Estudiante ingeniería de sistemas – VI semestre
CORPORACIÓN UNIVERSITARIA REMINGTONCOMPILADORES
POPAYÁN2013
COMPILADORES
CARLOS ANDRÉS BONILLA CARDONAEstudiante ingeniería de sistemas – VI semestre
TALLER
DocenteIng. Esp. JIMMY ROMAN VALDÉS SANTACRUZ
CORPORACIÓN UNIVERSITARIA REMINGTONCOMPILADORES
POPAYÁN
2013
Actividad numero 2
1. Con la ayuda de material bibliográfico responda las siguientes preguntas:a. De acuerdo a la definición de un compilador diga tres características que lo hacen
importante para la formación de un ingeniero. Es importante conocer que significa compilar; un término muy utilizado al
utilizar las herramientas de programación. Es importante conocer cuáles son los procesos que realiza el programa
compilador después de generar el evento (compilar). Es importante adquirir nuevos conocimientos sobre compiladores, con el fin
de ser más competentes en la vida profesional.b. Describa tres características que diferencia a un compilador de un traductor normal.
Un traductor normal o un intérprete ejecutan las líneas paso a paso línea por línea y no realiza un programa objeto o equivalente como el compilador, es decir traduce en tiempo de ejecución.
Un compilador recibe el código fuente, lo analiza, lo optimiza y genera un código intermedio.
Al intentar compilar un bloque de instrucciones, el compilador, en caso de que existan errores, este nos mostrara que existe un error antes de hacer la traducción y la ejecución. En un intérprete nos daríamos cuenta de que existe un error cuando el objetivo no es el esperado.
2. Explique cómo se relaciona el análisis y la síntesis de un compilador El proceso de compilación se divide en dos procesos: Análisis y síntesis. Primero
hace el proceso de análisis en el cual se divide en tres subprocesos que consisten en un análisis léxico, luego realiza el análisis sintético del producto del anterior análisis y por último, realiza el análisis semántico; luego de que el código haya aprobado estas instancias realiza el proceso de síntesis en el cual hace la optimización del código, generación del código intermedio o instrucciones equivalentes entendibles por la máquina.
3. “El analizador léxico trabaja para el sintáctico”. Explique la anterior frase y describa como se realiza dicho proceso.
El analizador léxico trabaja para el sintáctico porque primero realiza el proceso de análisis léxico y con el producto de este el compilador realiza el proceso de análisis sintáctico.
4. Mostrar cómo se aplican las fases del compilador a las siguientes instrucciones. Y=Vot+gt2/2
Análisis léxico
Análisis sintáctico
Análisis semántico
Generación de código intermedio
Y = Vo*t + g+t^2/2
1: Vo*t t1 2: gt^2/2 t23: y t1 t2 * =
Optimización de código
y Vo t g 2 = * + * /
Generador de código
load tmult tmult gdiv 2load V0mult tadd mult
00000000011110100010100101001010101001 1010010101 01000000000001010100101001010010 0101001010 0101010 0101001010000010101010101 010100100 010101001 01010100101 10101010 10100101010
No tengo conocimiento de código objeto pero en internet me he encontrado un ejemplo y eso es lo que he intentado hacer. http://faustol.wordpress.com/2007/04/10/fases-de-un-compilador/
If (Var1>=var2)
Análisis léxico
Análisis sintáctico
Análisis semántico
Generación código intermedio
1: var1 var2 >=
Optimización de código
Var1 Var2 >=
Generación de Código
Load var1var1>=var201
0101010101010100110 010101001010101 0101010100101010100101
5. Cuál es la diferencia entre un compilador y un traductor Lo que diferencia a un compilador y un traductor es que el primero no solo
traduce el código fuente como el segundo, sino que además, antes de realizar la traducción, hace un recorrido completo evaluando que no existan errores, lexicográficos, sintácticos o semánticos, posteriormente genera un código equivalente, lo optimiza, y genera un código entendible por la máquina.
6. ¿Qué diferencia hay entre en análisis léxico, el sintáctico y el semántico.
El análisis léxico consiste en un recorrido identificando cada componente de cada instrucción y evaluando que exista en el lenguaje y que la palabra sea correcta; el análisis sintáctico se encarga de valuar que cada componente este bien escrito, que se cumpla con las reglas de gramática. El análisis semántico evalúa los operadores y los resultados, evalúa que las operaciones sean compactibles entre sí.
7. ¿Con que objeto se realiza el análisis léxico en el análisis de un compilador?Primero diré léxico significa relativo a las palabras, entonces el análisis léxico se realiza con el objeto de validar que las palabras existan y que sean correctas, además de este elimina comentarios, espacios en blanco y todo lo innecesario.
8. ¿Qué criterio fundamental usa el compilador al optimizar el código intermedio? Explique.El criterio que usa el compilador al optimizar el código intermedio, es reducirlo hasta donde sea posible, eliminando lo innecesario, con el fin de que sea más rápida su ejecución.
9. Realizar las dos fases completas del reconocedor para la siguiente instrucción de un lenguaje dado:
While(a>=1500)
C=a*(b-d)/f
Actividad numero 3
Con la ayuda de algún lenguaje de programación, se implementara los siguientes problemas algorítmicos, para los cuales se deberá presentar in informe con las especificaciones dadas al final de la actividad:
1. Ecuación cuadrática en java.
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;import java.lang.Math;
public class EcuacionCuadratica {
/** * @param args * @author Carlos Andres Bonilla Cardona */public static InputStreamReader isr = new InputStreamReader
(System.in);public static BufferedReader teclado = new BufferedReader (isr);public static void main(String[] args) throws
NumberFormatException, IOException {// TODO Auto-generated method stubSystem.out.print("Ingrese el valor de a");int a=Integer.parseInt(teclado.readLine());System.out.print("Ingrese el valor de b");int b=Integer.parseInt(teclado.readLine());System.out.print("Ingrese el valor de c");int c=Integer.parseInt(teclado.readLine());if (a==0){
System.out.println("El denominador es cero, por favor cambielo y vuelva a ejecutar el programa");
}else {int raiz = (b*b-4*a*c);
if (raiz<0){System.out.println("No se puede extraer raiz
cuadrada a un número negativo");}else {
int x1 = (int) (-(b)+(Math.sqrt(raiz)))/2*a;System.out.println("Primer resultado: Suma " + x1);int x2 = (int) (-(b)-(Math.sqrt(raiz)))/2*a;System.out.println("segundo resultado: resta " + x2);
}}
}}
2. Nomina semanal.
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;
public class NominaSemanal {
/** * @param args * @author Carlos Andres Bonilla Cardona */public static InputStreamReader isr = new InputStreamReader
(System.in);public static BufferedReader teclado = new BufferedReader (isr);public static void main(String[] args) throws IOException {
// TODO Auto-generated method stubSystem.out.println("Ingrese su nombre");String nombre = teclado.readLine();//almacena el nombre de la
personaSystem.out.println("Ingrese su salario mensual");int salario = Integer.parseInt(teclado.readLine());//almacena
el salario fijo del empleadoSystem.out.println("Ingrese las horas laboradas");int HorasSemanales =
Integer.parseInt(teclado.readLine());//almacena el numero de horas trabajadas
int PrecioHora=salario/160;//calcula el precio de una hora de trabajo
int horasExtras=0;//almacena el numero de horas extras trabajadas
int PrecioHorasExtras=0;// almacena el valor de una hora extra
int SalarioTemporal=0;// almacena el valor a pagar antes de los descuentos
int saldoHoras=0; //almacena el saldo a pagar de horas normales
int saldoHorasExtras=0;// almacena el saldo a pagar por horas extras
int SalarioNeto=0; //almacenara el salario neto que se pagara.
int saldoDescontado=0;//almacena el saldo que se descontaraif(HorasSemanales>40){
horasExtras=HorasSemanales-40;PrecioHorasExtras=(int) (PrecioHora+(PrecioHora*0.25));saldoHorasExtras=horasExtras*PrecioHorasExtras;HorasSemanales=40;
}saldoHoras=HorasSemanales*PrecioHora;SalarioTemporal=saldoHoras+saldoHorasExtras;if(SalarioTemporal<500000){
System.out.println("señor(a) " + nombre +" se le desconto " + saldoDescontado + " y su \n salario neto es de: "+ SalarioTemporal + " usted tiene "+ horasExtras + " Horas extras");
}
if ((SalarioTemporal>500000)&&(SalarioTemporal<1000000)){saldoDescontado=(int) (SalarioTemporal*0.05);SalarioNeto=(int) (SalarioTemporal-saldoDescontado);System.out.println("señor(a) " + nombre +" se le
desconto "+ saldoDescontado + " y su \n salario neto es de: "+ SalarioNeto + " usted tiene "+ horasExtras + " Horas extras");
}if (SalarioTemporal>1000000){
saldoDescontado=(int) (SalarioTemporal*0.1);SalarioNeto=(int) (SalarioTemporal-saldoDescontado);System.out.println("señor(a) " + nombre +" se le
desconto "+ saldoDescontado + " y su \n salario neto es de: "+ SalarioNeto + " usted tiene "+ horasExtras + " Horas extras");
}}
}
3. Compra llantas.
import java.io.BufferedReader;import java.io.IOException;import java.io.InputStreamReader;
public class CompraLlantas {
/** * @param args */public static InputStreamReader isr = new InputStreamReader
(System.in);public static BufferedReader teclado = new BufferedReader (isr);public static void main(String[] args) throws
NumberFormatException, IOException {// TODO Auto-generated method stubSystem.out.print("Ingrese la cantidad de llantas");double cantidad= Double.parseDouble(teclado.readLine());double PrecioAPagar=0;if (cantidad<5){
PrecioAPagar=cantidad*300000;}else if ((cantidad>=5)&&(cantidad<=10)){
PrecioAPagar=cantidad*250000;}else {
PrecioAPagar=cantidad*300000;}System.out.println("El precio a pagar es "+ PrecioAPagar );
}
}
top related