Está en la página 1de 18

Los PIC son una familia de microcontroladores tipo RISC fabricados por Microchip

Technology Inc. y derivados del PIC1650, originalmente desarrollado por la divisi�n


de microelectr�nica de General Instrument.

El nombre actual no es un acr�nimo. En realidad, el nombre completo es PICmicro,


aunque generalmente se utiliza como Peripheral Interface Controller (controlador de
interfaz perif�rico).

El PIC original se dise�� para ser usado con la nueva CPU de 16 bits CP16000.
Siendo en general una buena CPU, �sta ten�a malas prestaciones de entrada y salida,
y el PIC de 8 bits se desarroll� en 1975 para mejorar el rendimiento del sistema
quitando peso de entrada/salida a la CPU. El PIC utilizaba microc�digo simple
almacenado en ROM para realizar estas tareas; y aunque el t�rmino no se usaba por
aquel entonces, se trata de un dise�o RISC que ejecuta una instrucci�n cada 4
ciclos del oscilador.

En 1985 la divisi�n de microelectr�nica de General Instrument se separa como


compa��a independiente que es incorporada como filial (el 14 de diciembre de 1987
cambia el nombre a Microchip Technology y en 1989 es adquirida por un grupo de
inversores) y el nuevo propietario cancel� casi todos los desarrollos, que para
esas fechas la mayor�a estaban obsoletos. El PIC, sin embargo, se mejor� con EPROM
para conseguir un controlador de canal programable. Hoy en d�a multitud de PIC
vienen con varios perif�ricos incluidos (m�dulos de comunicaci�n serie, UART,
n�cleos de control de motores, etc.) y con memoria de programa desde 512 a 32 000
palabras (una palabra corresponde a una instrucci�n en lenguaje ensamblador, y
puede ser de 12, 14, 16 o 32 bits, dependiendo de la familia espec�fica de
PICmicro).

�ndice
1 Juego de instrucciones y entorno de programaci�n
2 Arquitectura central
2.1 Espacio de datos (RAM)
2.2 Tama�o de palabra
3 Programaci�n del PIC
3.1 Programadores
3.2 Depuradores integrados
3.3 Emuladores
4 Caracter�sticas
5 Variaciones del PIC
5.1 PIC modernos
5.2 Clones del PIC
5.3 PIC inal�mbricos
5.4 PIC para procesado de se�al (dsPIC)
5.5 PIC de 32 bits (PIC32)
6 PIC m�s com�nmente usados
7 PIC en Internet
8 Monitorizaci�n y control v�a Internet
9 Referencias
10 Enlaces externos
Juego de instrucciones y entorno de programaci�n
El PIC usa un juego de instrucciones, cuyo n�mero puede variar desde 35 para PIC de
gama baja a 70 para los de gama alta. Las instrucciones se clasifican entre las que
realizan operaciones entre el acumulador y una constante, entre el acumulador y una
posici�n de memoria, instrucciones de condicionamiento y de salto/retorno,
implementaci�n de interrupciones y una para pasar a modo de bajo consumo llamada
sleep.

Microchip proporciona un entorno de desarrollo freeware llamado MPLAB que incluye


un simulador software y un ensamblador. Otras empresas desarrollan compiladores C y
BASIC. Microchip tambi�n vende compiladores para los PIC de gama alta ("C18" para
la serie F18 y "C30" para los dsPIC) y se puede descargar una edici�n para
estudiantes del C18 que inhabilita algunas opciones despu�s de un tiempo de
evaluaci�n.

Para el lenguaje de programaci�n Pascal existe un compilador de c�digo abierto,


JAL, lo mismo que PicForth para el lenguaje Forth. GPUTILS es una colecci�n de
herramientas distribuidas bajo licencia GPL que incluye ensamblador y enlazador, y
funciona en Linux, MacOS y Microsoft Windows. GPSIM es otra herramienta libre que
permite simular diversos dispositivos hardware conectados al PIC.

Uno de los m�s modernos y completos compiladores para lenguaje C es [mikroC], que
es un ambiente de desarrollo con editor de texto, bibliotecas con m�ltiples
funciones para todos los m�dulos y herramientas incorporadas para facilitar
enormemente el proceso de programaci�n.

Arquitectura central
La arquitectura del PIC es sumamente minimalista. Est� caracterizada por las
siguientes prestaciones:

�rea de c�digo y de datos separadas (Arquitectura Harvard).


Un reducido n�mero de instrucciones de longitud fija.
Implementa segmentaci�n de tal modo que la mayor�a de instrucciones duran 1 tiempo
de instrucci�n (o 4 tiempos de reloj). Puede haber instrucciones de dos tiempos de
instrucci�n (saltos, llamadas y retornos de subrutinas y otras) o inclusive con m�s
tiempo de instrucci�n en PIC de gama alta. Esto implica que el rendimiento real de
instrucciones por segundo del procesador es de al menos 1/4 de la frecuencia del
oscilador.
Un solo acumulador (W), cuyo uso (como operador de origen) es impl�cito (no est�
especificado en la instrucci�n).
Todas las posiciones de la RAM funcionan como registros de origen y/o de destino de
operaciones matem�ticas y otras funciones.1?
Una pila de hardware para almacenar instrucciones de regreso de funciones.
Una relativamente peque�a cantidad de espacio de datos direccionable (t�picamente,
256 bytes), extensible a trav�s de manipulaci�n de bancos de memoria.
El espacio de datos est� relacionado con el CPU, puertos, y los registros de los
perif�ricos.
El contador de programa est� tambi�n relacionado dentro del espacio de datos, y es
posible escribir en �l (permitiendo saltos indirectos).
A diferencia de la mayor�a de otros CPU, no hay distinci�n entre los espacios de
memoria y los espacios de registros, ya que la RAM cumple ambas funciones, y esta
es normalmente referida como "archivo de registros" o simplemente, registros.

Espacio de datos (RAM)


Los microcontroladores PIC tienen una serie de registros que funcionan como una RAM
de prop�sito general. Los registros de prop�sito espec�fico para los recursos de
hardware disponibles dentro del propio chip tambi�n est�n direccionados en la RAM.
La direccionabilidad de la memoria var�a dependiendo de la l�nea de dispositivos, y
todos los dispositivos PIC tienen alg�n tipo de mecanismo de manipulaci�n de bancos
de memoria que pueden ser usados para acceder memoria externa o adicional. Las
series m�s recientes de dispositivos disponen de funciones que pueden cubrir todo
el espacio direccionable, independientemente del banco de memoria seleccionado. En
los dispositivos anteriores, esto deb�a lograrse mediante el uso del acumulador.

Para implementar direccionamiento indirecto, se usa un registro de "selecci�n de


registro de archivo" (FSR) y uno de "registro indirecto" (INDF): Un n�mero de
registro es escrito en el FSR, haciendo que las lecturas o escrituras al INDF ser�n
realmente hacia o desde el registro apuntado por el FSR. Los dispositivos m�s
recientes extienden este concepto con post y preincrementos/decrementos para mayor
eficiencia al acceder secuencialmente a la informaci�n almacenada. Esto permite que
se pueda tratar al FSR como un puntero de pila.

