Sie sind auf Seite 1von 19

1.1 Lenguajes de Programacin Conjunto de smbolos bsicos (alfabeto) y un conjunto de reglas que especifican como manipularlos.

Pueden clasificarse en lenguajes maquina o lenguajes de alto nivel. 1.2 Traductores Programa que recibe como entrada, cdigo escrito en un cierto lenguaje y que produce como salida, cdigo en otro lenguaje. Generalmente el lenguaje de entrada es de ms alto nivel que el de salida. Ejemplos de traductores son los ensambladores y los compiladores. Un ensamblador es un programa que traduce de un lenguaje ensamblador a lenguaje mquina Un compilador es un programa que traduce de un lenguaje de alto nivel a un lenguaje de bajo nivel o a lenguaje mquina. Un traductor es un programa que toma el texto escrito en un lenguaje (el lenguaje fuente) y lo convierte en el texto equivalente en un segundo lenguaje. Diseo de lenguajes El lenguaje de programacin se puede definir al describir: 1. Lo que parecen sus programas (la sintaxis del lenguaje) 2. Lo que significan sus programas (la semntica del lenguaje). La sintaxis del lenguaje se presenta con una notacin denominada gramtica libre de contexto o BNF. La semntica del lenguaje se especifica usando descripciones informales y ejemplos. 1.3 Estructura de un Compilador. Un compilador debe realizar dos tareas principales: y y Anlisis del programa a compilar. Sntesis de un programa en lenguaje maquina que, cuando se ejecute, realizara correctamente las actividades descritas en el programa fuente.

El estudio de un compilador, se divide en fases. Cada fase representa una transformacin al cdigo fuente para obtener el cdigo objeto.

En cada una de las fases se utiliza un administrador de la tabla de smbolos y un manejador de errores. Anlisis Sintctico. En esta fase, los componentes lxicos se agrupan en frases gramaticales que el compilador utiliza para sintetizar la salida. Anlisis Semntico. La fase de anlisis semntico se intenta detectar instrucciones que tengan la estructura sintctica correcta, pero que no tengan significado para la operacin implicada. Generacin de cdigo Intermedio. Se puede considerar esta operacin intermedia como un subprograma para una mquina abstracta. Esta representacin intermedia debe tener dos propiedades importantes: debe ser fcil de producir y fcil de traducir al programa objeto. Optimizacin de Cdigo. En esta fase se trata de mejorar el cdigo intermedio, de modo que resulte un cdigo de mquina ms rpido de ejecutar. Generacin de Cdigo. Esta constituye la fase final de un compilador. En ella se genera el cdigo objeto que por lo general consiste en cdigo en lenguaje mquina (cdigo relocalizable) o cdigo en lenguaje ensamblador. Administrador de la tabla de smbolos. Una tabla de smbolos es una estructura de datos que contiene un registro por cada identificador. El registro incluye los campos para los atributos del identificador. El administrador de la tabla de smbolos se encarga de manejar los accesos a la tabla de smbolos, en cada una de las etapas de compilacin de un programa. Manejador de errores. De esta forma podrn controlarse ms eficientemente los errores encontrados en cada una de las fases de la compilacin de un programa.

