mplab

Upload: deyvis-gonzales-guevara

Post on 31-Oct-2015

84 views

Category:

Documents


0 download

TRANSCRIPT

MPLABMPLAB IDE

Desarrollador

Microchip Technology Inc.MPLAB

Informacin general

ltima versin estable8.8424 de febrero de 2012; hace 1 ao

GneroEnsamblador

Sistema operativoWindows

LicenciaSoftware propietario

En espaol?

MPLABes un editorIDEgratuito, destinado a productos de la marcaMicrochip. Este editor es modular, permite seleccionar los distintosmicrocontroladoressoportados, adems de permitir la grabacin de estoscircuitos integradosdirectamente al programador.Es un programa que corre bajoWindowsy como tal, presenta las clsicas barras de programa, de men, de herramientas de estado, etc. El ambiente MPLAB posee editor de texto, compilador y simulacin (no en tiempo real). Para comenzar un programa desde cero para luego grabarlo al C en MPLAB v7.XX los pasos a seguir son:1. Crear un nuevo archivo con extensin .ASM y nombre cualquiera2. Crear un Proyecto nuevo eligiendo un nombre y ubicacin3. Agregar el archivo .ASM como un SOURCE FILE4. Elegir el microcontrolador a utilizar desde SELECT DEVICE del men CONFIGUREUna vez realizado esto, se est en condiciones de empezar a escribir el programa respetando las directivas necesarias y la sintaxis para luego compilarlo y grabarlo en el PIC.ndice[ocultar] 1Directivas 2Compilacin del Programa y carga al PIC 3Vase tambin 4Enlaces externos

[editar]DirectivasLas directivas son palabras reservadas para indicarle al MPLAB que funciones debe configurar cuando compile nuestro programa. Las indispensables para la correcta compilacin del programa son:DirectivaDescripcinSintaxis

CBLOCKDefina un Bloque de Constantescblock []

#DEFINEDefina una Etiqueta de Substitucin de Textodefine []define [,...,]

DTDefina Tabla[] dt [,,...,][] dt [,,...]

ELSEEmpieza el bloque alternativo de un IFElse

ENDFin de bloque de programaEnd

ENDIFFin del bloque de condiciones ensambladasEndif

ENDMFin de la definicin de una MacroEndm

ENDWFin de un bucle de WhileEndw

EQUDefine una constante para el ensamblador equ

IFEmpieza unbloque de cdigocondicionalif

#INCLUDEIncluye Ficheros fuentes adiccionalesinclude |

LISTOpciones listadolist [,...,]

MACRODeclara la Definicin del Macro macro [,...,]

ORGPone el Origen del Programa org

WHILERealiza el bucle Mientras la Condicin es Verdaderawhile

[editar]Compilacin del Programa y carga al PIC

Programador Picstart Plus de Microchip.Una vez escrito y depurado el programa, se procede a la compilacin. Para esto, desde el men PROJECT se elige la opcin BUILD ALL (construir todo) que, si no existen errores, devolver un mensaje como BUILD SUCCESFULL. Los errores que muestra el compilador son del tipo sintcticos, es decir que si el programa "construido" llegara a tener un error, por ejemplo que esperase a que se ponga un bit en 0 y nunca pasase, se estar en un bucle infinito a pesar de que el compilador compilar perfectamente porque no hay error de sintaxis.Tambin existen mensajes y advertencias; los mensajes pueden ser, por ejemplo, que se est trabajando en un banco de memoria que no es el bank 0, etc. Las advertencias tienen un poco ms de peso, por ejemplo: el PIC seleccionado no es el mismo que esta definido en el programa, etc. En ambos casos, mensajes y advertencias, la compilacin termina satisfactoriamente pero hay que tener en cuenta siempre lo que nos dicen estos para prevenir errores.Terminada la compilacin el MPLAB nos genera un archivo de extensin.hexel cual es completamente entendible para el PIC. Es decir, solo resta grabarlo al PIC por medio de una interfaz como por ejemplo el programadorPicstart Plusde microchip. Una vez completado esto, se alimenta al mismo y el programa ya se estar ejecutando.