La memoria de datos externa no es directamente direccionable excepto en algunos


microcontroladores PIC 18 de gran cantidad de pines.

Tama�o de palabra
El tama�o de palabra de los microcontroladores PIC es fuente de muchas confusiones.
Todos los PIC (excepto los dsPIC) manejan datos en trozos de 8 bits, con lo que se
deber�an llamar microcontroladores de 8 bits. Pero a diferencia de la mayor�a de
las CPU, el PIC usa arquitectura Harvard, por lo que el tama�o de las instrucciones
puede ser distinto del de la palabra de datos. De hecho, las diferentes familias de
PIC usan tama�os de instrucci�n distintos, lo que hace dif�cil comparar el tama�o
del c�digo del PIC con el de otros microcontroladores. Por ejemplo, un
microcontrolador tiene 6144 bytes de memoria de programa: para un PIC de 12 bits
esto significa 4096 palabras y para uno de 16 bits, 3072 palabras.

Programaci�n del PIC


Para transferir el c�digo de un ordenador al PIC normalmente se usa un dispositivo
llamado programador. La mayor�a de PIC que Microchip distribuye hoy en d�a
incorporan ICSP (In Circuit Serial Programming, programaci�n serie incorporada) o
LVP (Low Voltage Programming, programaci�n a bajo voltaje), lo que permite
programar el PIC directamente en el circuito destino. Para la ICSP se usan los
pines RB6 y RB7 (En algunos modelos pueden usarse otros pines como el GP0 y GP1 o
el RA0 y RA1) como reloj y datos y el MCLR para activar el modo programaci�n
aplicando un voltaje de 13 voltios. Existen muchos programadores de PIC, desde los
m�s simples que dejan al software los detalles de comunicaciones, a los m�s
complejos, que pueden verificar el dispositivo a diversas tensiones de alimentaci�n
e implementan en hardware casi todas las funcionalidades. Muchos de estos
programadores complejos incluyen ellos mismos PIC preprogramados como interfaz para
enviar las �rdenes al PIC que se desea programar. Uno de los programadores m�s
simples es el TE20, que utiliza la l�nea TX del puerto RS-232 como alimentaci�n y
las l�neas DTR y CTS para mandar o recibir datos cuando el microcontrolador est� en
modo programaci�n. El software de programaci�n puede ser el ICprog, muy com�n entre
la gente que utiliza este tipo de microcontroladores. Entornos de programaci�n
basados en int�rpretes BASIC ponen al alcance de cualquiera proyectos que
parecieran ser ambiciosos.

Se pueden obtener directamente de Microchip muchos programadores/depuradores


(octubre de 2005):

Programadores
PICStart Plus (puerto serie y USB)
Promate II (puerto serie)
MPLAB PM3 (puerto serie y USB)
ICD2 (puerto serie y USB)
ICD3 (USB)
PICKit 1 (USB)
IC-Prog 1.06B
PICAT 1.25 (puerto USB2.0 para PIC y Atmel)
WinPic 800 (puerto paralelo, serie y USB)
PICKit 2 (USB)
PICKit 3 (USB)
Terusb1.0
Eclipse (PIC y AVR. USB)
MasterProg (USB)
Depuradores integrados
ICD (Serie)
ICD2 (Serie o full speed USB - 2 Mbits/s)
ICD3 (High speed USB - 480 Mbits/s)
Emuladores
Proteus - ISIS
ICE2000 (puerto paralelo, convertidor a USB disponible)
ICE4000 (USB)
PIC EMU
ISEC
PIC CDlite
PIC Simulator
Crocodrile Clips
Caracter�sticas
Los PIC actuales vienen con una amplia gama de mejoras hardware incorporadas:

N�cleos de CPU de 8/16 bits con Arquitectura Harvard modificada


Memoria Flash y ROM disponible desde 256 bytes a 256 kilobytes
Puertos de entrada/salida (t�picamente 0 a 5.5 voltios)
Temporizadores de 8/16/32 bits
Tecnolog�a Nanowatt para modos de control de energ�a
Perif�ricos serie s�ncronos y as�ncronos: USART, AUSART, EUSART
Conversores anal�gico/digital de 8-10-12 bits
Comparadores de tensi�n
M�dulos de captura y comparaci�n PWM
Controladores LCD
Perif�rico MSSP para comunicaciones I�C, SPI, y I�S
Memoria EEPROM interna con duraci�n de hasta un mill�n de ciclos de
lectura/escritura
Perif�ricos de control de motores
Soporte de interfaz USB
Soporte de controlador Ethernet
Soporte de controlador CAN
Soporte de controlador LIN
Soporte de controlador Irda
Variaciones del PIC
PIC modernos
Los viejos PIC con memoria PROM o EPROM se est�n renovando gradualmente por chips
con memoria Flash. As� mismo, el juego de instrucciones original de 12 bits del
PIC1650 y sus descendientes directos ha sido suplantado por juegos de instrucciones
de 14 y 16 bits. Microchip todav�a vende versiones PROM y EPROM de la mayor�a de
los PIC para soporte de aplicaciones antiguas o grandes pedidos.

Se pueden considerar tres grandes gamas de MCU PIC en la actualidad: Los b�sicos
(Linebase), los de medio rango (Mid Range) y los de alto desempe�o (high
performance). Los PIC18 son considerandos de alto desempe�o y tienen entre sus
miembros a PIC con m�dulos de comunicaci�n y protocolos avanzados (USB, Ethernet,
Zigbee por ejemplo).

Clones del PIC


Por todos lados surgen compa��as que ofrecen versiones del PIC m�s baratas o
mejoradas. La mayor�a suelen desaparecer r�pidamente. Una de ellas que va
perdurando es Ubicom (antiguamente Scenix) que vende clones del PIC que funcionan
mucho m�s r�pido que el original. OpenCores tiene un n�cleo del PIC16F84 escrito en
Verilog.

PIC inal�mbricos
El microcontrolador rfPIC integra todas las prestaciones del PICmicro de Microchip
con la capacidad de comunicaci�n inal�mbrica UHF para aplicaciones RF de baja
potencia. Estos dispositivos ofrecen un dise�o muy comprimido para ajustarse a los
cada vez m�s demandados requerimientos de miniaturizaci�n en aparatos electr�nicos.
Aun as�, no parecen tener mucha salida en el mercado.

PIC para procesado de se�al (dsPIC)


Los dsPIC son el pen�ltimo lanzamiento de Microchip, comenzando a producirlos a
gran escala a finales de 2004. Son los primeros PIC con bus de datos inherente de
16 bits. Incorporan todas las posibilidades de los anteriores PIC y a�aden varias
operaciones de DSP implementadas en hardware, como multiplicaci�n con suma de
acumulador (multiply-accumulate, o MAC), barrel shifting, bit reversion o
multiplicaci�n 16x16 bits.

PIC de 32 bits (PIC32)