2.1 Cargadores. La Programacin de Sistemas se refiere a la creacin de programas cuya finalidad es servir a otros programas. Entre los programas se encuentran, los sistemas operativos, los compiladores, los ensambladores, los cargadores, los macroprocesadores, los manejadores de bases de datos. Un cargador es un programa que coloca en la memoria, para su ejecucin, el programa guardado en algn dispositivo de almacenamiento secundario. Dependiendo de la manera en que se manejen los procesos de liga y de carga, podemos clasificar a los cargadores en: Cargadores iniciales.- Indican a la computadora la forma de poner, dentro de la memoria principal, unos datos que estn guardados en un perifrico de memoria externa (cinta, disco, etc.). Sirven para cargar en la memoria pequeos programas que inician el funcionamiento de una computadora. Cargadores absolutos.- si dichas instrucciones se almacenan siempre en el mismo espacio de memoria (cada vez que se ejecuta el programa cargador), se dice que es un cargador absoluto. Cargadores con reubicacin.- es cuando un mismo programa necesita ejecutarse en diferentes posiciones de memoria y se utilizan referencias relativas a una direccin especial llamada direccin de reubicacin. El clculo de las direcciones reubicables lo realiza el propio cargador a medida que va guardando las instrucciones en el espacio de memoria que le indique el usuario o el propio sistema operativo de la mquina. Cargadores ligadores.- Conocidos tambin por su trmino ingls Link editor o simplemente Linker Montar un programa consiste en aadir al programa objeto obtenido en la traduccin las rutinas externas a las que hace referencia dicho programa. El ensamblador debe permitir dichas referencias y las rutinas deben estar a su vez en lenguaje mquina guardadas en algn elemento accesible por el montador. Generalmente, dichas rutinas se encuentran guardadas en un fichero especial al que suele denominarse librera, porque estn almacenadas todas las rutinas externas susceptibles de ser utilizadas por los diferentes programas del usuario. All va el programa ligador cuando esta realizando el montaje de un programa a buscarlas y las adjunta al programa objeto. Cuando se utilizan subrutinas en un programa, el cdigo ejecutable de cada una de ellas debe encontrarse en memoria al tiempo de ejecucin. Para esto, antes de cargar un

programa, debe ligarse su cdigo objeto con los cdigos objeto (guardados en uno o ms archivos) de cada una de las subrutinas invocadas por l, obteniendo as un programa ejecutable que contiene tanto el cdigo del mdulo invocador como el cdigo de los mdulos invocados. En este punto, es posible guardar el resultado del proceso de liga en un archivo que podr ser utilizado por un cargador, o el mismo programa ligador puede tambin realizar la tarea de carga. Esto ltimo evita el tener que guardar el cdigo ejecutable en un archivo, con lo que se ahorra espacio en disco. Este ahorro de espacio en disco se paga con el tiempo gastado al tener que ligar todos los mdulos cada vez que se necesite ejecutar el programa. Este enlace se llama esttico porque se realiza antes de ejecutar el programa. Existe otro proceso llamado enlace dinmico, el cual consiste en enlazar en tiempo de ejecucin los mdulos que contienen a las subrutinas. 2.2 Ensambladores. Programas para traducir automticamente los programas escritos en lenguaje ensamblador a lenguaje mquina. La entrada para un ensamblador es un programa fuente escrito en lenguaje ensamblador. La salida es un programa objeto, escrito en lenguaje de mquina. El programa objeto incluye tambin la informacin necesaria para que el cargador pueda preparar el programa objeto para su ejecucin. Motivos para utilizarlo.
y

y y

Rapidez: Como el programador directamente selecciona las instrucciones que se ejecutan en el programa, el programa final queda mas optimizado que un programa generado por un compilador. Mayor control de la computadora: Un programa puede accesar directamente cualquier componente y perifrico de la computadora. Independencia del lenguaje: No depende de libreras o del lenguaje mismo para realizar una tarea especifica. Lenguajes como el Basic limitan al programador a lo que el lenguaje puede hacer. La mayora de las computadoras pueden ensamblar: Los recursos necesarios para ensamblar un programa son mucho menores que los compiladores o interpretes. El ensamblador generalmente es ms rpido ensamblando un programa que un compilador generando un archivo ejecutable.

Motivos para no utilizarlo. Desafortunadamente, tambin existen motivos para no crear los programas con ensamblador.
y

Dependencia del hardware: El cdigo se hace en extremo dependiente del microprocesador, de los dispositivos, de los controladores, etc. Este punto ser analizado con mas detenimiento en dependencias de hardware. Mayor tiempo de codificacin: El numero de lneas de un programa hecho en ensamblador es mayor a uno hecho en un lenguaje de alto nivel (por ejemplo: Funcin en C puede realizar varias decenas o centenas de instrucciones del microprocesador). Comprensin mas profunda de la computadora: Entender un lenguaje de alto nivel es generalmente ms sencillo que el ensamblador. Comprender ensamblador requiere conocimientos ms exactos sobre el funcionamiento interno de la computadora. Errores mas frecuentes en el programa: El evitar un error o encontrar alguno que ya exista es difcil. Las herramientas para este caso (como el CodeView y el TurboDebbuger) ayudan en gran medida a ver lo que esta ocurriendo en la maquina, pero no localizan los errores

