Actividad numero 2 1. Con la ayuda de material bibliogrfico responda las siguientes preguntas: a. De acuerdo a la definicin de un compilador diga tres caractersticas que lo hacen importante para la formacin de un ingeniero. Es importante conocer que significa compilar; un trmino muy utilizado al utilizar las herramientas de programacin. Es importante conocer cules son los procesos que realiza el programa compilador despus de generar el evento (compilar). Es importante adquirir nuevos conocimientos sobre compiladores, con el fin de ser ms competentes en la vida profesional. b. Describa tres caractersticas que diferencia a un compilador de un traductor normal. Un traductor normal o un intrprete ejecutan las lneas paso a paso lnea por lnea y no realiza un programa objeto o equivalente como el compilador, es decir traduce en tiempo de ejecucin. Un compilador recibe el cdigo fuente, lo analiza, lo optimiza y genera un cdigo 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 traduccin y la ejecucin. En un intrprete nos daramos cuenta de que existe un error cuando el objetivo no es el esperado. 2. Explique cmo se relaciona el anlisis y la sntesis de un compilador El proceso de compilacin se divide en dos procesos: Anlisis y sntesis. Primero hace el proceso de anlisis en el cual se divide en tres subprocesos que consisten en un anlisis lxico, luego realiza el anlisis sinttico del producto del anterior anlisis y por ltimo, realiza el anlisis semntico; luego de que el cdigo haya aprobado estas instancias realiza el proceso de sntesis en el cual hace la optimizacin del cdigo, generacin del cdigo intermedio o instrucciones equivalentes entendibles por la mquina. 3. El analizador lxico trabaja para el sintctico. Explique la anterior frase y describa como se realiza dicho proceso. El analizador lxico trabaja para el sintctico porque primero realiza el proceso de anlisis lxico y con el producto de este el compilador realiza el proceso de anlisis sintctico. 4. Mostrar cmo se aplican las fases del compilador a las siguientes instrucciones. Y=Vot+gt 2 /2
Anlisis lxico
Anlisis sintctico
Anlisis semntico
Generacin de cdigo intermedio Y = Vo*t + g+t^2/2 1: Vo*t t1 2: gt^2/2 t2 3: y t1 t2 * = Optimizacin de cdigo y Vo t g 2 = * + * / Generador de cdigo load t mult t mult g div 2 load V0 mult t add mult 00000000011110100010100101001010101001 1010010101 01000000000001010100101001010010 0101001010 0101010 0101001010000010101010101 010100100 010101001 01010100101 10101010 10100101010 No tengo conocimiento de cdigo 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) Anlisis lxico
Anlisis sintctico
Anlisis semntico
Generacin cdigo intermedio 1: var1 var2 >= Optimizacin de cdigo Var1 Var2 >= Generacin de Cdigo Load var1 var1>=var2 0 1 0101010101010100110 010101001010101 0101010100101010100101 5. Cul 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 cdigo fuente como el segundo, sino que adems, antes de realizar la traduccin, hace un recorrido completo evaluando que no existan errores, lexicogrficos, sintcticos o semnticos, posteriormente genera un cdigo equivalente, lo optimiza, y genera un cdigo entendible por la mquina. 6. Qu diferencia hay entre en anlisis lxico, el sintctico y el semntico. El anlisis lxico consiste en un recorrido identificando cada componente de cada instruccin y evaluando que exista en el lenguaje y que la palabra sea correcta; el anlisis sintctico se encarga de valuar que cada componente este bien escrito, que se cumpla con las reglas de gramtica. El anlisis semntico evala los operadores y los resultados, evala que las operaciones sean compactibles entre s. 7. Con que objeto se realiza el anlisis lxico en el anlisis de un compilador? Primero dir lxico significa relativo a las palabras, entonces el anlisis lxico se realiza con el objeto de validar que las palabras existan y que sean correctas, adems de este elimina comentarios, espacios en blanco y todo lo innecesario. 8. Qu criterio fundamental usa el compilador al optimizar el cdigo intermedio? Explique. El criterio que usa el compilador al optimizar el cdigo intermedio, es reducirlo hasta donde sea posible, eliminando lo innecesario, con el fin de que sea ms rpida su ejecucin. 9. Realizar las dos fases completas del reconocedor para la siguiente instruccin de un lenguaje dado: While(a>=1500)
C=a*(b-d)/f
Actividad numero 3 Con la ayuda de algn lenguaje de programacin, se implementara los siguientes problemas algortmicos, para los cuales se deber presentar in informe con las especificaciones dadas al final de la actividad: 1. Ecuacin cuadrtica 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 stub System.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 nmero 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 stub System.out.println("Ingrese su nombre"); String nombre = teclado.readLine();//almacena el nombre de la persona System.out.println("Ingrese su salario mensual"); int salario = Integer.parseInt(teclado.readLine());//almacena el salario fijo del empleado System.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 descontara if(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("seor(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("seor(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("seor(a) " + nombre +" se le desconto "+ saldoDescontado + " y su \n salario neto es de: "+ SalarioNeto + " usted tiene "+ horasExtras + " Horas extras"); } }