Microchip Technology lanz� en noviembre de 2007 los nuevos microcontroladores de 32
bits con una velocidad de procesamiento de hasta 1.6 DMIPS/MHz con capacidad HOST
USB. Sus frecuencias de reloj pueden alcanzar los 80MHz a partir de cuarzos
est�ndares de 4 a 5MHz gracias a un PLL interno. Funcionan a 3.3V en sus puertos de
entrada y salida, aunque el fabricante indica que salvo en los pines con funci�n
anal�gica, en la mayor�a se toleran tensiones de hasta 5V. Disponen de una
arquitectura optimizada con alto grado de paralelismo y n�cleo de tipo M4K y una
elevada capacidad de memoria RAM y FLASH ROM. Todo ello hace que estos MCUs
permiten un elevado procesamiento de informaci�n.

PIC m�s com�nmente usados


PIC12C508/509 (Encapsulamiento reducido de 8 pines, oscilador interno, popular en
peque�os dise�os como el iPod remote).
PIC12F629/675
PIC16F84 (Considerado obsoleto, pero imposible de descartar y muy popular)
PIC16F84A (Actualizaci�n del anterior, la A indica que cuenta con m�dulos de
comparaci�n A/D, algunas versiones funcionan a 20 MHz, compatible 1:1)
PIC16F628A/648A (Opciones t�picas para migrar o actualizar desde dise�os antiguos
hechos con el PIC16F84A. Poseen m�dulos de comparaci�n A/D, Capture & Compare CCP
(PWM), comunicaci�n en serie USART y oscilador interno, entre otras mejoras)
PIC16F88 (Nuevo sustituto del PIC16F84A y superior al PIC16F648A con m�s memoria,
oscilador interno, USART, SSP, comparador y convertidor A/D. Muy popular).
PIC16F87X/87XA ("Hermanos mayores" del PIC16F84/84A, con cantidad de mejoras
incluidas en hardware. Bastante com�n en proyectos de aficionados).
PIC16F886/887 (Nuevo sustituto del 16F876A y 16F877A con la diferencia que ahora ya
incluye oscilador interno, considerados los m�s cercanos a la familia 18F).
PIC16F193x (Nueva gama media de PIC optimizado y con mucha RAM, ahora con 49
instrucciones frente al conjunto de 35 m�s com�n).
PIC18F452
PIC18F2455 Con manejo de puerto USB 2.0
PIC18F2520/4520 M�ltiples comparadores y convertidores A/D.
PIC18F2550/4550 Manejo de puertos USB 2.0 y muy vers�til. Por ello, es muy com�n en
el �mbito acad�mico.
dsPIC30F2010
dsPIC30F3014
dsPIC30F3011 (Ideales para control electr�nico de motores el�ctricos de inducci�n,
control sobre audio, etc).
PIC32 (Nueva gama de PIC de 32 bits, los m�s modernos son compatibles con USB 2.0).
PIC en Internet
Se puede encontrar extensa informaci�n y documentaci�n sobre PIC en Internet,
principalmente por dos motivos:[cita requerida] el primero, porque han sido muy
usados para romper los sistemas de seguridad de varios productos de consumo masivo
(televisi�n paga, PlayStation, etc), lo que atrae la atenci�n de los cracker; y
segundo, porque el PIC16C84 fue uno de los primeros microcontroladores f�cilmente
reprogramables para aficionados. Hay muchos foros y listas de correo dedicados al
PIC, en los que un usuario puede proponer sus dudas y recibir respuestas.

Monitorizaci�n y control v�a Internet


Con estos se pueden desarrollar sistemas sistemas SCADA, para adquirir y enviar
datos al puerto serial de un computador utilizando, por ejemplo, transmisi�n UART y
el protocolo RS-232, o implementando el protocolo TCP/IP directamente para
construir un sistema completamente embebido.2?

Referencias
Hoja de datos de un 16F84 (pdf), definici�n de instrucciones de lenguaje
ensamblador de PIC16 e informaci�n sobre la RAM y su direccionabilidad.
PIC wifi projects
Enlaces externos
Wikimedia Commons alberga una categor�a multimedia sobre Microcontrolador PIC.
Sitio web oficial (en ingl�s)
Tutorial de programaci�n de PIC en Ensamblador en la Asociaci�n de Rob�tica y
Dom�tica de Espa�a.
www.locxtronic.com - Tutorial for PIC Programming In BASIC (en ingl�s).
YaPIDE Entorno de desarrollo y simulador para el PIC16F628 liberado bajo licencia
GPL-2
PicForth
Grupo de discusi�n sobre el PIC
SDCC Small Device C Compiler, an Open Source compiler for microcontrollers, PIC 16x
and 18x support is a WIP.
PIC Portal with huge Project database (en ingl�s).
Ensamblador
Ir a la navegaci�nIr a la b�squeda
Para otros usos de este t�rmino, v�ase Ensamblador (desambiguaci�n).
Tambi�n ver: lenguaje ensamblador
Commons-emblem-question book orange.svg
Este art�culo o secci�n necesita referencias que aparezcan en una publicaci�n
acreditada.
Este aviso fue puesto el 15 de octubre de 2015.
El t�rmino ensamblador (del ingl�s assembler) se refiere a un tipo de programa
inform�tico que se encarga de traducir un fichero fuente escrito en un lenguaje
ensamblador, a un fichero objeto que contiene c�digo m�quina, ejecutable
directamente por el microprocesador.

Funcionamiento
El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de
los c�digos uno a uno nemot�cnicos que aparecen por su c�digo de operaci�n
correspondiente en sistema binario para la plataforma que se eligi� como destino en
las opciones espec�ficas del ensamblador.

Tipos de ensambladores
Art�culo principal: Ensamblador de alto nivel
Se puede distinguir entre dos tipos de ensambladores:

Ensambladores b�sicos. Son de muy bajo nivel, y su tarea consiste b�sicamente en


ofrecer nombres simb�licos a las distintas instrucciones, par�metros y cosas tales
como los modos.
Ensambladores modulares de 32 bits o de alto nivel. Son ensambladores que
aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits,
muchos de ellos teniendo compatibilidad hacia atr�s pudiendo trabajar con programas
con estructuras de 16 bits. Adem�s de realizar la misma tarea que los anteriores,
permitiendo tambi�n el uso de macros, permiten utilizar estructuras de programaci�n
m�s complejas propias de los lenguajes de alto nivel.
V�ase tambi�n
Lenguaje ensamblador
Lenguaje ensamblador x86
Flat assembler
GNU Assembler
Microsoft Macro Assembler
RosASM
A86 y A386 assemblers
Turbo Assembler
GNU toolchain
Ensamblador
Ir a la navegaci�nIr a la b�squeda
Para otros usos de este t�rmino, v�ase Ensamblador (desambiguaci�n).
Tambi�n ver: lenguaje ensamblador
Commons-emblem-question book orange.svg
Este art�culo o secci�n necesita referencias que aparezcan en una publicaci�n
acreditada.
Este aviso fue puesto el 15 de octubre de 2015.
El t�rmino ensamblador (del ingl�s assembler) se refiere a un tipo de programa
inform�tico que se encarga de traducir un fichero fuente escrito en un lenguaje
ensamblador, a un fichero objeto que contiene c�digo m�quina, ejecutable
directamente por el microprocesador.