Cundo utilizo ensamblador y cuando no? Depende del programa a desarrollar. Si el programa debe controlar en gran medida los componentes internos de la computadora o debe ser lo suficientemente veloz, entonces es recomendable utilizarlo. Si se requiere un sistema grande y no se dispone de mucho tiempo para entregarlo, entonces es mejor juntar un lenguaje de alto nivel con ensamblador (las funciones bsicas del programa realizarlas en ensamblador, y el programa en general codificarlo con el lenguaje de alto nivel). Este punto se discute mas adelante en ensamblador y lenguajes de alto nivel. 2.2.1 Tipos de Ensambladores. y Ensambladores Cruzados (Cross-Assembler)

Se utilizan en una computadora que posee un procesador diferente al que tendrn las computadoras donde va a ejecutarse el programa objeto producido. El empleo de este tipo de traductores permite aprovechar el soporte de medios fsicos (discos, impresoras, pantallas, etc.), y de programacin que ofrecen las mquinas potentes para desarrollar programas que luego los van a ejecutar sistemas muy especializados en determinados tipos de tareas.

Ensambladores Residentes

Son aquellos que permanecen en la memoria principal de la computadora y cargan, para su ejecucin, al programa objeto producido. Este tipo de ensamblador tiene la ventaja de que se puede comprobar inmediatamente el programa sin necesidad de transportarlo de un lugar a otro, como se haca en cross-assembler, y sin necesidad de programas simuladores. Puede presentar problemas de espacio de memoria, ya que el traductor ocupa espacio que no puede ser utilizado por el programador. Asimismo, tambin ocupar memoria el programa fuente y el programa objeto. Esto obliga a tener un espacio de memoria relativamente amplio. Es el indicado para desarrollos de pequeos sistemas de control y sencillos automatismo empleando microprocesadores.
y

Macroensambladores.

Permiten el uso de macroinstrucciones (macros). normalmente son programas robustos que no permanecen en memoria una vez generado el programa objeto. Puede variar la complejidad de los mismos, dependiendo de las posibilidades de definicin y manipulacin de las macroinstrucciones, por lo que suelen ser ensambladores residentes.
y

Microensambladores.

El programa que indica al intrprete de instrucciones de la UCP cmo debe actuar se denomina microprograma. El programa que ayuda a realizar esta microprograma se llama microensamblador. Existen procesadores que permiten la modificacin de sus microprogramas, para lo cual se utilizan microensambladores.

Ensambladores de una fase.

Estos ensambladores leen una lnea del programa fuente y la traducen directamente para producir una instruccin en lenguaje mquina o la ejecuta si se trata de una pseudoinstruccin. Tambin va construyendo la tabla de smbolos a medida que van apareciendo las definiciones de variables, etiquetas, etc. Estos ensambladores obligan a definir los smbolos antes de ser empleados para que, cuando aparezca una referencia a un determinado smbolo en una instruccin, se conozca la direccin de dicho smbolo y se pueda traducir de forma correcta. Estos ensambladores son sencillos, baratos y ocupan poco espacio, pero tiene el inconveniente indicado.

Ensambladores de dos fases.