Entorno de desarrollo integradoUnentorno de desarrollo integrado, llamado tambinIDE(sigla en ingls deintegrated development environment), es unprograma informticocompuesto por un conjunto de herramientas deprogramacin. Puede dedicarse en exclusiva a un sololenguaje de programacino bien puede utilizarse para varios.

Dev C++, un entorno para el lenguaje de programacinC++.

WebDevStudio, un IDE en lnea para el lenguaje de programacinC/C++.Un IDE es un entorno de programacin que ha sido empaquetado como un programa de aplicacin; es decir, consiste en un editor de cdigo, un compilador, un depurador y un constructor deinterfaz grfica(GUI). Los IDEs pueden ser aplicaciones por s solas o pueden ser parte de aplicaciones existentes. El lenguajeVisual Basic, por ejemplo, puede ser usado dentro de las aplicaciones deMicrosoft Office, lo que hace posible escribir sentenciasVisual Basicen forma demacrosparaMicrosoft Word.Los IDE proveen un marco de trabajo amigable para la mayora de los lenguajes de programacin tales comoC++,PHP,Python,Java,C#,Delphi,Visual Basic, etc. En algunos lenguajes, un IDE puede funcionar como unsistema en tiempo de ejecucin, en donde se permite utilizar el lenguaje de programacin en forma interactiva, sin necesidad de trabajo orientado aarchivos de texto, como es el caso deSmalltalkuObjective-C.ndice[ocultar] 1Componentes 2Lenguajes 3Actitudes en diferentes plataformas computacionales 4Vase tambin 5Enlaces externos

[editar]Componentes Uneditor de texto. Uncompilador. Unintrprete. Undepurador. Uncliente. Posibilidad de ofrecer un sistema decontrol de versiones. Factibilidad para ayuda en la construccin deinterfaces grficas de usuario.[editar]LenguajesAlgunos entornos son compatibles con mltipleslenguajes de programacin, comoEclipseoNetBeans, ambos basados enJava; oMonoDevelop, basado enC#. Tambin puede incorporarse la funcionalidad para lenguajes alternativos mediante el uso deplugins. Por ejemplo, Eclipse y NetBeans tienen plugins paraC,C++,Ada,Perl,Python,RubyyPHP, entre otros.[editar]Actitudes en diferentes plataformas computacionalesMuchos de los programadores de Unix argumentan que las herramientas de la lnea de comandos POSIX constituyen un IDE, aunque con un estilo diferente de la interfaz y en el entorno Unix. Adems, muchos programadores de Unix utilizanEmacsoVim.En las distintas plataformas de Microsoft Windows, las herramientas de lnea de comando para el desarrollo rara vez se utilizan. En consecuencia, hay muchas soluciones comerciales y no comerciales; sin embargo cada uno tiene un diseo diferente que comnmente crean incompatibilidades. La mayora de los principales proveedores de compiladores para Windows siguen ofreciendo copias gratuitas de sus herramientas de lnea de comando.Adems las herramientas del software libre GNU (gcc, gdb) estn disponibles en muchas plataformas, incluyendo Windows.Algunos entornoslibres, como Code::Blocks, Eclipse, Lazarus, KDevelop y Netbeans, que a su vez se desarrollan utilizando un lenguaje multiplataforma (por ejemplo, Free Pascal o Java), se ejecutan en diversas plataformas, incluyendo Windows, GNU/Linux, y Mac OS X.

CompiladorCompilacin redirige aqu. Para otras acepciones, vaserecopilacin.