Funcionamiento
El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de
los c�digos uno a uno nemot�cnicos que aparecen por su c�digo de operaci�n
correspondiente en sistema binario para la plataforma que se eligi� como destino en
las opciones espec�ficas del ensamblador.

Tipos de ensambladores
Art�culo principal: Ensamblador de alto nivel
Se puede distinguir entre dos tipos de ensambladores:

Ensambladores b�sicos. Son de muy bajo nivel, y su tarea consiste b�sicamente en


ofrecer nombres simb�licos a las distintas instrucciones, par�metros y cosas tales
como los modos.
Ensambladores modulares de 32 bits o de alto nivel. Son ensambladores que
aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits,
muchos de ellos teniendo compatibilidad hacia atr�s pudiendo trabajar con programas
con estructuras de 16 bits. Adem�s de realizar la misma tarea que los anteriores,
permitiendo tambi�n el uso de macros, permiten utilizar estructuras de programaci�n
m�s complejas propias de los lenguajes de alto nivel.
V�ase tambi�n
Lenguaje ensamblador
Lenguaje ensamblador x86
Flat assembler
GNU Assembler
Microsoft Macro Assembler
RosASM
A86 y A386 assemblers
Turbo Assembler
GNU toolchain
Turbo BASIC
Ir a la navegaci�nIr a la b�squeda
Este art�culo es sobre el software para MS-DOS; para el lenguaje de los
microcomputadores Atari de 8 bits, v�ase Turbo-BASIC XL.
Turbo BASIC
Turbo Basic ver. 1.1 screenshot.png
Desarrollador(es)
Borland
Informaci�n general
Apareci� en 1987
Influido por QuickBASIC
Ha influido a PowerBASIC
Sistema operativo MS-DOS
Licencia Software comercial propietario
[editar datos en Wikidata]
Turbo Basic es un compilador de BASIC desarrollado por Borland en 1987. Se
caracteriza por tener funciones gr�ficas. Fue uno de los �ltimos BASIC antes de la
aparici�n de Visual Basic. Tiene la caracter�stica de ser compatible con el
QuickBASIC de Microsoft, hasta el punto de que un libro de referencia del Turbo
Basic se puede usar perfectamente para programar en QuickBasic.

El compilador fue creado por Bob Zale, a quien Borland compr� los derechos. Cuando
Borland decidi� abandonar la l�nea de Turbo BASIC, Zale compr� nuevamente los
derechos para continuarlo mejorando y comercializarlo bajo el nombre de PowerBASIC
a partir de 1989.1?2?

�ndice
1 Ejemplo de c�digo
2 Referencias
3 V�ase tambi�n
4 Enlaces externos
Ejemplo de c�digo
INPUT "Escribe tu nombre: ", N$
PRINT "Hola "; N$
DO
S$ = ""
INPUT "Cuantas estrellas quieres dibujar"; S
FOR I = 1 TO S
S$ = S$ + "*"
NEXT I
PRINT S$
DO
INPUT "Mas estrellas (S/N)"; Q$
LOOP WHILE LEN(Q$) = 0
Q$ = LEFT$(Q$, 1)
LOOP WHILE (Q$ = "S") OR (Q$ = "s")
PRINT "Hasta luego, "; N$
Quick BASIC
(Redirigido desde �QuickBASIC�)
Ir a la navegaci�nIr a la b�squeda
No debe confundirse con QBASIC.
Quick BASIC
Desarrollador(es)
Microsoft
http://www.microsoft.de/
Informaci�n general
Apareci� en 1985
Influido por BASICA
Ha influido a QBasic, Turbo BASIC
Sistema operativo MS-DOS y Mac OS
Licencia Software comercial propietario
[editar datos en Wikidata]
Microsoft QuickBASIC (frecuentemente abreviado, correctamente, como QB, o
incorrectamente, como QBasic) es un descendiente del lenguaje de programaci�n BASIC
que Microsoft Corporation desarroll� para su uso con el sistema operativo MS-DOS,
junto a otros productos de programaci�n como QuickC o QuickPascal. Estaba
ligeramente basado en GW-BASIC pero a�ad�a tipos definidos por el usuario,
estructuras de programaci�n mejoradas, mejores gr�ficos y soporte de disco, y un
compilador adem�s del int�rprete. Microsoft sac� a la venta QuickBasic como un
paquete de desarrollo comercial.
�ndice
1 Historia
2 V�ase tambi�n
3 Referencias
4 Enlaces externos
Historia
Microsoft public� la primera versi�n de QuickBASIC el 18 de agosto de 1985, en un
�nico disquete de 5.25". QuickBASIC usaba un entorno de desarrollo integrado (IDE)
radicalmente diferente al que acompa�aba a las versiones anteriores de BASIC. Los
n�meros de l�nea ya no eran necesarios puesto que los usuarios pod�an insertar y
quitar l�neas directamente mediante un editor de textos en pantalla.

QuickBASIC inclu�a el "Compilador PC BASIC", que serv�a para compilar los programas
en ejecutables DOS. El editor pose�a un int�rprete con el cual el usuario pod�a
ejecutar un programa sin tener que cerrar el editor en absoluto, y pod�a usarse
para depurar un programa antes de crear el fichero ejecutable. Hab�a ciertas
peque�as diferencias entre el int�rprete y el compilador, por lo que programas que
ejecutaban perfectamente en el int�rprete no lo hac�an en su versi�n compilada o
incluso no llegaban a compilar.

En 1987 Borland lanz� el Turbo BASIC, un compilador compatible con el Quick BASIC,
comercializado bajo los nombres de First BASIC y PowerBASIC a partir de 1989.1?2?

La �ltima versi�n de QuickBASIC fue la 4.5 aparecida en 1988, aunque se sigui�


desarrollando como el Professional Development System (PDS), cuya �ltima versi�n
fue la 7.1 en octubre de 1990. A la versi�n PDS tambi�n se le llam� a veces
QuickBASIC eXtended (QBX). El sucesor de QuickBASIC y PDS fue Visual Basic 1.0, que
sali� en 1991 en dos versiones incompatibles entre s�, una para DOS y otra para
Windows. Las versiones posteriores de Visual Basic no inclu�an versiones para DOS,
ya que Microsoft quer�a que los desarrolladores se concentraran en las aplicaciones
para Windows.

A partir de MS-DOS 5, las versiones de DOS inclu�an un sustituto de GW-BASIC basado


en QuickBASIC 4.5. Ese sustituto se llamaba QBASIC, desarrollado en 1991. En
comparaci�n con QuickBASIC, QBASIC est� limitado ya que le faltan unas pocas
funciones, s�lo puede manejar programas de un tama�o limitado, no tiene soporte
para m�dulos separados, y s�lo es int�rprete. Al carecer de compilador, no puede
producir directamente programas ejecutables, aunque los programas desarrollados con
QBASIC pueden ser compilados mediante QuickBasic 4.5, PDS 7.1 o VBDOS 1.0, si se
dispone de alguno de ellos.

Pese a que el software fue descontinuado por Microsoft, han surgido re-
implementaciones del lenguaje bajo licencias GNU, como FreeBASIC o QB64.