Realizan la traduccin en dos etapas. En la primera fase, leen el programa fuente y construyen una tabla de smbolos; de esta manera, en la segunda fase, vuelven a leer el programa fuente y pueden ir traduciendo totalmente, puesto que conocen la totalidad de los smbolos utilizados y las posiciones que se les ha asignado. Estos ensambladores son los ms utilizados en la actualidad. 2.2.2 El proceso de ensamble de uno, dos o ms pasos. El proceso de ensamble de un paso consiste en leer una lnea de programa fuente y traducirla a lenguaje mquina cuando se trata de una instruccin, o se ejecuta si es una seudoinstruccin. La tabla de smbolos se va construyendo a medida que se avanza en la lectura de las lneas del programa fuente. Para que el ensamble de un paso funcione, todos los smbolos deben estar definidos antes de emplearse. Esto debido a que, para traducir correctamente cada instruccin, se debe conocer la direccin de cada uno de los smbolos que intervienen en ella. El proceso de ensamble de dos pasos o fases. En la primera fase, se lee el programa fuente y se construye la tabla de smbolos. En la segunda fase, se vuelve a leer el programa fuente y se traduce totalmente ya que se conoce la totalidad de los smbolos utilizados (incluyendo las etiquetas) y las posiciones de memoria que se les han asignado. Como ya se conocen las direcciones de las etiquetas utilizadas, pueden realizarse saltos hacia adelante. 2.2.3 Literales y Expresiones. Las literales son mecanismos mediante los cuales se reservan espacios de memoria para guardar valores de cierto tipo. Generalmente, el trmino literal se asocia un smbolo para representar la direccin del primer byte de espacio asignado. En el espacio asignado se pueden almacenar valores constantes o variables. Las expresiones son combinaciones de literales y operadores. En lenguaje ensamblador las expresiones involucran valores constantes y operadores. Los resultados se almacenan como constantes ya que los clculos ocurren durante el ensamble, no durante la ejecucin. Los operadores que se utilizan en las expresiones de lenguaje ensamblador no tienen ningn efecto en tiempo de ejecucin del programa ensamblado. No debe confundirse el manejo de expresiones en lenguaje ensamblador con

el manejo de expresiones en los lenguajes de alto nivel. En los lenguajes de alto nivel, la evaluacin de las expresiones se hace en tiempo de ejecucin. 2.3 Macroprocesadores. Permiten definir una abreviatura para representar una parte de un programa y utilizar esa abreviatura cuantas veces sea necesario. Evitan al programador la tediosa repeticin de partes idnticas de un programa, los ensambladores y compiladores cuentan con macroprocesadores. Para utilizar una macro, primero hay que declararla. En la declaracin se establece el nombre que se le dar a la macro y el conjunto de instrucciones que representar. El programador escribir el nombre de la macro en cada uno de los lugares donde se requiera la aplicacin de las instrucciones por ella representadas. y y y y La declaracin se realiza una sola vez La utilizacin o invocacin a la macro (macrollamada) puede hacerse cuantas veces sea necesario. La utilizacin de macros posibilita la reduccin del tamao del cdigo fuente El cdigo objeto tiende a ser mayor que cuando se utilizan funciones.

Operacin de los macros y y se encarga, en una primera pasada, registrar todas las declaraciones de macros y rastrear el programa fuente para detectar todas las macrollamadas. En cada lugar donde encuentre una macrollamada, el macroprocesador har la sustitucin por las instrucciones correspondientes. A este proceso de sustitucin se le denomina expansin de la macro.

El macroprocesador elabora dos tablas para el manejo de las macros: Una tabla de macronombres que consiste de los nombres de las macros y un ndice que le permite localizar la definicin de la macro. Una tabla de macrodefiniciones contiene las definiciones de todas las macros a utilizar en el programa. Bibliotecas de macros. Es un conjunto de macros agrupas en tareas especificas que se almacenan en archivos. Cuando se requiera la utilizacin de alguna macro en particular, se incluye en el programa fuente el archivo de la biblioteca de macros correspondiente.

