Compiladores
1.1- DIAGRAMA DE BLOQUES DE UN COMPILADOR.
Veamos el esquema por bloques de un compilador:
Código Fuente
Código Objeto (P ó C)
■
┌ৄৄ■(*)
৺৶৶৶৶৶৶■৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶■৶৶৶৶৶৶৶৶৽
৷
┌ৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৎ
৷
৷
┌ৄৄৄৄৄৄড় GESTION DE ERRORES ├ৄৄৄৄৄৄৎ
৷
৷
ৄৄৄ┬ৄৄৄৄৄৄৄৄৄৄৄৄ┬ৄৄৄৄ
৷
৷
৷
৷
৷
৷┌ৄৄৄৄৄ০ৄৄৄৄৄ০ৄৄৎ
┌ৄৄৄ০ৄৄৄৄৄ০ৄৄৄৄৎ
৷
৷ Preprocesador
┌ৄৄৄ০ৄৄৄৄৎ
┌ৄৄৄ০ৄৄৄৄৎ
৷
৷├ৄৄৄৄৄৄৄৄৄৄৄৄৄৄড়
Generación
৷
৷
├ৄ>ৄড় Parser ├ৄ>ৄড় An lis.├ৄ>ড়
de
৷
৷
Scanner
(A.S)
Sem ntic
Código
৷
৷
(A.L)
Intermedio
৷
৷
ৄৄৄ┬ৄৄৄৄ
ৄৄৄৄ┬ৄৄৄ
৷
৷ৄৄৄৄৄৄ┬ৄৄৄৄৄৄৄ
ৄৄৄৄৄৄ┬ৄৄৄৄৄৄৄ
৷
৷
৷
৷
ৄৄৄৄৄৄৄৄৄৎ
┌ৄৄৄৄৄ
৷
৷
৷
৷
৷
৷
┌ৄৄ০ৄৄৄৄৄ০ৄৄৄৄৄৄৄৄৄৄৄৄৄ০ৄৄৄৄৄৄৄ০ৄৄৄৄৎ
৷
৷
Tabla de Símbolos
৷
৷
├ৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄড়
৷
৷
Tabla de Tipos
৷
৷
ৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄ
৷
৷
৷
৷
৷
৷
৷
৷
┌ৄৄৄৄৄৄৄৄৄৄৄৎ
┌ৄৄৄৄৄৄৄৄৄৄৄৄৄৎ
┌ৄৄৄৄৄৄৄৄৄৄৄৄৎ
৷
৷
Almacenam.
Almacenam.
৷
৷
de
de
....
৷
৷
Constantes
Strings
৷
৷
ৄৄৄৄৄৄৄৄৄৄৄ
ৄৄৄৄৄৄৄৄৄৄৄৄৄ
ৄৄৄৄৄৄৄৄৄৄৄৄ
৷
৷
৷
╚৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶╝
Compilador
En términos generales, un COMPILADOR es una herramienta que
toma un código fuente y lo traduce a uno objeto.
El Compilador consta de dos partes:
- FRONT-END: correspondiente al esquemaanterior.
- BACK-END: paso del Código Objeto al M quina.
El Código Objeto ser
nuestra M quina Virtual.
en nuestro caso el Código M quina de
Construiremos un SIMULADOR para esa M quina y ese Código
Intermedio, de forma que hace las funciones de Hardware:
(*)
■
৺৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৽
৷
৷
Código
৷
৷
Objeto
৷
৷
Código
(P ó C) ৄৄ>ৄৄ■
Simulador
■ৄৄ>ৄৄ■ M quina
৷
৷৷
৷
৷
৷
╚৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶৶╝
Ser una MAQUINA P (código P sencillo) o una MAQUINA C (código
C, sublenguaje del C, m s complicado)
Así se asegura la TRANSPORTABILIDAD ( al tener un código
virtual ). Sólo tendremos que cambiar el simulador.
┌ৄৄৄৄৄৄৄৄৄৄৄৄৄৎ
┌ৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৎ
L. Fuente 1 ├ৄৄৄৄৄৎ
┌ৄৄৄৄৄৄৄৄৄৄৎ
┌ৄৄৄড়
Simulador 1
ৄৄৄৄৄৄৄৄৄৄৄৄৄ
ৄৄৄৄড় Lenguaje ├ৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄ
┌ৄৄৄৄড়Intermedio├ৄৄৄৄৎ
┌ৄৄৄৄৄৄৄৄৄৄৄৄৄৎ
ৄৄৄৄৄৄৄৄৄৄ
┌ৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৎ
L. Fuente 2 ├ৄৄৄৄৄ
ৄৄৄড়
Simulador 2
ৄৄৄৄৄৄৄৄৄৄৄৄৄ
.
. ৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄ
.
.
.
.
O sea, el proceso es:
Leng. Fuente -----> Código Intermedio ------> Cód. Ensamblador
Compil. de C
Optimizado
( BACKEND )
Ejemplo: si partimos de C, al usar las herramientas utilizamos
Código C, que es unsubconjunto del C, o una m quina P que
simularemos. Este subconjunto es de tal manera que es muy
similar a los ensambladores actuales. En la M quina C es m s
difícil de generar su código, pero est m s cerca de la
m quina real. La M quina P es m s simple, trabajando sólo
sobre pilas, no sobre registros, y est m s próxima a la
M quina Virtual.
Cada BACKEND debe conocer cada parte de la Mquina donde se
vaya a implementar:
┌ৄৄৄৄৄৄৄৄৄৄৄৄৄৎ
Sintaxis del
Código P
├ৄৄৄৄৄৎ
ৄৄৄৄৄৄৄৄৄৄৄৄৄ
┌ৄৄৄৄৄৄৄৄৄৎ
ৄৄ>ৄৄড় BACKEND ---->
┌ৄৄ>ৄৄড়
ৄৄৄৄৄৄৄৄৄ
┌ৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৎ
Definición de la
Arquitectura de ├ৄ
la M quina
ৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄৄ
Código
Ensamblador
En este caso, no nos ocuparemos de analizar el BACKEND del
Compilador, debido a sucomplejidad al tener que conocer la
arquitectura interna de la m quina.
1.2.- FRONT-END.
Crearemos cada uno de sus elementos, de forma que se
especifique la interrelación entre ellos y la información que
comparten.
Partes del FRONT-END:
a) SCANNER o ANALIZADOR LEXICO.
Trabaja directamente con el código de entrada.
Misión: trocear el código fuente en TOKENS...
Regístrate para leer el documento completo.