V�ase tambi�n
En inform�tica, un compilador es un tipo de traductor que transforma un programa
entero de un lenguaje de programaci�n (llamado c�digo fuente) a otro.1? Usualmente
el lenguaje objetivo es c�digo m�quina, aunque tambi�n puede ser traducido a un
c�digo intermedio (bytecode) o a texto. A diferencia de los int�rpretes, los
compiladores re�nen diversos elementos o fragmentos en una misma unidad (un
programa ejecutable o una librer�a), que puede ser almacenada y reutilizada. Este
proceso de traducci�n se conoce como compilaci�n.2?

La construcci�n de un compilador involucra la divisi�n del proceso en una serie de


fases que variar� con su complejidad. Generalmente estas fases se agrupan en dos
tareas: el an�lisis del programa fuente y la s�ntesis del programa objeto.
An�lisis: se trata de la comprobaci�n de la correcci�n del programa fuente, seg�n
la definici�n del lenguaje en t�rminos de teor�a de lenguajes formales. Incluye las
fases correspondientes al an�lisis l�xico (que consiste en la descomposici�n del
programa fuente en componentes l�xicos), an�lisis sint�ctico (agrupaci�n de los
componentes l�xicos en frases gramaticales ) y an�lisis sem�ntico (comprobaci�n de
la validez sem�ntica de las sentencias aceptadas en la fase de an�lisis
sint�ctico).
S�ntesis: su objetivo es la generaci�n de la salida expresada en el lenguaje objeto
y suele estar formado por una o varias combinaciones de fases de generaci�n de
c�digo (normalmente se trata de c�digo intermedio o de c�digo objeto) y de
optimizaci�n de c�digo (en las que se busca obtener un programa objetivo lo m�s
eficiente posible, seg�n su complejidad computacional o complejidad de Kolmog�rov:
tiempo de ejecuci�n, espacio durante ejecuci�n, espacio para ser almacenado fuera
de ejecuci�n, etc).
Alternativamente, las fases descritas para las tareas de an�lisis y s�ntesis se
pueden agrupar en:

Analizador o front-end: es la parte que analiza el c�digo fuente, comprueba su


validez, genera el �rbol de derivaci�n y rellena los valores de la tabla de
s�mbolos. Esta parte suele ser independiente de la plataforma o sistema para el
cual se vaya a compilar, y est� compuesta por las fases comprendidas entre el
an�lisis l�xico y la generaci�n de c�digo intermedio.
Generador o back-end: es la parte que genera el c�digo m�quina, espec�fico de una
plataforma, a partir de los resultados de la fase de an�lisis, realizada por este
generador.
Esta divisi�n permite que el mismo generador se utilice para crear el c�digo
m�quina de varios lenguajes de programaci�n distintos y que el mismo analizador que
sirve para examinar el c�digo fuente de un lenguaje de programaci�n concreto sirva
para producir c�digo m�quina en varias plataformas. Suele incluir la generaci�n y
optimizaci�n del c�digo dependiente de la m�quina.

�ndice
1 Historia
2 Tipos de compiladores
3 Proceso de compilaci�n
4 Etapas del proceso
4.1 Fase de an�lisis
4.1.1 An�lisis l�xico
4.1.2 An�lisis sint�ctico
4.1.3 An�lisis sem�ntico
4.2 Fase de s�ntesis
4.2.1 Generaci�n de c�digo intermedio
4.3 Optimizaci�n de c�digo
5 Estructura de datos principales
5.1 Componentes l�xicos o t�kenes
5.2 �rbol sint�ctico
5.3 Tabla de s�mbolos
5.4 Tabla de literales
5.5 C�digo intermedio
5.6 Archivos temporales
6 V�ase tambi�n
7 Referencias
8 Enlaces externos
Historia
Art�culo principal: Historia de la construcci�n de los compiladores
En 1946 se desarroll� la primera computadora digital. En un principio, estas
m�quinas ejecutaban instrucciones consistentes en c�digos num�ricos que se�alaban a
los circuitos de la m�quina los estados correspondientes a cada operaci�n, lo que
se denomin� lenguaje m�quina.

Pronto los primeros usuarios de estos ordenadores descubrieron la ventaja de


escribir sus programas mediante claves m�s f�ciles de recordar que esos c�digos; al
final, todas esas claves juntas se traduc�an manualmente a lenguaje m�quina. Estas
claves constituyen los llamados lenguajes ensambladores.

Pese a todo, el lenguaje ensamblador segu�a siendo el de una m�quina, pero m�s
f�cil de manejar. Los trabajos de investigaci�n se orientaron hacia la creaci�n de
un lenguaje que expresara las distintas acciones a realizar de una manera lo m�s
sencilla posible para una persona. El primer compilador fue escrito por Grace
Hopper, en 1952 para el lenguaje de programaci�n A-0. En 1950 John Backus dirigi�
una investigaci�n en IBM sobre un lenguaje algebraico. En 1954 se empez� a
desarrollar un lenguaje que permit�a escribir f�rmulas matem�ticas de manera
traducible por un ordenador; le llamaron FORTRAN (FORmulae TRANslator). Fue el
primer lenguaje de alto nivel y se introdujo en 1957 para el uso de la computadora
IBM modelo 704.

Surgi� as� por primera vez el concepto de un traductor como un programa que
traduc�a 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.

El trabajo de realizar un compilador fue complicado de realizar. El primer


compilador de FORTRAN tard� 18 a�os-persona en realizarse y era muy sencillo. Este
desarrollo de FORTRAN estaba muy influenciado por la m�quina objeto en la que iba a
ser implementado. Como un ejemplo de ello tenemos el hecho de que los espacios en
blanco fuesen ignorados, debido a que el perif�rico que se utilizaba como entrada
de programas (una lectora de tarjetas perforadas) no contaba correctamente los
espacios en blanco.

El primer compilador autocontenido, es decir, capaz de compilar su propio c�digo


fuente fue el creado para Lisp por Hart y Levin en el MIT en 1962. Desde 1970 se ha
convertido en una pr�ctica com�n escribir el compilador en el mismo lenguaje que
este compila, aunque PASCAL y C han sido alternativas muy usadas.

Crear un compilador autocontenido genera un problema llamado bootstrapping, es


decir el primer compilador creado para un lenguaje tiene que o bien ser compilado
por un compilador escrito en otro lenguaje o bien compilado al ejecutar el
compilador en un int�rprete.

Tipos de compiladores
Esta taxonom�a de los tipos de compiladores no es excluyente, por lo que puede
haber compiladores que se adscriban a varias categor�as:

Compiladores cruzados: generan c�digo para un sistema distinto del que est�n
funcionando.
Compiladores optimizadores: realizan cambios en el c�digo para mejorar su
eficiencia, pero manteniendo la funcionalidad del programa original.
Compiladores de una sola pasada: generan el c�digo m�quina a partir de una �nica
lectura del c�digo fuente.
Compiladores de varias pasadas: necesitan leer el c�digo fuente varias veces antes
de poder producir el c�digo m�quina.
Compiladores JIT (just in time): forman parte de un int�rprete y compilan partes
del c�digo seg�n se necesitan.
En las primeras �pocas de la inform�tica, los compiladores eran considerados un
software de los m�s complejos existentes.

