Actividad Numero 2compiladores

12
COMPILADORES CARLOS ANDRÉS BONILLA CARDONA Estudiante ingeniería de sistemas – VI semestre CORPORACIÓN UNIVERSITARIA REMINGTON COMPILADORES

Transcript of Actividad Numero 2compiladores

Page 1: Actividad Numero 2compiladores

COMPILADORES

CARLOS ANDRÉS BONILLA CARDONA

Estudiante ingeniería de sistemas – VI semestre

CORPORACIÓN UNIVERSITARIA REMINGTONCOMPILADORES

POPAYÁN2013

Page 2: Actividad Numero 2compiladores

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

Page 3: Actividad Numero 2compiladores

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

Page 4: Actividad Numero 2compiladores

Análisis léxico

Análisis sintáctico

Análisis semántico

Page 5: Actividad Numero 2compiladores

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

Page 6: Actividad Numero 2compiladores

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.

Page 7: Actividad Numero 2compiladores

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

Page 8: Actividad Numero 2compiladores

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);

}}

}}

Page 9: Actividad Numero 2compiladores

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");

}

Page 10: Actividad Numero 2compiladores

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 );

}

}