Tema: Traductor ENSAMPOCO a ASM 8086

Anuncio
Compiladores. Guía 12
1
Facultad:
Ingeniería
Escuela:
Computación
Asignatura: Compiladores
Tema: Traductor ENSAMPOCO a ASM 8086
Contenido
En esta práctica se desarrollará un traductor de lenguaje
ENSAMPOCO/3 a lenguaje Ensamblador 8086 para completar el
desarrollo de un compilador.
Objetivos Específicos
Reconocer las partes de un traductor y desarrollar un
ejemplo de aplicación.
Material y Equipo
Guía de Laboratorio Nº 12.
Computadora con DevC++
Set de instrucciones Ensamblador 8086
Traductor ENSAMPOCO/0: traducto.h
Introducción Teórica
Traductores
Guía
3
Un
traductor
es un programa que procesa un texto fuente y
genera un texto objeto. El traductor está escrito en un
lenguaje
Guía 4 de implementación (LI) o también denominado lenguaje
host.
fía texto fuente está escrito en lenguaje fuente (LF), por
El
ejemplo un lenguaje de alto nivel. El texto objeto está
escrito en lenguaje objeto (LO), por ejemplo un lenguaje
máquina, ensamblador u otro lenguaje de alto nivel. Se suele
utilizar la notación en T, tal como se muestra en la figura.
La notación en T también se puede representar de una forma
abreviada como: LFLILO.
2
Compiladores. Guía 12
El lenguaje fuente (LF) es el lenguaje origen que transforma
el traductor (por ejemplo C, C++, Pascal, FORTRAN,PL/I,
COBOL, ADA, MODULA-2, BASIC, C). También pueden ser lenguajes
de bajo nivel.
El lenguaje objeto (LO) es el lenguaje al que se traduce el
texto fuente. Los lenguajes objeto pueden ser por ejemplo
otro lenguaje de alto nivel, el lenguaje máquina de un
microprocesador determinado, un lenguaje ensamblador,...
El lenguaje de implementación (LI) o lenguaje host es el
lenguaje en que está escrito el traductor. Puede ser
cualquier lenguaje, desde un lenguaje de alto nivel a un
lenguaje máquina.
Existen modelos de traductores que separan al traductor en
distintos módulos, dando una idea de secuencialidad, sin
embargo
en
muchos
casos
estos
módulos
se
ejecutan
simultáneamente.
Hay interacciones entre el analizador léxico y el analizador
sintáctico. La primera posibilidad es que el analizador
léxico genere un token para que sea procesado por el
analizador sintáctico.
Una vez que el analizador sintáctico lo ha procesado pedirá
al analizador léxico el siguiente token, o en el caso de que
no lo necesite se lo devuelva, repitiéndose este proceso
durante el análisis del lenguaje fuente.
Otra posibilidad es que el analizador léxico genere todos los
tokens del programa fuente de una pasada, y los almacene en
memoria o en un disco para que sean procesados posteriormente
por el analizador sintáctico. En este caso esta parte del
traductor se dice que es de paso separado (separate pass).
Algunos traductores realizan todo el proceso en un solo paso
(traductores de un paso), mientras que otros realizan
hastamásde30pasos (por ejemplo los primeros compiladores de
Compiladores. Guía 12 3
PL/I de IBM). Los factores que influyen en el número de pasos
de un compilador son los siguientes:
1. Complejidad del lenguaje fuente.
2. Distancia entre el lenguaje fuente y el lenguaje objeto.
3. Memoria mínima necesaria para compilar.
4. Velocidad y tamaño del compilador.
5. Velocidad y tamaño del programa objeto.
6. Necesidades de depuración (debugging).
7. Técnicas de detección y reconocimiento de errores.
8. Número de personas y tiempo disponible para realizar el
traductor.
La complejidad del lenguaje fuente también puede implicar que
el compilador necesite realizar varias pasadas al lenguaje
fuente para realizar el análisis del programa fuente, es
decir es necesario leer varias veces el lenguaje fuente para
obtener toda la información necesaria para la fase de
análisis.
Así por ejemplo la complejidad del lenguaje Eiffel obliga a
sus compiladores a dar varias pasadas a los ficheros fuente
[LEIV93].
Los compiladores orientados a educación de estudiantes de
lenguajes de programación son compiladores de un paso. La
optimización de código que se realiza en ellos es muy pequeña
o no se hace, ya que la mayoría de los programas se
compilarán muchas veces hasta que se pongan a punto.
Ejecutándose una vez y descargándose. Las fases de análisis y
generación de código se realizan a la vez. La parte más
importante de este tipo de compiladores es la detección y
reconocimiento de errores. Por ejemplo los compiladores Turbo
Pascal y Turbo C de Borland.
Los compiladores profesionales, en general no suelen de ser
de un paso, sino que son de varios pasos. Se suele cuidar
mucho la fase de optimización de código.
Normalmente los fabricantes de compiladores comerciales
suelen tener varias gamas de compiladores según el usuario al
que vayan destinados.
Así las
Borland
busquen
código.
gamas de compiladores Quick de Microsoft o Turbo de
van destinadas a estudiantes o a profesionales que
la velocidad de compilación sobre la optimización de
Para profesionales que deseen una mejor calidad de
4
Compiladores. Guía 12
código objeto, perdiendo velocidad de compilación, estos
mismos fabricantes ofrecen las gamas Professional y Borland
respectivamente.
Los traductores de un paso y de una pasada única al lenguaje
fuente son los más rápidos. Así los diseñadores de
traductores eligen este esquema cuando la complejidad del
lenguaje lo permite construirlos. En este caso el esquema
habitual de los traductores está dirigido por el analizador
sintáctico, que constituye el centro del proceso de
traducción o módulo principal, y el resto de los módulos
cooperan a su alrededor.
Procedimiento
Revise la clase traducto.h proporcionada en los recursos, la
Guíaes3 un traductor de ENSAMPOCO/0 a ASM 8086. Implemente
cual
con ella el traductor correspondiente.
Guía 4
fía
Compiladores. Guía 12 5
Análisis de resultados
Explique cómo funciona el traductor mostrado, comente el
código e identifique sus partes.
Analice y responda, cuáles son las principales diferencias
entre un traductor, un intérprete y un compilador; cómo se
interrelacionan entre ellos para ejecutar un programa en un
lenguaje específico.
Pruebe el programa traduciendo el siguiente código:
Ensampoco0.poc
.CODE
INPUT a
INPUT b
PUSHA c
PUSHA a
LOAD
PUSHA b
LOAD
ADD
STORE
PUSHA d
PUSHA a
LOAD
PUSHA b
LOAD
NEG
ADD
STORE
PUSHA c
PUSHA a
LOAD
PUSHA b
LOAD
MUL
STORE
OUTPUT c
OUTPUT d
END
Investigación complementaria
Desarrolle un traductor para ENSAMPOCO/3 en base al código de
recursos de esta práctica y los resultados de la generación
de código de la guía 9. Utilice las instrucciones de lenguaje
ensamblador 8086 de los recursos de esta práctica.
6
Compiladores. Guía 12
Muestre evidencias del resultado para el siguiente programa.
Ensampoco3.poc
.DATA
INT a
INT b
FLOAT c
FLOAT d
.CODE
IINPUT a
IINPUT b
FPUSHA c
IPUSHA a
ILOAD
IPUSHA b
ILOAD
IADD
ITOF
FSTORE
FPUSHA d
IPUSHA a
ILOAD
IPUSHA b
ILOAD
INEG
IADD
ITOF
FSTORE
FOUTPUT c
FOUTPUT d
END
Bibliografía
Cueva, J.
lenguaje.
(1998). Conceptos
Universidad
básicos
de
de procesadores de
Oviedo,
España.
Compiladores. Guía 12 7
Hoja de cotejo:
Guía 11: Traductor de Ensampoco a
ASM 8086
Tema: Presentación
del programa
Alumno
:
Docente:
12
1
Máquina No:
Máquina No:
Máquina No:
GL:
Alumno:
Docente:
GL:
Docente:
GL:
Fecha:
a
EVALUACION
%
CONOCIMIENTO
Del 20
al 30%
APLICACIÓN
DEL
CONOCIMIENTO
Del 40%
al 60%
1-4
5-7
8-10
Conocimie
nto
deficient
e de los
fundament
os
teóricos
Conocimiento
y explicación
incompleta de
los
fundamentos
teóricos
Conocimiento
completo y
explicación
clara de los
fundamentos
teóricos
No tiene
actitud
proactiva
.
Actitud
propositiva y
con
propuestas no
aplicables al
contenido de
la guía.
Tiene actitud
proactiva y sus
propuestas son
concretas.
ACTITUD
Del 15%
al 30%
TOTAL
100%
Nota
Descargar