Los primeros compiladores se realizaron program�ndolos directamente en lenguaje


m�quina o en ensamblador. Una vez que se dispone de un compilador, se pueden
escribir nuevas versiones del compilador (u otros compiladores distintos) en el
lenguaje que compila ese compilador.

Actualmente existen herramientas que facilitan la tarea de escribir compiladores o


int�rpretes inform�ticos. Estas herramientas permiten generar el esqueleto del
analizador sint�ctico a partir de una definici�n formal del lenguaje de partida,
especificada normalmente mediante una gram�tica formal y barata, dejando �nicamente
al programador del compilador la tarea de programar las acciones sem�nticas
asociadas.

Proceso de compilaci�n
Es el proceso por el cual se traducen las instrucciones escritas en un determinado
lenguaje de programaci�n a lenguaje m�quina. Adem�s de un traductor, se pueden
necesitar otros programas para crear un programa objeto ejecutable. Un programa
fuente se puede dividir en m�dulos almacenados en archivos distintos. La tarea de
reunir el programa fuente a menudo se conf�a a un programa distinto, llamado
preprocesador. El preprocesador tambi�n puede expandir abreviaturas, llamadas a
macros, a proposiciones del lenguaje fuente.

Normalmente la creaci�n de un programa ejecutable (un t�pico archivo .exe para


Windows o DOS) conlleva dos pasos. El primer paso se llama compilaci�n (propiamente
dicho) y traduce el c�digo fuente escrito en un lenguaje de programaci�n almacenado
en un archivo a c�digo en bajo nivel (normalmente en c�digo objeto, no directamente
a lenguaje m�quina). El segundo paso se llama enlazado en el cual se enlaza el
c�digo de bajo nivel generado de todos los ficheros y subprogramas que se han
mandado a compilar y se a�ade el c�digo de las funciones que hay en las bibliotecas
del compilador para que el ejecutable pueda comunicarse directamente con el sistema
operativo, traduciendo as� finalmente el c�digo objeto a c�digo m�quina, y
generando un m�dulo ejecutable.

Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase
de compilaci�n en archivos objetos (un t�pico.obj para Microsoft Windows, DOS o
para Unix); para enlazarlos en fases posteriores, o crear directamente el
ejecutable; con lo que la fase de compilaci�n se almacena solo temporalmente. Un
programa podr�a tener partes escritas en varios lenguajes (por ejemplo C, C++ y
Asm), que se podr�an compilar de forma independiente y luego enlazar juntas para
formar un �nico m�dulo ejecutable.

Etapas del proceso


El proceso de traducci�n se compone internamente de varias etapas o fases, que
realizan distintas operaciones l�gicas. Es �til pensar en estas fases como en
piezas separadas dentro del traductor, y pueden en realidad escribirse como
operaciones codificadas separadamente aunque en la pr�ctica a menudo se integren
juntas.

Fase de an�lisis
An�lisis l�xico
Art�culo principal: Analizador l�xico
El an�lisis l�xico constituye la primera fase, aqu� se lee el programa fuente de
izquierda a derecha y se agrupa en componentes l�xicos (t�kenes), que son
secuencias de caracteres que tienen un significado. Adem�s, todos los espacios en
blanco, l�neas en blanco, comentarios y dem�s informaci�n innecesaria se elimina
del programa fuente. Tambi�n se comprueba que los s�mbolos del lenguaje (palabras
clave, operadores, etc.) se han escrito correctamente.

Como la tarea que realiza el analizador l�xico es un caso especial de coincidencia


de patrones, se necesitan los m�todos de especificaci�n y reconocimiento de
patrones, se usan principalmente los aut�matas finitos que acepten expresiones
regulares. Sin embargo, un analizador l�xico tambi�n es la parte del traductor que
maneja la entrada del c�digo fuente, y puesto que esta entrada a menudo involucra
un importante gasto de tiempo, el analizador l�xico debe funcionar de manera tan
eficiente como sea posible.

An�lisis sint�ctico
Art�culo principal: Analizador sint�ctico
En esta fase los caracteres o componentes l�xicos se agrupan jer�rquicamente en
frases gramaticales que el compilador utiliza para sintetizar la salida. Se
comprueba si lo obtenido de la fase anterior es sint�cticamente correcto (obedece a
la gram�tica del lenguaje). Por lo general, las frases gramaticales del programa
fuente se representan mediante un �rbol de an�lisis sint�ctico.

La estructura jer�rquica de un programa normalmente se expresa utilizando reglas


recursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la
definici�n de expresiones:

Cualquier identificador es una expresi�n.


Cualquier n�mero es una expresi�n.
Si expresi�n1 y expresi�n2 son expresiones, entonces tambi�n lo son:
expresi�n1 + expresi�n2
expresi�n1 * expresi�n2
( expresi�n1 )
Las reglas 1 y 2 son reglas b�sicas (no recursivas), en tanto que la regla 3 define
expresiones en funci�n de operadores aplicados a otras expresiones.

La divisi�n entre an�lisis l�xico y an�lisis sint�ctico es algo arbitraria. Un


factor para determinar la divisi�n es si una construcci�n del lenguaje fuente es
inherentemente recursiva o no. Las construcciones l�xicas no requieren recursi�n,
mientras que las construcciones sint�cticas suelen requerirla. No se requiere
recursi�n para reconocer los identificadores, que suelen ser cadenas de letras y
d�gitos que comienzan con una letra. Normalmente, se reconocen los identificadores
por el simple examen del flujo de entrada, esperando hasta encontrar un car�cter
que no sea ni letra ni d�gito, y agrupando despu�s todas las letras y d�gitos
encontrados hasta ese punto en un componente l�xico llamado identificador. Por otra
parte, esta clase de an�lisis no es suficientemente poderoso para analizar
expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera apropiada
los par�ntesis de las expresiones, o las palabras begin y end en proposiciones sin
imponer alguna clase de estructura jer�rquica o de anidamiento a la entrada.

An�lisis sem�ntico
La fase de an�lisis sem�ntico revisa el programa fuente para tratar de encontrar
errores sem�nticos y re�ne la informaci�n sobre los tipos para la fase posterior de
generaci�n de c�digo. En ella se utiliza la estructura jer�rquica determinada por
la fase de an�lisis sint�ctico para identificar los operadores y operandos de
expresiones y proposiciones.

Un componente importante del an�lisis sem�ntico es la verificaci�n de tipos. Aqu�,


el compilador verifica si cada operador tiene operandos permitidos por la
especificaci�n del lenguaje fuente. Por ejemplo, las definiciones de muchos
lenguajes de programaci�n requieren que el compilador indique un error cada vez que
se use un n�mero real como �ndice de una matriz. Sin embargo, la especificaci�n del
lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un
operador aritm�tico binario se aplica a un n�mero entero y a un n�mero real.3?
Revisa que los arreglos tengan definido el tama�o correcto.

