Sie sind auf Seite 1von 8

1Taller N1 de Compiladores

Juan David Montañez Tapias


Abril 14 de 2020.

Corporación Universitaria Remington


Ingeniería de Sistemas
Compiladores
COMPILADORES
1

Tabla de Contenidos

1. ¿Cuál es la diferencia entre un compilador y un traductor?............................................2


2. ¿Qué diferencias hay entre el análisis léxico, el sintáctico y el semántico?....................3
3. ¿Con que objeto se realiza análisis léxico en el análisis de un compilador?...................3
4. ¿Qué criterio fundamental usa el compilador al optimizar el código intermedio?
Explique...............................................................................................................................3
5. Mostrar cómo se aplican las fases del compilador a las siguientes instrucciones:..........3
COMPILADORES
2

Taller de la unidad 1

1. ¿Cuál es la diferencia entre un compilador y un traductor?


Las computadoras leen los comandos del lenguaje máquina escrito en binario; por
ejemplo, largas cadenas de ceros y unos. Aunque las computadoras puedan leer este
lenguaje eficientemente, la mayoría de los programadores humanos no pueden hacerlo.
Por esta razón ellos trabajan en un lenguaje de programación que puedan comprender, el
cual traducen después al lenguaje máquina que la computadora entiende. Si bien muchos
lenguajes nuevos usan intérpretes que traducen de uno a otro conforme se ejecuta el
programa, los lenguajes de programación antiguos usaban compiladores que efectuaban
esta traducción completamente, antes de que la computadora ejecutara la aplicación.
Entendiendo esta condición se explicara a continuación la diferencia entre traductor y
compilador.

traductor, como un programa que traduce de un lenguaje a otro lenguaje. En el caso


particular de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje traducido
de bajo nivel, se emplea el término compilador.

Explicando mejor lo anteriormente expuesto se deduce que un traductor es cualquier


programa que toma como entrada un texto escrito en un lenguaje, llamado fuente y da
como salida otro texto en un lenguaje, denominado objeto. Representándose a
continuación:

Texto lenguaje Texto Lenguaje


Traductor
fuente Objeto

Ahora bien si, el lenguaje fuente es un lenguaje de programación de alto nivel y el


objeto sea un lenguaje de bajo nivel (ensamblador o código de máquina), a dicho
traductor se le denomina compilador.

Lenguaje alto lenguaje


Compilador
nivel ensamblador

Los compiladores presentan diferencias claves respecto a los traductores pues su


propósito no es tan particular como el de convertir un lenguaje escrito con unas normas
en otro lenguaje que responde a normas distintas; a esta tarea se suma la revisión
lexicográfica, sintáctica, semántica y al final la escritura optimizada de un código que
puede ser perfectamente entendido por la computadora (código en lenguaje de maquina o
ensamblador).
COMPILADORES
3

2. ¿Qué diferencias hay entre el análisis léxico, el sintáctico y el semántico?

el analizador léxico es la es la segunda fase revisa La fase de análisis


primera fase de un que las sentencias que semántico de un
léxico
analisis léxico

sintactico

semántico
análisis sintactico

analisis semántico
compilador. Su principal componen, el texto procesador de lenguaje
función consiste en leer fuente, son correctas en es aquélla que computa
los caracteres de entrada el lenguaje, creando una la información adicional
analisis

y elaborar como salida representación interna necesaria para el


una secuencia de que corresponde a la procesamiento de un
componentes léxicos que sentencia analizada. De lenguaje, una vez que la
análisis

analisis
utiliza el analizador esta manera se garantiza estructura sintáctica de
sintáctico para hacer el que sólo serán un programa haya sido
análisis. procesadas las obtenida
sentencias que
pertenezcan al lenguaje
fuente..

3. ¿Con que objeto se realiza análisis léxico en el análisis de un compilador?


El objeto del análisis léxico dentro del compilador es extraer del archivo fuente todas las
cadenas de caracteres que reconoce como parte del vocabulario y genera un conjunto de
tokens como salida. Un token o también llamado componente léxico es una cadena de
caracteres que tiene un significado coherente en cierto lenguaje de programación. En caso
de que parte del archivo de entrada no pueda reconocerse como lenguaje válido, se
generarán los mensajes de error correspondientes.