2.4 Sistemas Operativos Programa que acta como intermediario entre el usuario y el hardware de un computador adems de ser una parte importante de casi cualquier sistema de computacin. Un sistema de computacin puede dividirse en cuatro componentes: el hardware, el sistema operativo, los programas de aplicacin y los usuarios. El principal objetivo de un sistema operativo es proporcionar una interfaz entre el equipo y los programas. Para lograr este objetivo, el sistema operativo debe administrar los recursos del sistema de cmputo, de manera tal que su utilizacin sea lo ms sencilla y eficiente posible. El hardware (unidad central de proceso (UCP), memoria y dispositivos de entrada y salida (E/S)) proporciona los recursos de computacin bsica bsicos. Los programas de aplicacin (compiladores, sistemas de bases de datos, juegos de vdeo y programas para negocios) definen la forma en que estos recursos se emplean para resolver los problemas de computacin de los usuarios. Los sistemas operativos son ante todo administradores de recursos; el principal recurso que administran es el hardware del computador: los procesadores, los medios de almacenamiento, los dispositivos de entrada/salida, los dispositivos de comunicacin y los datos. Los sistemas operativos realizan muchas funciones: y y y y y y y y y y como proporcionar la interfaz con el usuario permitir que los usuarios compartan entre s el hardware y los datos evitar que los usuarios interfieran recprocamente planificar la distribucin de los recursos facilitar la entrada y salida recuperarse de los errores contabilizar el uso de los recursos facilitar las operaciones en paralelo organizar los datos para lograr un acceso rpido y seguro manejar las comunicaciones en red.

2.4.1 Tipos de Sistemas Operativos. y Una forma de clasificacin de los sistemas operativos se basa en el nmero de usuarios que el sistema puede atender al mismo tiempo.

Tenemos sistemas de una sola tarea o trabajo, los cuales pueden atender solo un trabajo (y por lo tanto un solo usuario) a la vez. Un sistema de multiprogramacin permite que se ejecuten varios trabajos al mismo tiempo. El sistema operativo se encarga de intercambiar la atencin del procesador entre los programas en ejecucin y las funciones de apoyo propias. Un sistema de multiprocesamiento difiere del sistema de multiprogramacin por el hecho de trabajar con varios procesadores a la vez. y Otra forma de clasificar a los sistemas operativos es el tipo de acceso que proporcionan al usuario. En este caso, se tienen:

sistemas de procesamiento por lotes (batch processing), donde un trabajo se define como una secuencia de instrucciones de control almacenadas en algn dispositivo para que el sistema operativo pueda leer y ejecutar una serie de trabajos, limitando la intervencin del operador solo al montaje de cintas y discos. Por otra parte se tienen los sistemas de tiempo compartido (multiusuario) que proporcionan acceso interactivo o conversacional a varios usuarios, proporcionando a cada uno de ellos pequeos intervalos de tiempo de acuerdo a la cantidad de usuarios presentes y a la prioridad de cada uno de los procesos. 2.5 Compiladores Se le atribuye a Grace Murray Hopper la acuacin de este trmino En aquellos tiempos: exista una biblioteca de programas constituida de un conjunto de rutinas, cada una de ellas probada individualmente; cuando se necesitaba un programa, se elegan las rutinas necesarias de esa biblioteca y se integraban para conformar el proceso que ejecutara la computadora. Quin realizaba este trabajo de acopio de rutinas y de integracin se le denominaba compilador Hoy en da, un compilador es un traductor que facilita la comunicacin entre el programador y la mquina, por medio de un proceso de transformacin. 3.1 Scanner La construccin de un compilador puede hacerse ms fcil si el anlisis del programa fuente es separado en dos partes: y La primera parte identificando las construcciones de lenguaje de bajo nivel (tokens), tales como los nombres de variables, palabras reservadas, etiquetas, y operadores

La segunda parte determinando la organizacin sintctica del programa.

Dos aspectos importantes de los scanners: y Primero, lo que son los tokens (componentes lxicos) del lenguaje en estudio. Para describir los tokens pueden utilizarse gramticas regulares o el uso de expresiones regulares. Ambos mtodos descriptivos son equivalentes en el sentido de que ambos describen el conjunto de lenguajes regulares.

El segundo aspecto de los scanners trata con el reconocimiento de tokens. Los aceptores de estado finitos son dispositivos que encajan bien en esta tarea de reconocimiento, ya que pueden especificarse pictricamente utilizando diagramas de transicin.