Diagrama a bloques de la operacin de un buen compilador.Uncompiladores unprograma informticoquetraduce un programaescrito en unlenguaje de programacina otro lenguaje de programacin, generando un programa equivalente que la mquina ser capaz de interpretar. Usualmente el segundo lenguaje eslenguaje de mquina, pero tambin puede ser un cdigo intermedio (bytecode), o simplemente texto. Este proceso de traduccin se conoce comocompilacin.1Un compilador es un programa que permite traducir elcdigo fuentede un programa enlenguaje de alto nivel, a otro lenguaje de nivel inferior (tpicamentelenguaje de mquina). De esta manera un programador puede disear un programa en un lenguaje mucho ms cercano a como piensa un ser humano, para luegocompilarloa un programa ms manejable por una computadora.ndice[ocultar] 1Partes de un compilador 2Historia 3Tipos de compiladores 4Proceso de compilacin 5Etapas del proceso 5.1Fase de anlisis 5.1.1Anlisis lxico 5.1.2Anlisis sintctico 5.1.3Anlisis semntico 5.2Fase de sntesis 5.2.1Generacin de cdigo intermedio 5.3Optimizacin de cdigo 6Estructura de datos principales 6.1Componentes lxicos o tokens 6.2rbol sintctico 6.3Tabla de smbolos 6.4Tabla de literales 6.5Cdigo intermedio 6.6Archivos temporales 7Vase tambin 8Referencias 9Enlaces externos