4. ¿Qué criterio fundamental usa el compilador al optimizar el código intermedio?


Explique
El objeto de esta fase es el de mejorar el código fuente escrito para que sea más rápido de
ejecutar, o use de manera más eficiente los recursos de la máquina. Este proceso se apoya
en la generación de código intermedio que fue realizada en la fase anterior. Por lo general
es mucho más complicado optimizar el código basándose en el programa fuente tal como
fue escrito por el programador.

La etapa final en el proceso de síntesis del compilador es convertir el código optimizado


a un código entendible por la máquina (lenguaje de maquina o ensamblador).

5. Mostrar cómo se aplican las fases del compilador a las siguientes instrucciones:
COMPILADORES
4

Ejercicio 1: while ( a>=1500)

Análisis léxico árbol gramatical


inicio
condicion: while
operador condicion: >= while
Identificador1: a
Identificador2: 1500
Identificador1 Ope. condicion Identificador2

Var1 >= 1500


Generación de Código ensamblador
while
Mov id1, r1
Mov C,r2
Cmp r1,r2
Bge fin

Ejercicio 2: c=a*b(b-d)/f

Análisis léxico árbol gramatical


asignación
Identificador1: c
Sim. de asignación: =Identificador1
Identificador2: a = Operador
Sim. Operador: * c
Identificador3: b Identificador operador
*
Sim. Prioridad: ( 2
Identificador4: d
Sim. de prioridad: ) a -
operador
Sim operador: )
Identificador5: f ( ) -/
Identificador3 Identificador4 Identificador5
Código intermedio
Temp1=id5 b d f
Temp2=(id3-id4)/Temp1
Temp3=id2*Temp2
Id1=Temp3

Generación de Código ensamblador


COMPILADORES
5

Mov id3, r2
Sub id4,r2
Div id5,r2
Mov r2,r1
Mul id2,r1
Mov r1,id1

Ejercicio 3: y=v0 * t +g*t^(2)

Análisis léxico árbol gramatical


asignación
Identificador1: y
Sim. de asignación: =Identificador1
Identificador2: v0 = Operador
Sim. Operador: * operador
y *
Identificador3: t
Sim. Operador: + Identificador2 Identificador3 + operador
Identificador4: g v0 t Identificador4 *
Sim. de Operador: * operador
Identificador5: t g Identificador5
Sim operador: ^ ^
Identificador 6: 2 t
Identificador6

Código intermedio
Temp1= (2)
Temp2=id5^ Temp1
Temp3=id4*Temp2
Temp4=id2*id3+Temp3
Id1=Temp4

Generación de Código ensamblador


Mov id5,r2
Exp 2,r2
Mul id4,r2
Mov r2,r1
Mov id3,r2
Mul id2,r2
Add r2,r1
Mov r1,id1
COMPILADORES
6

Ejercicio 4: IF( var1>=var2)

Análisis léxico árbol gramatical


inicio
condicion: if
operador condicion: >= Condición IF
Identificador1: var1
Identificador2: var2
Identificador1 Ope. condicion Identificador2

Var1 >= Var2


Generación de Código ensamblador
if
Mov var, r1
Mov var,r2
Cmp r1,r2
Bge fin

Ejercicio 5: w=f*d/t

Análisis léxico árbol gramatical


asignación
Identificador1: w
Sim. de asignación: =Identificador1 Operador
Identificador2: f =
Sim. Operador: *
w operador
Identificador3: d
*
Sim. operador: /
Identificador4: t
Identificador3
/
Identificador2 Identificador4

f d t
Código intermedio
Temp1=id4
Temp2=id3*id5/ Temp1
Id1=Temp2

Generación de Código ensamblador


Mov id3, r2
Sub id2,r2
COMPILADORES
7

Div id4,r2
Mov r2,r1
Mov r1,id1

Das könnte Ihnen auch gefallen