3.1.1 El proceso del Anlisis Lxico Este proceso se refiere al trabajo que realiza el scanner con relacin al proceso de compilacin. El scanner representa una interfaz entre el programa fuente y el analizador sintctico o parser. El scanner, a travs del examen carcter por carcter del texto, separa el programa fuente en piezas llamadas tokens, los cuales representan los nombres de las variables, operadores, etiquetas, y todo lo que comprende el programa fuente. El parser, usualmente genera un rbol de sintaxis del programa fuente de acuerdo a una gramatica establecida. Las hojas del rbol son smbolos terminales de la gramtica. Son esos smbolos terminales o tokens los que el scanner extrae del cdigo fuente y se los pasa al parser. Usar solo parsers es costoso en trminos de tiempo de ejecucin y requerimientos de memoria, y la complejidad y el tiempo de ejecucin puede reducirse con el uso de un scanner.

Analizador lxico

Tiene como funcin principal el tomar secuencias de caracteres o smbolos del alfabeto del lenguaje y ubicarlas dentro de categoras, conocidas como unidades de lxico. Las unidades de lxico son empleadas por el analizador gramatical para determinar si lo escrito en el programa fuente es correcto o no gramaticalmente. En la terminologa empleada en la construccin de un analizador de lxico se encuentran los siguientes trminos: Patrn Representa la regla para que una secuencia de caracteres sea considerada cierta unidad de lxico. Ejemplo: El patrn para un identificador de Pascal es: Una letra seguida por letras, dgitos o guiones (_) Lexema El valor actual de un conjunto de caracteres que satisfacen un patrn. Ejemplo: Este_es_1_ejemplo Este es el lexema que satisface el patrn de un identificador Token o Ficha El valor asociado a una categora o unidad de lxico. Se representa como un nmero entero o una constante de un byte. Ejemplo: el token de un identificador puede ser 1 id (si id fue definida como 1). Unidades de lxico Categoras en que se clasifican las cadenas de caracteres vlidos en un lenguaje. Los caracteres vlidos reciben el nombre de alfabeto. Por ejemplo, el alfabeto de Pascal es: A-Z, a-z, 0-9, _, =, :, ;, ,, , -, ', ", *, /, (, ), [, ], ., <, > las unidades de lxico para pascal son: y y y y y y y y identificadores literales numricas operadores aritmticos cadenas de caracteres separadores operadores relacionales operadores lgicos comentarios

El rol del analizador de Lxico El analizador de lxico es la primera etapa del proceso de compilacin, pero no es quien lo inicia. La compilacin empieza con el analizador gramatical quien solicita un token para realizar su trabajo; el analizador de lxico rene smbolos y enva el token correspondiente a la unidad de lxico que conform al analizador gramatical y espera una nueva solicitud de token.

Durante estas etapas se tiene comunicacin con la tabla de smbolos que concentra informacin de las entidades empleadas en el programa. Descripcion de Patrones Un patrn se puede describir:

1. Mediante una descripcin informal en donde se emplea el lenguaje natural


para describir el comportamiento de la regla de lxico. Por ejemplo: un nmero entero es una secuencia de uno o ms dgitos del 0 al 9. O un identificador es una letra seguida de letras, dgitos o guiones de subrayar. La descripcin informal es til slo entre humanos

2. Utilizando expresiones regulares. Una expresin regular es una notacin


formal que utiliza operaciones sobre el alfabeto de un lenguaje. Por ejemplo, se puede definir que un identificador es: {letra} ({letra} | {dgito} | {guin})*

3. Utilizando autmatas finitos que son representaciones grficas de las

relaciones entre conjuntos de smbolos (aristas) por medio de estados, a los cuales pueden llegarse o transitarse por ellos al encontrar un smbolo perteneciente a un conjunto.