Fase de s�ntesis
Consiste en generar el c�digo objeto equivalente al programa fuente. Solo se genera
c�digo objeto cuando el programa fuente est� libre de errores de an�lisis, lo cual
no quiere decir que el programa se ejecute correctamente, ya que un programa puede
tener errores de concepto o expresiones mal calculadas. Por lo general el c�digo
objeto es c�digo de m�quina relocalizable o c�digo ensamblador. Las posiciones de
memoria se seleccionan para cada una de las variables usadas por el programa.
Despu�s, cada una de las instrucciones intermedias se traduce a una secuencia de
instrucciones de m�quina que ejecuta la misma tarea. Un aspecto decisivo es la
asignaci�n de variables a registros.

Generaci�n de c�digo intermedio


Despu�s de los an�lisis sint�ctico y sem�ntico, algunos compiladores generan una
representaci�n intermedia expl�cita del programa fuente. Se puede considerar esta
representaci�n intermedia como un programa para una m�quina abstracta. Esta
representaci�n intermedia debe tener dos propiedades importantes; debe ser f�cil de
producir y f�cil de traducir al programa objeto.

La representaci�n intermedia puede tener diversas formas. Existe una forma


intermedia llamada �c�digo de tres direcciones� que es como el lenguaje ensamblador
de una m�quina en la que cada posici�n de memoria puede actuar como un registro. El
c�digo de tres direcciones consiste en una secuencia de instrucciones, cada una de
las cuales tiene como m�ximo tres operandos. Esta representaci�n intermedia tiene
varias propiedades:

Primera: cada instrucci�n de tres direcciones tiene a lo sumo un operador, adem�s


de la asignaci�n, por tanto, cuando se generan estas instrucciones, el traductor
tiene que decidir el orden en que deben efectuarse las operaciones.
Segunda: el traductor debe generar un nombre temporal para guardar los valores
calculados por cada instrucci�n.
Tercera: algunas instrucciones de �tres direcciones� tienen menos de tres
operandos, por ejemplo, la asignaci�n.
Optimizaci�n de c�digo
Art�culo principal: Compilador optimizador
La fase de optimizaci�n de c�digo consiste en mejorar el c�digo intermedio, de modo
que resulte un c�digo m�quina m�s r�pido de ejecutar. Esta fase de la etapa de
s�ntesis es posible sobre todo si el traductor es un compilador (dif�cilmente un
int�rprete puede optimizar el c�digo objeto). Hay mucha variaci�n en la cantidad de
optimizaci�n de c�digo que ejecutan los distintos compiladores. En los que hacen
mucha optimizaci�n, llamados �compiladores optimizadores�, una parte significativa
del tiempo del compilador se ocupa en esta fase. Sin embargo, hay optimizaciones
sencillas que mejoran sensiblemente el tiempo de ejecuci�n del programa objeto sin
retardar demasiado la compilaci�n.3?

Estructura de datos principales


La interacci�n entre los algoritmos utilizados por las fases del compilador y las
estructuras de datos que soportan estas fases es, naturalmente, muy fuerte. El
escritor del compilador se esfuerza por implementar estos algoritmos de una manera
tan eficaz como sea posible, sin aumentar demasiado la complejidad. De manera
ideal, un compilador deber�a poder compilar un programa en un tiempo proporcional
al tama�o del mismo.

Componentes l�xicos o t�kenes


Cuando un analizador l�xico re�ne los caracteres en un token, generalmente
representa el token de manera simb�lica, es decir, como un valor de un tipo de
datos enumerado que representa el conjunto de tokens del lenguaje fuente. En
ocasiones tambi�n es necesario mantener la cadena de caracteres misma u otra
informaci�n derivada de ella, tal como el nombre asociado con un token
identificador o el valor de un token de n�mero.

En la mayor�a de los lenguajes el analizador l�xico solo necesita generar un token


a la vez. En este caso se puede utilizar una variable global simple para mantener
la informaci�n del token. En otros casos (cuyo ejemplo m�s notable es FORTRAN),
puede ser necesario un arreglo (o vector) de t�kenes.

�rbol sint�ctico
Si el analizador sint�ctico genera un �rbol sint�ctico, por lo regular se construye
como una estructura est�ndar basada en un puntero que se asigna de manera din�mica
a medida que se efect�a el an�lisis sint�ctico. El �rbol entero puede entonces
conservarse como una variable simple que apunta al nodo ra�z. Cada nodo en la
estructura es un registro cuyos campos representan la informaci�n recolectada tanto
por el analizador sint�ctico como, posteriormente, por el analizador sem�ntico. Por
ejemplo, el tipo de datos de una expresi�n puede conservarse como un campo en el
nodo del �rbol sint�ctico para la expresi�n.

En ocasiones, para ahorrar espacio, estos campos se asignan de manera din�mica, o


se almacenan en otras estructuras de datos, tales como la tabla de s�mbolos, que
permiten una asignaci�n y desasignaci�n selectivas. En realidad, cada nodo del
�rbol sint�ctico por s� mismo puede requerir de atributos diferentes para ser
almacenado, de acuerdo con la clase de estructura del lenguaje que represente. En
este caso, cada nodo en el �rbol sint�ctico puede estar representado por un
registro variable, con cada clase de nodo conteniendo solamente la informaci�n
necesaria para ese caso.

Tabla de s�mbolos
Esta estructura de datos mantiene la informaci�n asociada con los identificadores:
funciones, variables, constantes y tipos de datos. La tabla de s�mbolos interact�a
con casi todas las fases del compilador: el analizador l�xico, el analizador
sint�ctico o el analizador sem�ntico pueden introducir identificadores dentro de la
tabla; el analizador sem�ntico agregar� tipos de datos y otra informaci�n; y las
fases de optimizaci�n y generaci�n de c�digo utilizar�n la informaci�n
proporcionada por la tabla de s�mbolos para efectuar selecciones apropiadas de
c�digo objeto.

Puesto que la tabla de s�mbolos tendr� solicitudes de acceso con tanta frecuencia,
las operaciones de inserci�n, eliminaci�n y acceso necesitan ser eficientes,
preferiblemente operaciones de tiempo constante. Una estructura de datos est�ndar
para este prop�sito es la tabla de dispersi�n o de c�lculo de direcci�n, aunque
tambi�n se pueden utilizar diversas estructuras de �rbol. En ocasiones se utilizan
varias tablas y se mantienen en una lista o pila.

Tabla de literales
La b�squeda y la inserci�n r�pida son esenciales tambi�n para la tabla de
literales, la cual almacena constantes y cadenas utilizadas en el programa. Sin
embargo, una tabla de literales necesita impedir las eliminaciones porque sus datos
se aplican globalmente al programa y una constante o cadena aparecer� solo una vez
en esta tabla. La tabla de literales es importante en la reducci�n del tama�o de un
programa en la memoria al permitir la reutilizaci�n de constantes y cadenas.
Tambi�n es necesaria para que el generador de c�digo construya direcciones
simb�licas para las literales y para introducir definiciones de datos en el archivo
de c�digo objeto.

C�digo intermedio
De acuerdo con la clase de c�digo intermedio (por ejemplo, c�digo de tres
direcciones o c�digo P) y de las clases de optimizaciones realizadas, este c�digo
puede conservarse como un arreglo de cadenas de texto, un archivo de texto temporal
o bien una lista de estructuras ligadas. En los compiladores que realizan
optimizaciones complejas debe ponerse particular atenci�n a la selecci�n de
representaciones que permitan una f�cil reorganizaci�n.

