Vous êtes sur la page 1sur 10

COMPILADORES

CARLOS ANDRS BONILLA CARDONA


Estudiante ingeniera de sistemas VI semestre






CORPORACIN UNIVERSITARIA REMINGTON
COMPILADORES
POPAYN
2013

COMPILADORES



CARLOS ANDRS BONILLA CARDONA
Estudiante ingeniera de sistemas VI semestre


TALLER


Docente
Ing. Esp. JIMMY ROMAN VALDS SANTACRUZ



CORPORACIN UNIVERSITARIA REMINGTON
COMPILADORES
POPAYN
2013

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

}

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 stub
System.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 );
}

}