3.2.1 Diagramas de Estado Finito Para representar grficamente un aceptor de estado finito, tambin se utilizan los diagramas de estado finito o diagramas de transicin. Los nodos del diagrama de estado finito representan los estados del aceptor de estado finito. Los arcos, que van de un estado otro, indican las transiciones de estado. La flecha y la palabra "Inicio" indican cual de los estados es el estado inicial (en este caso el estado 1). El estado etiquetado con el 3 se denomina estado final. Generalmente los estados finales se representan por medio de dos crculos concntricos. Un diagrama de transicin es una representacin grfica donde se tiene un conjunto de estados, los cuales pueden ser: y y y iniciales finales intermedios

los cuales pueden tener una o ms salidas hacia otro estado. Los estados se relacionan entre s con flechas con un nombre (el caracter o conjunto de caracteres que provoca la transicin de un estado a otro). Un estado final se representa con : Que tambin recibe el nombre de estado de aceptacin.

Para construir un diagrama de transicin se debe tener presente:

A cada estado debe llegarse con el mismo conjunto de caracteres en todas las ocasiones en que haya una transicin. Para llegar a un estado de aceptacin debe existir una transicin sobre el caracter que rompe el patrn de la unidad de lxico.

3.3 Matrices de Transicin Arreglo bidimensional cuyos elementos proporcionan el resumen de un diagrama de transiciones. Para elaborar un tabla de transiciones, debe colocarse cada estado del diagrama de transiciones en una fila del arreglo y cada smbolo o categora de smbolos con posibilidades de ocurrencia en la cadena de entrada, en una columna. El elemento que se encuentra en la fila m columna n es el estado que se alcanzara en el diagrama de transiciones al dejar al estado m a travs de un arco de etiqueta n. Al no existir algn arco que salga del estado m, entonces la casilla correspondiente de la tabla se marca como un estado de error. 3.4 Tablas de Smbolos. Tambin llamadas tablas de identificadores y tablas de nombres, realizan dos importantes funciones en el proceso de traduccin: y y Verificar que la semntica sea correcta Ayuda en la generacin apropiada de cdigo.

Ambas funciones se realizan insertando o recuperando desde la tabla de smbolos los atributos de las variables usadas en el programa fuente. Estos atributos, tales como: el nombre, tipo, direccin de almacenamiento y dimensin de una variable, usualmente se encuentran explcitamente en las declaraciones o ms implcitamente a travs del contexto en que aparecen los nombres de variables en el programa Una de las estructuras de datos que se encuentran relacionadas con las fases del proceso de compilacin es la tabla de smbolos, la cual tiene como propsito registrar informacin que se comparte entre varias etapas y que permite administrar los recursos asociados a las entidades que manipular el programa. La tabla de smbolos tiene tpicamente la siguiente estructura:

Las consultas a la tabla de smbolos se realizan por medio del lexema con que se designa a la entidad. La creacin de la tabla de smbolos compete inicialmente al analizador de lxico, quien registrar a las entidades (reconocidas bajo el patrn de Identificador) de manera nica, por medio del binomio de operaciones Bsqueda-Insercin. En el contexto de un programa las entidades pueden describir propiamente objetos manipulables por el lenguaje (por ejemplo variables, constantes o funciones) o descriptores de acciones (las palabras reservadas); ambas situaciones son reconocidas bajo el mismo patrn de identificador y la tabla de smbolos se emplea para hacer su discriminacin. Como las palabras reservadas es un conjunto de entidades conocido y finito, la tabla de smbolos se inicializa con ellas y cuando se reconoce un identificador, su lexema se busca en la tabla y si se encuentra en ella, se regresa el token.

3.4.1 Cuando construir la tabla de smbolos y cuando interactuar con ella En un compilador multipasos, la tabla de smbolos es creada durante el paso de anlisis lxico. Por medio de un ndice se entra a la tabla de smbolos para ubicar la variable, a partir del token generado por el scanner. 3.4.2 Contenido de la tabla de smbolos Tabla de smbolos, serie de renglones, cada uno de los cuales contiene una lista de valores de atributos que son asociados con una variable en particular. Las clases de los atributos que aparecen en una tabla de smbolos dependen en algn grado de la naturaleza del lenguaje de programacin para el cual se escribe el compilador. La organizacin de la tabla de smbolos variar dependiendo de las limitaciones de memoria y tiempo de acceso. El nombre de la variable debe estar formando parte de la tabla de smbolos, ya que es el medio por el cual una variable en particular es identificada en las etapas de anlisis