[editar]Partes de un compiladorLa construccin de un compilador involucra la divisin del proceso en una serie de fases que variar con su complejidad. Generalmente estas fases se agrupan en dos tareas: el anlisis del programa fuente y la sntesis del programa objeto. Anlisis: Se trata de la comprobacin de la correccin del programa fuente, e incluye las fases correspondientes alAnlisis lxico(que consiste en la descomposicin del programa fuente en componentes lxicos),Anlisis sintctico(agrupacin de los componentes lxicos en frases gramaticales ) yAnlisis semntico(comprobacin de la validez semntica de las sentencias aceptadas en la fase de Anlisis Sintctico). Sntesis: Su objetivo es la generacin de la salida expresada en ellenguaje objetoy suele estar formado por una o varias combinaciones de fases de Generacin de Cdigo (normalmente se trata de cdigo intermedio o de cdigo objeto) y de Optimizacin de Cdigo (en las que se busca obtener un cdigo lo ms eficiente posible).Alternativamente, las fases descritas para las tareas de anlisis y sntesis se pueden agrupar en Front-end y Back-end: Front-end: es la parte que analiza elcdigo fuente, comprueba su validez, genera elrbol de derivaciny rellena los valores de latabla de smbolos. 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 elAnlisis Lxicoy la Generacin de Cdigo Intermedio. Back-end: es la parte que genera el cdigo mquina, especfico de una plataforma, a partir de los resultados de la fase de anlisis, realizada por elFront End.Esta divisin permite que el mismoBack Endse utilice para generar elcdigo mquinade varioslenguajes de programacindistintos y que el mismoFront Endque sirve para analizar el cdigo fuente de unlenguaje de programacinconcreto sirva para generarcdigo mquinaen varias plataformas distintas. Suele incluir la generacin y optimizacin del cdigo dependiente de la mquina.El cdigo que genera elBack Endnormalmente no se puede ejecutar directamente, sino que necesita ser enlazado por un programaenlazador(linker)[editar]HistoriaEn 1946 se desarroll la primera computadora digital. En un principio, estas mquinas ejecutaban instrucciones consistentes en cdigos numricos que sealaban a los circuitos de la mquina los estados correspondientes a cada operacin, lo que se denominlenguaje mquina.Pronto los primeros usuarios de estos ordenadores descubrieron la ventaja de escribir sus programas mediante claves ms fciles de recordar que esos cdigos; al final, todas esas claves juntas se traducan manualmente a lenguaje mquina. Estas claves constituyen los llamados lenguajes ensambladores.Pese a todo, ellenguaje ensambladorsegua siendo el de una mquina, pero ms fcil de manejar. Los trabajos de investigacin se orientaron hacia la creacin de un lenguaje que expresara las distintas acciones a realizar de una manera lo ms sencilla posible para una persona. El primer compilador fue escrito porGrace Hopper, en 1952 para el lenguaje de programacin A-0. En 1950John Backusdirigi una investigacin en IBM sobre un lenguaje algebraico. En 1954 se empez a desarrollar un lenguaje que permita escribir frmulas matemticas 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 traduca 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 trmino compilador.La tarea de realizar un compilador no fue fcil. El primer compilador deFORTRANtard 18 aos-persona en realizarse y era muy sencillo. Este desarrollo de FORTRAN estaba muy influenciado por la mquina 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 perifrico 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 cdigo fuente fue el creado para Lisp por Hart y Levin en el MIT en 1962. Desde 1970 se ha convertido en una prctica comn 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 unintrprete.[editar]Tipos de compiladoresEsta taxonoma de los tipos de compiladores no es excluyente, por lo que puede haber compiladores que se adscriban a varias categoras: Compiladores cruzados: generan cdigo para un sistema distinto del que estn funcionando. Compiladores optimizadores: realizan cambios en el cdigo para mejorar su eficiencia, pero manteniendo la funcionalidad del programa original. Compiladores de una sola pasada: generan el cdigo mquina a partir de una nica lectura del cdigo fuente. Compiladores de varias pasadas: necesitan leer el cdigo fuente varias veces antes de poder producir el cdigo mquina. Compiladores JIT(Just In Time): forman parte de unintrpretey compilan partes del cdigo segn se necesitan.Pauta de creacin de un compilador: En las primeras pocas de lainformtica, elsoftwarede los compiladores era considerado como uno de los ms complejos existentes.Los primeros compiladores se realizaron programndolos directamente enlenguaje mquinao enensamblador. 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 intrpretesinformticos. Estas herramientas permiten generar el esqueleto delanalizador sintcticoa partir de una definicin formal dellenguaje de partida, especificada normalmente mediante unagramtica formaly barata, dejando nicamente al programador del compilador la tarea de programar las acciones semnticas asociadas.[editar]Proceso de compilacinEs el proceso por el cual se traducen las instrucciones escritas en un determinado lenguaje de programacin a lenguaje mquina. Adems de un traductor, se pueden necesitar otros programas para crear un programa objeto ejecutable. Un programa fuente se puede dividir en mdulos almacenados en archivos distintos. La tarea de reunir el programa fuente a menudo se confa a un programa distinto, llamadopreprocesador. El preprocesador tambin puede expandir abreviaturas, llamadas a macros, a proposiciones del lenguaje fuente.Normalmente la creacin de un programaejecutable(un tpico.exe paraMicrosoft WindowsoDOS) conlleva dos pasos. El primer paso se llama compilacin (propiamente dicho) y traduce el cdigo fuente escrito en unlenguaje de programacinalmacenado en un archivo a cdigo en bajo nivel (normalmente en cdigo objeto, no directamente a lenguaje mquina). El segundo paso se llamaenlazadoen el cual se enlaza el cdigo de bajo nivel generado de todos los ficheros y subprogramas que se han mandado compilar y se aade el cdigo de las funciones que hay en las bibliotecas del compilador para que el ejecutable pueda comunicarse directamente con el sistema operativo, traduciendo as finalmente elcdigo objetoacdigo mquina, y generando un mdulo ejecutable.Estos dos pasos se pueden hacer por separado, almacenando el resultado de la fase de compilacin en archivos objetos (un tpico.obj para Microsoft Windows, DOS o paraUnix); para enlazarlos en fases posteriores, o crear directamente el ejecutable; con lo que la fase de compilacin se almacena slo temporalmente. Un programa podra tener partes escritas en varios lenguajes (por ejemploC,C++yAsm), que se podran compilar de forma independiente y luego enlazar juntas para formar un nico mduloejecutable.[editar]Etapas del procesoEl proceso de traduccin se compone internamente de varias etapas o fases, que realizan distintas operaciones lgicas. 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 prctica a menudo se integren juntas.[editar]Fase de anlisis[editar]Anlisis lxicoArtculo principal:Analizador lxico.El anlisis lxico constituye la primera fase, aqu se lee el programa fuente de izquierda a derecha y se agrupa encomponentes lxicos(tokens), que son secuencias de caracteres que tienen un significado. Adems, todos los espacios en blanco, lneas en blanco, comentarios y dems informacin innecesaria se elimina del programa fuente. Tambin se comprueba que los smbolos del lenguaje (palabras clave,operadores, etc.) se han escrito correctamente.Como la tarea que realiza el analizador lxico es un caso especial de coincidencia de patrones, se necesitan los mtodos de especificacin y reconocimiento de patrones, se usan principalmente losautmatas finitosque aceptenexpresiones regulares. Sin embargo, un analizador lxico tambin es la parte del traductor que maneja la entrada del cdigo fuente, y puesto que esta entrada a menudo involucra un importante gasto de tiempo, el analizador lxico debe funcionar de manera tan eficiente como sea posible.[editar]Anlisis sintcticoArtculo principal:Analizador sintctico.En esta fase los caracteres o componentes lxicos se agrupan jerrquicamente en frases gramaticales que el compilador utiliza para sintetizar la salida. Se comprueba si lo obtenido de la fase anterior es sintcticamente correcto (obedece a la gramtica del lenguaje). Por lo general, las frases gramaticales del programa fuente se representan mediante unrbol de anlisis sintctico.La estructura jerrquica de un programa normalmente se expresa utilizando reglasrecursivas. Por ejemplo, se pueden dar las siguientes reglas como parte de la definicin de expresiones:1. Cualquieridentificadores una expresin.2. Cualquiernmeroes una expresin.3. Siexpresin1yexpresin2son expresiones, entonces tambin lo son: expresin1+expresin2 expresin1*expresin2 (expresin1)Las reglas 1 y 2 son reglas bsicas (no recursivas), en tanto que la regla 3 define expresiones en funcin de operadores aplicados a otras expresiones.La divisin entre anlisis lxico y anlisis sintctico es algo arbitraria. Un factor para determinar la divisin es si una construccin del lenguaje fuente es inherentemente recursiva o no. Las construcciones lxicas no requieren recursin, mientras que las construcciones sintcticas suelen requerirla. No se requiere recursin para reconocer los identificadores, que suelen ser cadenas de letras y dgitos que comienzan con una letra. Normalmente, se reconocen los identificadores por el simple examen del flujo de entrada, esperando hasta encontrar un carcter que no sea ni letra ni dgito, y agrupando despus todas las letras y dgitos encontrados hasta ese punto en un componente lxico llamadoidentificador. Por otra parte, esta clase de anlisis no es suficientemente poderoso para analizar expresiones o proposiciones. Por ejemplo, no podemos emparejar de manera apropiada los parntesis de las expresiones, o las palabrasbeginyenden proposiciones sin imponer alguna clase de estructura jerrquica o de anidamiento a la entrada.[editar]Anlisis semnticoLa fase de anlisis semntico revisa el programa fuente para tratar de encontrar errores semnticos y rene la informacin sobre los tipos para la fase posterior de generacin de cdigo. En ella se utiliza la estructura jerrquica determinada por la fase de anlisis sintctico para identificar los operadores y operandos de expresiones y proposiciones.Un componente importante del anlisis semntico es la verificacin de tipos. Aqu, el compilador verifica si cada operador tiene operandos permitidos por la especificacin del lenguaje fuente. Por ejemplo, las definiciones de muchos lenguajes de programacin requieren que el compilador indique un error cada vez que se use unnmero realcomo ndice de unamatriz. Sin embargo, la especificacin del lenguaje puede imponer restricciones a los operandos, por ejemplo, cuando un operador aritmtico binario se aplica a un nmero entero y a un nmero real. Revisa que los arreglos tengan definido el tamao correcto.[editar]Fase de sntesisConsiste en generar elcdigo objetoequivalente al programa fuente. Slo se genera cdigo objeto cuando el programa fuente est libre de errores de anlisis, 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 cdigo objeto es cdigo de mquina relocalizable o cdigo ensamblador. Las posiciones de memoria se seleccionan para cada una de las variables usadas por el programa. Despus, cada una de las instrucciones intermedias se traduce a una secuencia de instrucciones de mquina que ejecuta la misma tarea. Un aspecto decisivo es la asignacin de variables aregistros.[editar]Generacin de cdigo intermedioDespus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explcita del programa fuente. Se puede considerar esta representacin intermedia como un programa para unamquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto.La representacin intermedia puede tener diversas formas. Existe una forma intermedia llamada cdigo de tres direcciones que es como ellenguaje ensambladorde una mquina en la que cada posicin de memoria puede actuar como unregistro. El cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos. Esta representacin intermedia tiene varias propiedades: Primera.- Cada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin, 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 instruccin. Tercera.- Algunas instrucciones de tres direcciones tienen menos de tres operandos, por ejemplo, la asignacin.[editar]Optimizacin de cdigoArtculo principal:Compilador optimizador.La fase de optimizacin de cdigo consiste en mejorar el cdigo intermedio, de modo que resulte un cdigo mquina ms rpido de ejecutar. Esta fase de la etapa de sntesis es posible sobre todo si el traductor es un compilador (difcilmente uninterpretepuede optimizar el cdigo objeto). Hay mucha variacin en la cantidad de optimizacin de cdigo que ejecutan los distintos compiladores. En los que hacen mucha optimizacin, 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 ejecucin del programa objeto sin retardar demasiado la compilacin.[editar]Estructura de datos principalesLa interaccin entre los algoritmos utilizados por las fases del compilador y lasestructuras de datosque soportan estas fases es, naturalmente, muy fuerte. El escritor del compilador se esfuerza por implementar estosalgoritmosde una manera tan eficaz como sea posible, sin aumentar demasiado la complejidad. De manera ideal, un compilador debera poder compilar un programa en un tiempo proporcional al tamao del mismo.[editar]Componentes lxicos o tokensCuando un analizador lxico rene los caracteres en untoken, generalmente representa el token de manera simblica, es decir, como un valor de un tipo de datos enumerado que representa el conjunto de tokens del lenguaje fuente. En ocasiones tambin es necesario mantener lacadena de caracteresmisma u otra informacin derivada de ella, tal como el nombre asociado con un token identificador o el valor de un token de nmero.En la mayora de los lenguajes el analizador lxico slo necesita generar un token a la vez. En este caso se puede utilizar una variable global simple para mantener la informacin del token. En otros casos (cuyo ejemplo ms notable esFORTRAN), puede ser necesario unarreglo (o vector)de tokens.[editar]rbol sintcticoSi el analizador sintctico genera un rbol sintctico, por lo regular se construye como una estructura estndar basada en unpunteroque se asigna de manera dinmica a medida que se efecta el anlisis sintctico. El rbol entero puede entonces conservarse como una variable simple que apunta alnodoraz. Cada nodo en la estructura es un registro cuyos campos representan la informacin recolectada tanto por el analizador sintctico como, posteriormente, por el analizador semntico. Por ejemplo, el tipo de datos de una expresin puede conservarse como un campo en el nodo del rbol sintctico para la expresin.En ocasiones, para ahorrar espacio, estos campos se asignan de manera dinmica, o se almacenan en otras estructuras de datos, tales como la tabla de smbolos, que permiten una asignacin y desasignacin selectivas. En realidad, cada nodo del rbol sintctico 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 sintctico puede estar representado por un registro variable, con cada clase de nodo conteniendo solamente la informacin necesaria para ese caso.[editar]Tabla de smbolosEsta estructura de datos mantiene la informacin asociada con los identificadores:funciones,variables,constantesytipos de datos. La tabla de smbolos interacta con casi todas las fases del compilador: el analizador lxico, el analizador sintctico o el analizador semntico pueden introducir identificadores dentro de la tabla; el analizador semntico agregar tipos de datos y otra informacin; y las fases de optimizacin y generacin de cdigo utilizarn la informacin proporcionada por la tabla de smbolos para efectuar selecciones apropiadas de cdigo objeto.Puesto que la tabla de smbolos tendr solicitudes de acceso con tanta frecuencia, las operaciones de insercin, eliminacin y acceso necesitan ser eficientes, preferiblemente operaciones de tiempo constante. Una estructura de datos estndar para este propsito es la tabla de dispersin o de clculo de direccin, aunque tambin se pueden utilizar diversas estructuras de rbol. En ocasiones se utilizan varias tablas y se mantienen en unalistaopila.[editar]Tabla de literalesLa bsqueda y la insercin rpida son esenciales tambin 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 slo una vez en esta tabla. La tabla de literales es importante en la reduccin del tamao de un programa en la memoria al permitir la reutilizacin de constantes y cadenas. Tambin es necesaria para que elgenerador de cdigoconstruya direcciones simblicas para las literales y para introducir definiciones de datos en el archivo de cdigo objeto.[editar]Cdigo intermedioDe acuerdo con la clase de cdigo intermedio (por ejemplo, cdigo de tres direcciones o cdigo P) y de las clases de optimizaciones realizadas, este cdigo 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 atencin a la seleccin de representaciones que permitan una fcil reorganizacin.Generacin de cdigo intermedioDespus de los anlisis sintctico y semntico, algunos compiladores generan una representacin intermedia explcita del programa fuente. Se puede considerar esta representacin intermedia como un programa para una mquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes; debe ser fcil de producir y fcil de traducir al programa objeto.La representacin intermedia puede tener diversas formas. Existe una forma intermedia llamada cdigo de tres direcciones, que es como el lenguaje ensamblador para una mquina en la que cada posicin de memoria puede actuar como un registro. El cdigo de tres direcciones consiste en una secuencia de instrucciones, cada una de las cuales tiene como mximo tres operandos. El programa fuente de (1) puede aparecer en cdigo de tres direcciones como temp1 := entarea1(60) temp2 := id3 * temp1 (2) temp3 := id2 + temp2 id1 := temp3Esta representacin intermedia tiene varias propiedades. Primera, cada instruccin de tres direcciones tiene a lo sumo un operador, adems de la asignacin. Por tanto, cuando se generan esas instrucciones el compilador tiene que decidir el orden en que deben efectuarse, las operaciones; la multiplicacin precede a la adicin al programa fuente de. Segunda, el compilador debe generar un nombre temporal para guardar los valores calculados por cada instruccin. Tercera, algunas instrucciones de tres direcciones tienen menos de tres operadores, por ejemplo la primera y la ltima instrucciones de.Optimizacin de CdigoLa fase de optimizacin de cdigo trata de mejorar el cdigo intermedio de modo que resulte un cdigo de mquina ms rpido de ejecutar. Algunas optimizaciones son triviales. Por ejemplo, un algoritmo natural genera el cdigo intermedio (2) utilizando una instruccin para cada operador de la representacin del rbol despus del anlisis semntico, aunque hay una forma mejor de realizar los mismos clculos usando las dos instruccionestemp1 := id3 * 60.0 (3)id1 := id2 + temp1Este sencillo algoritmo no tiene nada de malo, puesto que el problema se puede solucionar en la fase de optimizacin de cdigo. Esto es, el compilador puede deducir que la conversin de 60 de entero a real se puede hacer de una vez por todas en el momento de la compilacin, de modo que la operacin entreal se puede eliminar. Adems, temp3 se usa slo una vez, para transmitir su valor a id1. Entonces resulta seguro sustituir a id1 por temp3, a partir de lo cual la ltima proposicin de (2) no se necesita y se obtiene el cdigo de (3).Hay muchas variaciones en la cantidad de optimizacin de cdigo que ejecutan los distintos compiladores. En lo que hacen mucha optimizacin 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 ejecucin del programa objeto sin retardar demasiado la compilacin.[editar]Archivos temporalesAl principio las computadoras no tenan la suficiente memoria para guardar un programa completo durante la compilacin. Este problema se resolvi mediante el uso de archivos temporales para mantener los productos de los pasos intermedios durante la traduccin o bien al compilar al vuelo, es decir, manteniendo slo la informacin suficiente de las partes anteriores del programa fuente que permita proceder a la traduccin.Las limitaciones de memoria son ahora un problema mucho menor, y es posible requerir que una unidad de compilacin entera se mantenga en memoria, en especial si se dispone de la compilacin por separado en el lenguaje. Con todo, los compiladores ocasionalmente encuentran til generar archivos intermedios durante alguna de las etapas del procesamiento. Algo tpico de stos es la necesidad de direcciones decorreccin hacia atrsdurante la generacin de cdigo.