Generaci�n de c�digo intermedio


Despu�s de los an�lisis sint�ctico y sem�ntico, algunos compiladores generan una
representaci�n intermedia expl�cita del programa fuente. Se puede considerar esta
representaci�n intermedia como un programa para una m�quina abstracta. Esta
representaci�n intermedia debe tener dos propiedades importantes; debe ser f�cil de
producir y f�cil de traducir al programa objeto.

La representaci�n intermedia puede tener diversas formas. Existe una forma


intermedia llamada �c�digo de tres direcciones�, que es como el lenguaje
ensamblador para una m�quina en la que cada posici�n de memoria puede actuar como
un registro. El c�digo de tres direcciones consiste en una secuencia de
instrucciones, cada una de las cuales tiene como m�ximo tres operandos. El programa
fuente de (1) puede aparecer en c�digo de tres direcciones como

temp1 := entreal(60)
temp2 := id3 * temp1 ===> (2)
temp3 := id2 + temp2
id1 := temp3
Esta representaci�n intermedia tiene varias propiedades. Primera, cada instrucci�n
de tres direcciones tiene a lo sumo un operador, adem�s de la asignaci�n. Por
tanto, cuando se generan esas instrucciones el compilador tiene que decidir el
orden en que deben efectuarse, las operaciones; la multiplicaci�n precede a la
adici�n al programa fuente de. Segunda, el compilador debe generar un nombre
temporal para guardar los valores calculados por cada instrucci�n. Tercera, algunas
instrucciones de �tres direcciones� tienen menos de tres operadores, por ejemplo la
primera y la �ltima instrucciones de asignaci�n.

Optimizaci�n de C�digo
La fase de optimizaci�n de c�digo trata de mejorar el c�digo intermedio de modo que
resulte un c�digo de m�quina m�s r�pido de ejecutar. Algunas optimizaciones son
triviales. Por ejemplo, un algoritmo natural genera el c�digo intermedio (2)
utilizando una instrucci�n para cada operador de la representaci�n del �rbol
despu�s del an�lisis sem�ntico, aunque hay una forma mejor de realizar los mismos
c�lculos usando las dos instrucciones

temp1 := id3 * 60.0 ===> (3)


id1 := id2 + temp1
Este sencillo algoritmo no tiene nada de malo, puesto que el problema se puede
solucionar en la fase de optimizaci�n de c�digo. Esto es, el compilador puede
deducir que la conversi�n de 60 de entero a real se puede hacer de una vez por
todas en el momento de la compilaci�n, de modo que la operaci�n "entreal( )" se
puede eliminar. Adem�s, temp3 se usa solo una vez, para transmitir su valor a id1.
Entonces resulta seguro sustituir a id1 por temp3, a partir de lo cual la �ltima
proposici�n de (2) no se necesita y se obtiene el c�digo de (3).

Hay muchas variaciones en la cantidad de optimizaci�n de c�digo que ejecutan los


distintos compiladores. En lo que hacen mucha optimizaci�n llamados �compiladores
optimizadores�, una parte significativa del tiempo del compilador se ocupa en esta
fase. Sin embargo, hay optimizaciones sencillas que mejoran sensiblemente el tiempo
de ejecuci�n del programa objeto sin retardar demasiado la compilaci�n.

Archivos temporales
Al principio las computadoras no ten�an la suficiente memoria para guardar un
programa completo durante la compilaci�n. Este problema se resolvi� mediante el uso
de archivos temporales para mantener los productos de los pasos intermedios durante
la traducci�n o bien al compilar �al vuelo�, es decir, manteniendo solo la
informaci�n suficiente de las partes anteriores del programa fuente que permita
proceder a la traducci�n.

Las limitaciones de memoria son ahora un problema mucho menor, y es posible


requerir que una unidad de compilaci�n entera se mantenga en memoria, en especial
si se dispone de la compilaci�n por separado en el lenguaje. Con todo, los
compiladores ocasionalmente encuentran �til generar archivos intermedios durante
alguna de las etapas del procesamiento. Algo t�pico de estos es la necesidad de
direcciones de correcci�n hacia atr�s durante la generaci�n de c�digo.

V�ase tambi�n
BlueJ
Lenguaje de programaci�n
Proceso de traducci�n de programas
Lenguaje ensamblador
Ensamblador
Desensamblador
Decompilador
Int�rprete
Depurador
Lenguaje de alto nivel
Lenguaje de bajo nivel
Lenguaje de m�quina
Historia de la construcci�n de los compiladores
Libros Principles of Compiler Design, Compilers: Principles, Techniques, and Tools
Referencias
Clocksin, William (1997). Clause and effect. Springer-Verlag. p. 93. ISBN 978-3-
540-62971-9.
Laborda, Javier; Josep Galimany, Rosa Mar�a Pena, Antoni Gual (1985). �Software�.
Biblioteca pr�ctica de la computaci�n. Barcelona: Ediciones Oc�ano-�xito, S.A.
Aho, Alfred V.; Ravi Sethi, Jeffrey D. Ullman (2008). �Introducci�n a la
Compilaci�n�. Compiladores: Principios, t�cnicas y pr�cticas. M�xico: Addison
Wesley.
Enlaces externos
Wikcionario tiene definiciones y otra informaci�n sobre compilador.
Let's Build a Compiler. Tutorial de Jack W. Crenshaw sobre c�mo hacer un compilador
Java a tope: Traductores y Compiladores con Lex/Yacc, JFlex/Cup y JavaCC. Libro
b�sico sobre compiladores
Categor�as: CompiladoresProgramas de c�digo objeto
Men� de navegaci�n
No has accedidoDiscusi�nContribucionesCrear una
cuentaAccederArt�culoDiscusi�nLeerEditarVer historialBuscar
Buscar en Wikipedia
Portada
Portal de la comunidad
Actualidad
Cambios recientes
P�ginas nuevas
P�gina aleatoria
Ayuda
Donaciones
Notificar un error
En otros proyectos
Wikimedia Commons
Imprimir/exportar
Crear un libro
Descargar como PDF
Versi�n para imprimir
Herramientas
Lo que enlaza aqu�
Cambios en enlazadas
Subir archivo
P�ginas especiales
Enlace permanente
Informaci�n de la p�gina
Elemento de Wikidata
Citar esta p�gina

En otros idiomas
???????
English
??????
Bahasa Indonesia
Bahasa Melayu
Portugu�s
???????
????
??
77 m�s
Editar enlaces
Esta p�gina se edit� por �ltima vez el 9 jul 2019 a las 18:41.
El texto est� disponible bajo la Licencia Creative Commons Atribuci�n Compartir
Igual 3.0; pueden aplicarse cl�usulas adicionales. Al usar este sitio, usted acepta
nuestros t�rminos de uso y nuestra pol�tica de privacidad.
Wikipedia� es una marca registrada de la Fundaci�n Wikimedia, Inc., una
organizaci�n sin �nimo de lucro.