semntico y generacin de cdigo. Para proveer un acceso rpido, es conveniente manejar un tamao predefinido pero lo suficientemente grande para los nombres de las variables. Una longitud igual o mayor que 16 caracteres es bastante adecuado. El identificador completo puede almacenarse, justificado a la izquierda, en un campo de longitud fija en la tabla de smbolos. Este criterio posibilita un acceso ms rpido a la tabla de smbolos, a costa de no aprovechar eficientemente el espacio de almacenamiento en el caso de las variables con identificadores cortos. Otro criterio para manejar los identificadores en la tabla de smbolos consiste en colocar una cadena descriptora en el campoNombre_Variable de la tabla. El descriptor contiene los subcampos posicin y longitud. El subcampo posicin es un apuntador que indica la posicin del primer carcter del nombre de la variable en un rea general de cadenas, y el subcampo describe el nmero de caracteres del nombre de la variable. Este enfoque produce un acceso ms lento a la tabla de smbolos, pero ofrece un ahorro considerable de espacio de almacenamiento. En el proceso de compilacin, una direccin de cdigo objeto debe asociarse con todo variable en un programa. Esta direccin establece la ubicacin relativa para los valores de la variable en tiempo de ejecucin. La direccin del cdigo objeto se coloca en la tabla de smbolos cuando la variable es declarada (o encontrada por primera vez). Esta direccin es reinvocada desde la tabla cuando la variable es referenciada en el programa fuente. La direccin es luego utilizada en una instruccin objeto que accesa (carga o almacena) el valor de esa variable. El atributo tipo se almacena en la tabla de smbolos cuando los lenguajes compilados tienen tipos de datos explcitos o implcitos. Tradicionalmente, el tipo de dato de una variable es almacenado codificada en la tabla de smbolos; por ejemplo 1 puede representar el tipo real, 2 el tipo integer, etc. Los atributos nmero_de_dimensiones y nmero_de_parametros son importantes en la fase de anlisis semntico. En las referencias a los arreglos, el nmero de dimensiones debe coincidir con el especificado en la declaracin del arreglo, y esto debe ser verificado en la fase de anlisis semntico. El nmero de dimensiones se utiliza tambin como parmetro en el clculo de la direccin de un elemento particular del arreglo. El nmero de parmetros de la invocacin a un procedimiento tambin debe coincidir con el nmero usado en la declaracin. En la construccin de la tabla de smbolos, es conveniente considerar el nmero de parmetros de un procedimiento como su nmero de dimensiones y as combinar estos dos atributos en uno. Adems de conveniente, este enfoque tambin es consistente, ya que el tipo de verificacin semntica para ambos atributos es similar. El atributo liga se ha incluido en la tabla de ejemplo simplemente para facilitar la produccin de un listado de referencias cruzadas ordenado alfabticamente por nombre de variable.

4.1.1 Anlisis Descendente


Un analizador gramatical descendente es conducido por una tabla (llamada M) que permite sustituir al axioma por los lados derechos de producciones de la gramtica hasta obtener la entrada que se est analizando. La sustitucin

se realiza reemplazando al noterminal ms a la izquierda en una sustitucin anterior por una forma equivalente (el lado derecho de una produccin para ese noterminal). La tabla M tiene entradas por renglones para los noterminales de la gramtica y columnas que representan los terminales. La tabla M se construye con el siguiente algoritmo:

CREACION DE LA TABLA M 1.- Por cada produccin A de la gramtica, hacer 2 y 3. ), agregar

2.- Por cada terminal a en primero ( A a M [A, a] 3.- Si esta en PRIMERO( ), agregar A a M [A, b] para cada b en SIGUIENTE(A).

4.- Hacer error para cada localidad vaca. El analizador descendente se gua consultando la tabla M y realizando las acciones que indica el siguiente algoritmo:

Das könnte Ihnen auch gefallen