You are on page 1of 31

UNIDAD 1.

INTRODUCCION A LA PROGRAMACION DE SISTEMAS


QUE ES? Un sistema es un conjunto de componentes que interaccionan entre s para lograr un objetivo comn. Las personas se comunican con el lenguaje, que es un sistema muy desarrollado formado por palabras y smbolos que tienen significado para el que habla y para quienes lo escuchan, lo mismo es para las computadoras las cuales tienen sistemas y se comunican por medio de computadoras. La programacin es el proceso de convertir las especificaciones a grandes rasgos de los sistemas en instrucciones de mquina que produzcan los resultados deseados. QUE ESTUDIA? El trabajo de un programador de sistemas es seleccionar, modificar y mantener el complejo software del sistema operativo. Por lo tanto, los programadores de sistemas desempean una funcin de apoyo al mantener el ambiente del software del sistema operativo en el que trabajan los programadores de aplicaciones y los operadores de las computadoras. Tambin participan en las decisiones relativas a reducciones o ampliaciones de hardware y/o software. Se entiende por programacin de sistemas el conjunto de programas necesario para que una computadora de una imagen coherente y monoltica ante sus usuarios. Es un rea especializada dentro de las ciencias de la computacin. As, mediante la programacin de sistemas, no solo se manejan las computadoras por medio del lenguaje maquina (0 y 1) sino por otros sistemas operativos, sin lo cual sera muy difcil la interaccin con la maquina. El estudio de la programacin de sistemas. En esta rea se estudia la teora de mquinas y su aplicacin en el diseo de sistemas digitales y de arquitectura de computadoras. reas especficas: Sistemas digitales para arquitecturas paralelas y control de procesos y sistemas reconfigurables. Inteligencia artificial aplicada a trabajo cooperativo: En las aplicaciones cooperativas realizadas en el entorno Web, es viable hacer uso de las herramientas de inteligencia artificial. Se estn diseando y construyendo herramientas para elaborar un sistema sin costura que opere en Web con la finalidad de proporcionar a un grupo de coautores el soporte necesario para producir conjunta y simultneamente un mismo documento. La

plataforma, denominada PINAS, es un sistema de edicin cooperativa (Alliance Web) y un sistema de notaciones sobre documentos complejos (COARSY) los cuales podrn permitir a coautores o revisores distribuidos en diferentes sitios del mundo, compartir y anotar observaciones sobre documentos complejos tales como captulos de libro, artculos, reportes, expedientes mdicos, etc. Sistemas para arquitecturas paralelas y distribuidas: Diseo de sistemas operativos para arquitecturas paralelas y sistemas distribuidos, particularmente en lo que se refiere a manejo de memoria y calendarizacin de procesos. Redes y protocolos, programacin distribuida, diseo y evaluacin de middleware enfocados a aplicaciones de minera de datos y multimedia. Diseo de algoritmos paralelos y distribuidos. Herramientas para programacin paralela y distribuida. Sistemas de tiempo real: Relacionados con diversos aspectos de la planificacin de los sistemas de tiempo real entre los cuales se encuentran los siguientes: planificacin tolerante a fallas en sistemas de tiempo real, planificacin de tiempo real en situaciones de sobrecarga, esto es en aplicaciones en donde se demande del procesador ms del 100% de su capacidad, y planificacin de sistemas de tiempo real aplicada al control de procesos y tcnicas de planificacin de tareas de tiempo real con restricciones de consumo de poder. Diseo y programacin de sistemas grandes: Los sistemas empotrados suelen ser grandes y complejos, formados por subsistemas relacionados, pero relativamente independientes. Algunos lenguajes ignoran el hecho de que los programas se construyen por partes, cada una de ellas compilada por separado y todas ellas enlazadas en una aplicacin final. El resultado se convierte en aplicaciones monolticas difciles de mantener. Otros lenguajes, en contraste, parten del concepto de mdulo y proporcionan mecanismos de encapsulamiento y abstraccin que ayudan a programar sistemas grandes, ya que el trabajo del equipo de programacin y posterior mantenimiento del sistema se ve facilitado. Uno de estos lenguajes es Ada, que est fuertemente fundamentado en la disciplina de la ingeniera del software por lo que es el lenguaje ms apropiado en la programacin de sistemas empotrados industriales grandes. Ada asume la necesidad de la compilacin separada y proporciona dos mecanismos para realizarla, uno ascendente y otro descendente: El mecanismo descendente (descomposicin), consiste en dividir un sistema complejo en componentes ms sencillos. Es apropiado para el desarrollo de grandes programas coherentes que, son divididos en varias subunidades que pueden compilarse por separado. Las subunidades se compilan despus que la unidad de la que forman parte.

El mecanismo ascendente (abstraccin), consiste en la especificacin de los aspectos esenciales de un componente, posponiendo su diseo detallado. Es apropiado para la creacin de bibliotecas de programa en las que las unidades se escriben para uso general y, consecuentemente, se escriben antes que los programas que las vayan a utilizar. El diseo de sistemas mediante mdulos permite encapsular partes del sistema mediante interfaces bien definidas y permiten utilizar tcnicas que facilitan el desarrollo de sistemas grandes como: - Ocultacin de informacin. - Tipos abstractos de datos. - Compilacin separada. Las unidades de programa en Ada son las siguientes: - Subprograma: que define los algoritmos ejecutables. Los procedimientos y las funciones son subprogramas. - Paquete: define una coleccin de entidades. Los paquetes son el principal mecanismo de agrupacin de Ada. - Tarea: define una computacin que puede llevarse a cabo en paralelo con otras computaciones. - Unidades Genricas: ayudan a realizar cdigo reutilizable. Pueden ser subprogramas o paquetes. - Unidad Protegida: puede coordinar el acceso a datos compartidos en el procesamiento paralelo. Aparece en el estndar Ada 95. En Ada, las unidades de compilacin pueden ser: o Especificaciones de subprogramas o Especificaciones de paquetes o Cuerpos de subprogramas o paquetes Algunos compiladores pueden establecer ciertos requisitos para las unidades de compilacin. Por ejemplo, GNAT en su configuracin predefinida exige que cada unidad est definida en un fichero, con el nombre de la unidad y la extensin .ads para

especificaciones y .adb para cuerpos. El guin - se ha de utilizar en sustitucin del punto . para unidades hijas y subunidades. Referencias: La Programacin de Sistemas es la accin de resolver eficientemente una necesidad mediante un cdigo hecho programa que se comunican para satisfacer dicha necesidad en un ambiente amigable y fcil de manejar para el usuario final. Se entiende por programacin de sistemas el conjunto de programas necesario para que una computadora de una imagen coherente y monoltica ante sus usuarios. Es un rea especializada dentro de las ciencias de la computacin. As, mediante la programacin de sistemas, no solo se manejan las computadoras por medio del lenguaje maquina (0 y 1) sino por otros sistemas operativos, sin lo cual sera muy difcil la interaccin con la maquina. Toda accin que codificada resuelva una necesidad o problema sistematizadamente.

1.2 Herramientas Desarrolladas Con Teora De La Programacin De Sistemas.

Las herramientas de programacin, son aquellas que permiten realizar aplicativos, programas, rutinas, utilitarios y sistemas para que la parte fisica del computador u ordenador, funcione y pueda producir resultados. Hoy dia existen mltiples herramientas de programacin en el mercado, tanto para analistas expertos como para analistas inexpertos. Las herramientas de programacin ms comunes del mercado, cuentan hoy dia con programas de depuracin o debugger, que son utilitarios que nos permiten detectar los posibles errores en tiempo de ejecucin o corrida de rutinas y programas. Muchas herramientas de software que manipulan programas fuente realizan primero algn tipo de anlisis. Algunos ejemplos de tales herramientas son:
1. Editores de estructuras: Un editor de estructuras toma como entrada una secuencia de rdenes para construir un programa fuente. El editor de estructuras no slo realiza las funciones de creacin y modificacin de textos de un editor de textos ordinario, sino que tambin analiza el texto del programa, imponiendo al programa fuente una estructura jerrquica apropiada. De esa manera, el editor de estructuras puede realizar tareas adicionales tiles para la preparacin de programas. Por ejemplo, puede comprobar si la entrada est formada correctamente, puede proporcionar palabras clave de manera automtica (por ejemplo, cuando el usuario escribe while,

el editor proporciona el correspondiente do y le recuerda al usuario que entre las dos palabras debe ir un condicional) y puede saltar desde un begin o un parntesis izquierdo hasta su correspondiente end o parntesis derecho. Adems, la salida de tal editor suele ser similar a la salida de la fase de anlisis de un compilador. 2. Impresoras estticas: Una impresora esttica analiza un programa y lo imprime de forma que la estructura del programa resulte claramente visible. Por ejemplo, los comentarios pueden aparecer con un tipo de letra especial, y las proposiciones pueden aparecer con una indentacin proporcional a la profundidad de su anidamiento en la organizacin jerrquica de las proposiciones. 3. Verificadores estticos: Un verificador esttico lee un programa, lo analiza e intenta descubrir errores potenciales sin ejecutar el programa. La parte de anlisis a menudo es similar a la que se encuentra en los compiladores de optimizacin. As, un verificador esttico puede detectar si hay partes de un programa que nunca se podrn ejecutar o si cierta variable se usa antes de ser definida. Adems, puede detectar errores de lgica, como intentar utilizar una variable real como apuntador, empleando las tcnicas de verificacin de tipos. 4. Intrpretes: En lugar de producir un programa objeto como resultado de una traduccin, un intrprete realiza las operaciones que implica el programa fuente. Para una proposicin de asignacin, por ejemplo, un intrprete podra construir un rbol como el de la figura 1 y despus efectuar las operaciones de los nodos conforme recorre el rbol. En la raz descubrira que tiene que realizar una asignacin, y llamara a una rutina para evaluar la expresin de la derecha y despus almacenara el valor resultante en la localidad de memoria asociada con el identificador posicin. En el hijo derecho de la raz, la rutina descubrira que tiene que calcular la suma de dos expresiones. Se llamara a s misma de manera recursiva para calcular el valor de la expresin velocidad*60. Despus sumara ese valor de la variable inicial. Muchas veces los intrpretes se usan para ejecutar lenguajes de rdenes, pues cada operador que se ejecuta en un lenguaje de rdenes suele ser una invocacin de una rutina compleja, como un editor o un compilador. Del mismo modo algunos lenguajes de muy alto nivel, normalmente son interpretados, porque hay muchas cosas sobre los datos, como el tamao y la forma de las matrices, que no se pueden deducir en el momento de la compilacin. 5. Compiladores: Tradicionalmente, se concibe un compilador como un programa que traduce un programa fuente, como FORTRAN, al lenguaje ensamblador o de mquina de algn computador. Sin embargo, hay lugares, al parecer, no relacionados donde la tecnologa de los compiladores se usa con regularidad. La parte de anlisis de cada uno de los siguientes ejemplos es parecida a la de un compilador convencional.

a) Formadores de textos. Un formador de textos toma como entrada una cadena de caracteres, la mayor parte de la cual es texto para componer, pero alguna incluye rdenes para indicar prrafos, figuras o estructuras matemticas, como subndices o superndices. b) Compiladores de circuitos de silicio. Un compilador de circuitos de silicio tiene un lenguaje fuente similar o idntico a un lenguaje de programacin convencional. Sin embargo las variables del lenguaje no representan localidades de memoria, sino seales lgicas (0 o 1) o grupos de seales en un circuito de conmutacin. La salida es el diseo de un circuito en un lenguaje apropiado. c) Intrpretes de consultas. Un intrprete de consultas traduce un predicado que contiene operadores relacionales y bolanos a rdenes para buscar en una base de datos registros que satisfagan ese predicado.

1.4 TRADUCTORES Y SU ESTRUCTURA. Los traductores de lenguajes son programas que traducen a su vez los programas fuente escritos en lenguajes de alto nivel a cdigo maquina. Los traductores se dividen en: Interpretes Compiladores Interpretes. Un intrprete es un traductor que toma un programa fuente, lo traduce y a continuacin lo ejecuta. Los programas interpretes clsicos como Basic, prcticamente ya no se utilizan, aunque todava pueden quedar versiones Qbasic y QuickBasic con el sistema operativo DOS que en la computadoras personales. Sin embargo, est muy extendida la versin interpretada del lenguaje SmallTalk, un lenguaje orientado a objetos puro y sobre todo Java.

Compilacion de Programas

Compiladores. Un Compilador es un programa que traduce los programas fuentes escritos en un lenguaje de alto nivel (C, C++, FORTRAN) a lenguaje maquina. Los programas escritos en lenguajes de alto nivel se llaman programas fuente y el programa traducido programa objeto o cdigo objeto. El compilador traduce sentencia a sentencia el programa fuente. Los lenguajes compiladores tpicos son: C, C++, Pascal, FORTRAN y COBOL. La compilacin y sus fases. La compilacin es el proceso de traduccin de programas fuente a programas objeto. El programa objeto obtenido de la compilacin ha sido traducido normalmente a codigo maquina. Para conseguir el programa maquina real se debe utilizar un programa llamado montador o enlazador (linker). El proceso de montaje conduce a un programa en lenguaje maquina directamente ejecutable.

El proceso de ejecucin de un programa escrito en un lenguaje de programacin y mediante un compilador suele tener los siguientes pasos: 1. Escritura del programa fuente con un editor (programa que permite a una computadora actuar de modo similar a una maquina de escribir electrnica) y guarladarlo en un dispositivo de almacenamiento (disco). Introducir el programa fuente en memoria. Compilar el programa con el compilador elegido. Verificar y corregir errores de compilacin (listado de errores). Obtencion del programa objeto. El enlazador (linker) obtiene el programa ejecutable. Se ejecuta el programa y, si no existen errores, se tendr la salida del programa.

2. 3. 4. 5. 6. 7.

En la actualidad casi todas las herramientas de programacin tienen un EID (Entorno Integrado de Desarrollo)

Programa Computadora

Datos-------------- Programa --------

Ejecutable -------
Resultados

Traductor. Es un software que toma como entrada un programa escrito en un cdigo llamado fuente y genera como salida otro programa en un cdigo llamado objeto. Algunos ejemplos de traductores son los compiladores (toma como entrada cdigo en alto nivel y genera como salida cdigo en bajo nivel), los intrpretes (toma como entrada cdigo en alto nivel y genera como salida un cdigo intermedio), los preprocesadores (toma como entrada cdigo en alto nivel y genera como salida cdigo en alto nivel) y el ensamblador (toma como entrada cdigo en ensamblador y genera como salida cdigo en bajo nivel). Su estructura podria ser expresada de la siguiente manera: cdigo fuente ->> traductor -> cdigo objeto Intrpretes o Traductores Definicin. Un intrprete es un programa que ejecuta un programa escrito en un determinado lenguaje examinando y ejecutando cada sentencia del programa una a una, por separado y sin realizar un proceso de compilacin previo. Al contrario de lo que se podra pensar el intrprete NO traduce la sentencia a cdigo mquina antes de ejecutarla. En su lugar, identifica el tipo de sentencia y la ejecuta directamente. El cdigo para ejecutar la sentencia est contenido dentro del intrprete que contendr rutinas para: evaluar una expresin, almacenar informacin en memoria, recuperar datos de memoria, etc. El intrprete contendr el nmero de rutinas necesarias para poder ejecutar cualquier sentencia del lenguaje que est interpretando. Ejemplo: C := A + B 1. El intrprete lee la sentencia y determina que es una asignacin. 2. Llamar a una de sus rutinas para evaluar la expresin a la derecha de la asignacin. 3. Esta rutina toma los smbolos A y B, determina donde estn almacenados, obtiene sus valores actuales y los suma. 4. El intrprete toma el valor calculado y lo almacena en la direccin de memoria a la que hace referencia el smbolo C.

Al igual que un compilador para llevar a cabo su tarea el intrprete usar un analizador lxico-grfico y guardar la informacin necesaria para la traduccin en una tabla de smbolos. Interpretar una sentencia es relativamente complejo, al tener que ser escaneada y analizada, los smbolos tienen que ser buscados, hay que llevar a cabo lo indicado por la sentencia, etc. Esto significa que el nmero de instrucciones mquinas a ejecutar para interpretar una sentencia puede ser mucho mayor que el cdigo generado por un compilador. Adems, cada sentencia tendr que ser interpretada cada vez que aparezca, por lo que una sentencia en un bucle sera interpretada varias veces. Adems de elegir entre compilar o interpretar un programa, otra opcin es combinar ambos procesos de traduccin. En este caso, se realiza una compilacin parcial a un cdigo intermedio que es seguida de un proceso de interpretacin. Uno de los lenguajes ms utilizados hoy en da, sobre todo para el desarrollo de aplicaciones para la Web, que sigue esta propuesta es el lenguaje Java. En el lenguaje Java el cdigo primero se compila con el compilador de Java javac. Este compilador genera un cdigo virtual llamado Byte Code?. Este cdigo es luego interpretado por una Mquina Virtual de Java (o JVM de Java Virtual Machine) que debe estar instalada y ejecutndose en la mquina en la que se desee ejecutar el cdigo compilado con javac.

Comparacin entre compiladores e intrpretes Histricamente, debido a la escasez de memoria de los primeros ordenadores, se puso de moda el uso de intrpretes frente a los compiladores, pues el programa fuente sin traducir y el intrprete juntos requeran una cantidad de memoria menor que la del compilador. Por ello, los primeros ordenadores personales (Spectrum, Commodore VIC-20, PC XT de IBM, etc.) iban siempre acompaados de un intrprete de BASIC. La mejor informacin sobre los errores por parte del compilador as como una mayor velocidad de ejecucin del cdigo resultante hizo que poco a poco se impusieran los compiladores. Hoy en da, y con el problema de la memoria prcticamente resuelto, se puede hablar de un gran predominio de los compiladores frente a los intrpretes, aunque intrpretes como los incluidos en los navegadores de Internet para Java son la gran excepcin. Algunas de las ventajas de compilar frente a interpretar son: Se compila una vez; se ejecuta muchas veces La ejecucin del programa objeto es mucho ms rpida que si se interpreta el programa fuente. El compilador tiene una visin global del programa, por lo que la informacin de mensajes de error es ms detallada. Por otro lado, algunas de las ventajas de interpretar frente a compilar son:

Un intrprete necesita menos memoria que un compilador. Permiten una mayor interactividad con el cdigo en tiempo de desarrollo. En algunos lenguajes (Smalltalk, Prolog, LISP, Java) est permitido y es frecuente aadir cdigo segn se ejecuta otro cdigo, y esta caracterstica solamente es posible implementarla en un intrprete.

Traductores, estructura y su funcionamiento.

Compiladores. Lenguajes de Programacin. Un lenguaje de programacin est formado por un conjunto de smbolos bsicos (alfabeto) y un conjunto de reglas que especifican como manipularlos. Tambin debe darle significado a las cadenas formadas al manipular los smbolos bsicos. Los lenguajes de programacin pueden clasificarse de acuerdo a su semejanza con el lenguajes maquina o a su semejanza con el lenguaje humano (generalmente ingls). Los lenguajes que tiene mayor semejanza con el lenguaje humano se les llama lenguajes de alto nivel, mientras que los lenguajes ms parecidos al lenguaje de maquina son conocidos como de bajo nivel. Entre los lenguajes de bajo nivel se encuentra el lenguaje ensamblador. Diseo de lenguajes. El lenguaje de programacin puede definirse 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 ampliamente con una notacin denominada gramtica libre de contexto o BNF. (Backus-Naur Form). La semntica del lenguaje es ms difcil de expresar que la sintaxis y generalmente se decide por especificarla usando descripciones informales y ejemplos. Ambas situaciones deben ser consideradas por quien disea un nuevo lenguaje para satisfacer las necesidades de los usuarios potenciales. Por ejemplo, alguien puede hacer el siguiente requerimiento:

Estructura de un Compilador.

Cualquier compilador debe realizar dos tareas principales: anlisis del programa a compilar y sntesis de un programa en lenguaje maquina que, cuando se ejecute, realizara correctamente las actividades descritas en el programa fuente. Para el estudio de un compilador, es necesario dividir su trabajo en fases. Cada fase representa una transformacin al cdigo fuente para obtener el cdigo objeto. La siguiente figura representa los componentes en que se divide un compilador. Las tres primeras fases realizan la tarea de anlisis, y las dems la sntesis. En cada una de las fases se utiliza un administrador de la tabla de smbolos y un manejador de errores. Anlisis Lxico. En la fase de anlisis lxico se leen los caracteres del programa fuente y se agrupan en cadenas que representan los componentes lxicos. Cada componente lxico es una secuencia lgicamente coherente de caracteres relativa a un identificador, una palabra reservada, un operador o un carcter de puntuacin. A la secuencia de caracteres que representa un componente lxico se le llama lexema (o con su nombre en ingls token). En el caso de los identificadores creados por el programador no solo se genera un componente lxico, sino que se genera otro lexema en la tabla de smbolos. 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. Algunos compiladores generan una representacin intermedia explcita del programa fuente, una vez que se han realizado las fases de anlisis. 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. En cada fase del proceso de compilacin es posibles encontrar errores. Es conveniente que el tratamiento de los errores se haga de manera centralizada a travs de un 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. Este es el proceso estndar que un compilador comercial sigue para cualquier programa.

Estructura de un Compilador. Cualquier compilador debe realizar dos tareas principales: anlisis del programa a compilar y sntesis de un programa en lenguaje maquina que, cuando se ejecute, realizara correctamente las actividades descritas en el programa fuente. Para el estudio de un compilador, es necesario dividir su trabajo en fases. Cada fase representa una transformacin al cdigo fuente para obtener el cdigo objeto. La siguiente figura representa los componentes en que se divide un compilador. Las tres primeras fases realizan la tarea de anlisis, y las dems la sntesis.

En cada una de las fases se utiliza un administrador de la tabla de smbolos y un manejador de errores. Anlisis Lxico. En la fase de anlisis lxico se leen los caracteres del programa fuente y se agrupan en cadenas que representan los componentes lxicos. Cada componente lxico es una secuencia lgicamente coherente de caracteres relativa a un identificador, una palabra reservada, un operador o un carcter de puntuacin. A la secuencia de caracteres que representa un componente lxico se le llama lexema (o con su nombre en ingls token). En el caso de los identificadores creados por el programador no solo se genera un componente lxico, sino que se genera otro lexema en la tabla de smbolos. 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. Algunos compiladores generan una representacin intermedia explcita del programa fuente, una vez que se han realizado las fases de anlisis. 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. Dichosa 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. En cada fase del proceso de compilacin es posibles encontrar errores. Es conveniente que el tratamiento de los errores se haga de manera centralizada a travs de un 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.

Visin general del proceso de compilacin.


La figura 1 presenta un diagrama que ilustra de forma general las dos fases que componen al proceso de compilacin y cada fase desglosada en sus etapas componentes. En una primera fase de anlisis1 el programa es descompuesto en sus elementos fundamentales. En la posterior fase de sntesis2 es construido el programa ejecutable correspondiente a los elementos identificados en la fase previa. El proceso es irreversible e inclusive puede considerarse destructivo, ya que no hay forma de reconstituir el programa fuente a partir del ejecutable 3. nicamente por facilidad descriptiva, el proceso es presentado con las etapas que componen a cada fase perfectamente diferenciadas y separadas; en la prctica se ha demostrado que productos muy rpidos y eficientes pueden ser desarrollados alterando el orden de algunas etapas o entremezclndolas.

Figura 1.- Etapas del proceso de compilacin. La entrada a este proceso es por supuesto el programa fuente. Por lo general ste es un archivo que es creado por el usuario como un texto ASCII con o sin un formato especfico aunque tambin puede ser el resultado de algn otro proceso. A partir de este archivo diversos pasos pueden ser llevados a cabo:

Preprocesamiento.- Un preprocesador es la estrategia generalmente adoptada como solucin a lenguajes huspedes, extensiones, lenguajes 4GL, o lenguajes de dominio especfico. El preprocesador es un traductor encargado de transformar dichas instrucciones a instrucciones del lenguaje anfitrin (generalmente un tradicional 3GL) sobre las cuales finalmente trabajar el compilador. Esta etapa es definitivamente opcional. Anlisis Lxico.- En esta fase, la cadena de caracteres que conforma al programa fuente es despojada de comentarios, espacios en blanco y otros elementos superfluos. El programa encargado de hacer esto es conocido como un scanner, y de aqu que al proceso se le refiera comnmente como scanning (exploracin). Durante esta fase se identifican los elementos gramaticales usados en la creacin del programa. Cada elemento identificado es substituido por un cdigo numrico conocido como token.

Anlisis Sintctico.- La cadena de tokens resultante es alimentada a un programa conocido como parser. El parser es el encargado de verificar que la secuencia y disposicin de los tokens corresponda con la sintaxis del lenguaje. Este proceso de verificacin sintctica es conocido como parsing y es completamente guiado por la gramtica del lenguaje. Anlisis Semntico y Generacin de Cdigo.- Una vez que la secuencia de tokens ha sido validada, sta es utilizada para identificar el sentido de la accin a realizar y generar el correspondiente cdigo en lenguaje mquina. Algunos compiladores recurren a la creacin de cdigo intermedio para posteriormente generar la secuencia de instrucciones mquina necesarias, mientras que algunos otros proceden a la generacin directa del cdigo mquina. Optimizacin de Cdigo.- Esta es otra etapa opcional. La optimizacin de cdigo es una actividad que raya en un arte dominado solamente por un experimentado programador de ensamblador y conocedor de la arquitectura del computador. Existen algunas tcnicas desarrolladas al respecto pero nada supera a la experiencia de un hbil programador. En esta etapa, ya sea posteriormente o trabajando al unsono con el generador de cdigo,

secuencias de instrucciones y estructuras de datos son examinadas buscando su substitucin con secuencias, instrucciones o estructuras ms cortas, rpidas o eficientes. Ligado.- Como paso final, todas las referencias pendientes de resolver sobre rutinas, mdulos, bibliotecas y dems porciones de cdigo necesarias para el funcionamiento del programa son cubiertas en esta parte. La resolucin puede consistir desde el proporcionar meramente una direccin o llamado a una funcin hasta la inclusin de enormes porciones de cdigo. Al final, como producto de todo este proceso, lo que se obtiene es un programa escrito en cdigo mquina que puede ser cargado en memoria y ejecutado. El proceso seguido por un intrprete es ligeramente diferente, ya que mientras que cubre todas las etapas de anlisis no cuenta con una fase sntesis. Un intrprete no genera cdigo, se limita a invocar rutinas ya escritas (proceso muchas veces llamado de interpretacin). La siguiente figura ilustra esto.

Figura 2.- Etapas del proceso de interpretacin. En el caso de un pseudo-compilador, cuyo caso mejor conocido es el de Java, la diferencia consiste en el cdigo generado. Mientras que todas las etapas de un compilador son cubiertas, el programa ejecutable no es creado para ser ejecutado en un procesador "real" sino para uno "hipottico" o "imaginario" y conocido generalmente como mquina virtual. La mquina virtual es otro programa cuyo funcionamiento simula al de un procesador. Este procesador recibe de entrada el pseudo-cdigo creado por el compilador y procede a la ejecucin de las instrucciones contenidas en ste; puede verse que no se trata mas que de un intrprete muy sencillo.

Figura 3.- Etapas del proceso de pseudo-compilacin. La siguiente figura ilustra con mayor detalle lo que pasa en cada una de las etapas del proceso de compilacin. El procesamiento de instrucciones de un lenguaje huesped (como puede ser SQL) correra a cargo del preprocesador, siendo transformadas instrucciones del lenguaje anfitrin. Durante la fase de anlisis lxico el scanner se encarga de identificar cada uno de los elementos usados para escribir el programa fuente, substituyendo a cada uno de estos por un cdigo numrico nico (tokens). En este proceso se eliminan comentarios y espacios en blanco. Los tokens son alimentados al analizador sintctico que valida que su disposicin est acorde a las reglas del lenguaje. Validado este el analizador semntico procede a identificar el propsito de las diversas secuencias de tokens y buscar generar representaciones intermedias de cada accin o directamente cdigo mquina. Este posteriormente es optimizado.

Figura 4.- Detalle del flujo de datos y acciones en el proceso de compilacin. 1Anlisis: Dado un sistema, identificar los elementos constituyentes, las interrelaciones entre &eeacute;stos, y determinar la conducta creada. 2Sntesis: Dado un conjunto de elementos y estableciendo un determinado nmero de interrelaciones entre stos, crear uno de muchos posibles sistemas con una determinada conducta. 3El "descompilar" un programa slo es posible si se cuenta con informacin de depuracin, generada por el compilador. Mientras que es posible "desensamblar" un programa, sin informacin adicional que permita asociar secuencias de instrucciones ensamblador a instrucciones de nivel alto, es imposible reconstruir el programa fuente a partir del cdigo ejecutable.

Este texto puede ser copiado y reproducido libremente mientras su contenido no sea alterado, se cite la fuente y referencias. Las marcas registradas son responsabilidad de sus dueos y el autor de este texto no tiene relacin alguna con estos. M. en C. Eduardo Ren Rodrguez Avila. Todos los derechos reservados.

UNIDAD 2 INTRODUCCION AL DISEO DE LENGUAJES DE PROGRAMACION.


2.1. VISION DEL PROBLEMA.
Visin del problema. Proporciona modelos de diseo que permitan caracterizar el desarrollo de aplicaciones utilizando un lenguaje de programacin se necesita un lenguaje de modelado que sea capaz de capturar la semntica del modelo al que se ajusta el lenguaje de programacin. El modelado de diseo proporcionado por el lenguaje de modelado debe ser capaz de capturar la semntica del programa que implementa la especificacin de requisitos. --------------------------------------------------------------------En los ltimos aos, una de las artes ms predominantes en el mundo de la programacin ha sido el diseo de lenguaje de programacin. El numero de lenguajes de programacin propuesta y diseados son extremadamente grandes. Aun el numero de de lenguajes para el que un compilador ha aplicado es inmenso. Sammet (1976) indica 167 en su lista 1974 1975. Aun que los primeros lenguajes de programacin primitivos nacieran cerca 25 aos atrs, hasta que reciente mente hubiesen un pequeo proceso en el diseo de nuevos lenguajes de programacin. Los primeros lenguajes fueron los pioneros, explorando un nuevo campo. No es de sorprenderse que carecieran de un buen diseo. No se debera criticar a los diseadores o FORTRAN; puesto que suficientes problemas tenan con disear y aplicar uno de los primeros lenguajes de alto nivel Si hay cualquier crtica de ser concedida con respecto a FORTRAN, Nadie razonablemente los podra esperar que a la crtica sean concedidos con respecto a 25 aos ms tarde, sus objetivos deben ser los usuarios que se han adherido tan tenazmente a ciertos diseadores cados en desuso del lenguaje que tienen tan perpetuaron con entusiasmo los desperfectos de FORTRAN. Se debe notar que nuestras referencias a FORTRAN en el prrafo anterior y a travs de este captulo se refiere a FORTRAN IV antes que FORTRAN 77. Despus que el desarrollo inicial del lenguaje de alto nivel y la implementacin de los primeros pocos compiladores, all result un perodo bastante largo en el que las tentativas conscientes se hicieron para disear nuevos lenguajes sin los desperfectos de los viejos. La mayor parte de estas tentativas eran los fracasos, no tanto de una falta de ideas en cmo disear mejores lenguajes como de un supervit de ideas. Una buena ampliacin de este proceso es la nocin que si podra significar algo, debera (Radin y Rogoway, 1965), que llev a PL/YO. Ms recientemente, la experiencia de errores pasados haba llevado al conocimiento verdadero acerca de cmo construir mejores lenguajes de programacin. Las ideas y los principios bsicos se establecen suficientemente bien para indicar las pautas explcitas para el diseo del lenguaje. Esas reas que aun no han sido comprendidas se encuentran bajo investigacin. Esta discusin procurar por consiguiente acentuar un sistema. El enfoque ordenado al diseo del lenguaje, se debe recordar, sin embargo, hacer la justificacin apropiada a muchos temas que a menudo son necesarios para discutir detalles as como generalidades. El campo del diseo del lenguaje no es de ninguna manera completamente desarrollada, y muchas reas no han sido bien unificadas. Tambin, muchas reas interrelacionan y son difcil de discutirlos separadamente. Por la necesidad, esta discusin sin embargo, restringe su alcance. Las descripciones elaboradas de las caractersticas posibles del lenguaje se limitarn se asume que el diseador potencial del lenguaje tiene las bases suficientes en lenguajes de programacin para estar enterado de las ideas principales. Las caractersticas especficas se discutirn para especificar razones , pero ninguna tentativa se har para dar un catlogo general. Hay ya varios catlogos , como: (Elson, 1973; Pratt, 1975; Nlcholls, 1975). ------------------------------------------------------------------------Un buen lenguaje no es apenas una coleccin casual de caractersticas de un total unificado. Se asumir que los lenguajes, bajo la discusin son de alto nivel los idiomas. La discusin ser restringida tambin en gran parte a idiomas procesales para escribir software (software se utiliza aqu en sus la mayora de los sentidos generales para significar los programas para ser utilizados por otra persona). Mucho de lo que se dice ser aplicable a otras clases de lenguajes. El disear completamente un lenguaje se debe tomar con cuidado para no hacer una extensin tan grande y compleja de este nuevo lenguaje. En caso contrario, la necesidad de retener algunas interfaces con un viejo lenguaje probablemente ceder gravemente el diseo de la extensin. Si uno extiende un lenguaje existente, es necesario escoger cuidadosamente

un lenguaje base para que el trabajo de la extensin se aminore y la extensin elegantemente quede dentro del lenguaje. El objetivo debe ser el de producir un lenguaje el cual sea ms grande y perfectamente bien construido. Sera posible el modificar un lenguaje existente, utilizando posiblemente un macroprocessor o algo similar? Aun que con facilidad un macro contrario de menor parmetro (sustituyendo simplemente un texto especificado para cada ocurrencia de una identificacin definida) podra producir modificaciones mayores en la sintaxis de un lenguaje, si se utilizara diestramente (por ejemplo, RATFOR definido por Kernighan y Plauger, 1974) sin embargo, el poder de este enfoque para una tarea ms compleja, tal como la introduccin de nuevas estructuras de datos, se limitan. Algunas consideraciones serias como tcnicas o alternativas para el diseo de un nuevo lenguaje, consisten en simplemente aminorar el trabajo y el tiempo implicado. Quizs no haya ningn otro problema relacionado con la computadora que observe tan tentadoramente fcil y sea sumamente terrible un buen trabajo de diseo de lenguaje. Prescinda de la nocin que es posible agitar un diseo el fin de semana y el comenzar aplicando un traductor para el lunes. Un mes luego habr de asentarse todava los puntos secundarios del diseo del idioma y la implementacin no habr obtenido casi en ningn lugar. Asumiendo la decisin que se ha hecho de que ninguno de los enfoques anteriores sera suficiente, el prximo punto interesante es: Cul es el propsito de un lenguaje? Un lenguaje es diseado a menudo para su aplicacin en un rea especfica. La mayor atencin es dada a restringir el rea de la aplicacin del lenguaje, y el mejor lenguaje ser el que resuelva los problemas en esa rea. De hecho no es conveniente el procurar disear un lenguaje de uso general porque abarcar la solucin de todos los problemas puede provocar que el proyecto falle. Todo intento ha sido desilusionando (notablemente PL/YO y ALGOL 68). Actualmente, toda evidencia indica que nadie sabe cmo hacer un trabajo apropiado de disear un idioma que ser bueno para todo. Finalmente, la relacin de un nuevo lenguaje hacia lenguajes existentes se debe considerar. Weinberg (1971) discute el fenmeno psicolgico de la inhibicin, que ocurre cuando un viejo lenguaje y un lenguaje nuevo no son semejantes pero idnticos. El usuario es susceptible a confundirse gravemente con la incertidumbre acerca de cunto del viejo lenguaje conservara en el nuevo. Por ejemplo. Los programadores de FORTRAN que aprende que PL/YO formatear E/S tiene gran problema con el formatos DE TIPO F, que no son semejantes pero idntico a la construccin del FORTRAN. En resumen es preferible hacer el nuevo lenguaje claramente diferente que hacerlo semejante a algn lenguaje existente. Si los nuevos y los viejos lenguajes de programacin existentes pueden ser la fuente para mejores ideas, para la programacin de diseadores de lenguaje considerar que precisamente solo sea eso la fuente. Los diseadores deben ser muy cuidadosos inclusive acerca de ideas en su propio producto, considerando que los diseadores del pasado han hecho grandes errores. Algunos principios despreciables se pueden pronunciar para distinguir buenas ideas dignas de la perpetuacin y de malas ideas dignas slo de la extincin. Quizs el principal principio deber preguntar por qu se hizo esa manera? Una vez que usted obtiene una respuesta a esta pregunta, se pregunta Es esa razn (todava) vlida? a menudo la respuesta a esta pregunta ser no. Para el ejemplo FORTRAN las extraas restricciones en subndices de serie dirigiendo las caractersticas de su hardware y tuvo miedo que esto no se podra hacer si ninguna expresin permitindolo como un subndice. Aunque esto se pueda considerar quizs razonable (u optar menos entendible) en la circunstancia que lo ciertamente no es hoy defendible, acerca de la reduccin grave en valor prctico resultante. Aunque vale la pena para recordar el que incluso si el juicio general en un lenguaje sea (un diseo malo esto no significa que identificacin no oculta las caractersticas que valen la pena en algn lugar mas profundamente. Por ejemplo, aunque APL se pueda criticar en muchas veces, bien puede valer la pena el copiar sus poderosos operadores. El hecho que una caracterstica est comnmente disponible no implica que esta haya sido una buena idea. Muchos idiomas han seguido ALGOL 60s principal en permitir el tamao de series para ser decidido en corre tiempo, una caracterstica que introduce los problemas considerables de la implementacin e interviene con verificar de error de compila tiempo. Esta caracterstica puede ser del valor slo limitado en ciertas reas de aplicaciones. El fenmeno de declaraciones predefinidas en varios lenguajes, heredado de FORTRAN, es un ejemplo de que esta caracterstica actualmente prevalezca. Esta caracterstica ilustra la grasa popular de caractersticas totalmente perjudicial que actualmente se programa y es que es tomada como una programacin de calidad. Con esto comprobamos, el hecho de que una de las caractersticas que estn comnmente disponibles no puede implicar que sea una buena idea. Muchos lenguajes han seguido ALGOL 60s principalmente el permitir el tamao de series para ser decididazas con mayor rapidez, caracterstica que presenta considerablemente la implementacin de problemas e interfiere con el tiempo de compilacin del cheque de

errores. Esta caracterstica puede ser del valor slo limitado en ciertas reas de aplicacin. El fenmeno de preferido declaraciones, heredado de FORTRAN, es otro ejemplo de un mal diseo de programacin. Esta caracterstica en particular clusula; entonces probablemente sera irrazonable requerir ELSE en todo IF. La nocin relativamente reciente de experimentacin lofrece bsicamente los mismos tipos de conclusiones, indudablemente la investigacin seguir en las reas de medir el empleo de los lenguajes de programacin y experimentar en el diseo de los lenguaje de programacin.

2.2. CONSIDERACIONES PRELIMINARES. Algunas consideraciones que debemos tomar en cuenta son: Palabras reservadas del lenguaje Operadores Tipos de datos. Debemos considerar el objetivo del lenguaje, si es un lenguaje de enseanza, si es un lenguaje para profesionales, si el cdigo desarrollado va a ser mejor. Eficiencia de los lenguajes de programacin: Compilacin rpida del cdigo fuente y ejecucin rpida del cdigo objeto. Independencia de la Maquina.

Los factores fundamentales en la calidad del software son: Eficiencia, portabilidad, verificabilidad, integridad, facilidad de uso, exactitud, robustez, extensibilidad, compatibilidad y la reutilizacin. En trminos generales, estos factores pueden describirse de la siguiente forma: Eficiencia: capacidad para el aprovechamiento ptimo de los recursos que emplea. Los lenguajes OOP arrastraron en un principio la reputacin de ser ineficaces. Esto se deba en gran medida a que los primeros lenguajes (como Smalltalk) eran interpretados y no compilados. La existencia de compiladores permite a los desarrolladores ganar rapidez. Actualmente, usando un buen lenguaje orientado a objetos como C++, Java, etc. Junto con las libreras apropiadas para la realizacin de un programa, puede que se ejecute ms rpidamente que el mismo programa compilado con un lenguaje procedural. Portabilidad: facilidad para ser ejecutados en distintos entornos lgicos o fsicos. Verificabilidad: capacidad para soportar procedimientos de pruebas, test o ensayos. Integridad: nivel de proteccin frente a procesos que traten de alterarlo. Facilidad de uso: comodidad y claridad en la interaccin con el usuario. Exactitud: nivel de precisin que alcanzan los resultados obtenidos. Robustez: capacidad para funcionar correctamente en situaciones extremas.

Extensibilidad: capacidad para adaptar su funcionamiento al incremento en sus objetivos. Compatibilidad: facilidad de poder ser aplicados en conjuncin con otros programas. Reutilizacin: posibilidad de utilizarlos (total o parcialmente) en nuevos contextos. Independencia de la Maquina: Puesto que diferentes usuarios utilizan diferentes ordenadores, el sistema debe ser accesible por todos ellos sin merma de prestaciones, especialmente por las plataformas mayoritarias: Windows, MacOS y Unix. Los programas Windows son independientes de la mquina en la que se ejecutan (o al menos deberan serlo), el acceso a los dispositivos fsicos se hace a travs de interfaces, y nunca se accede directamente a ellos. Esta es una de las principales ventajas para el programador, ya que no hay que preocuparse por el modelo de tarjeta grfica o de impresora, la aplicacin funcionar con todas, y ser el sistema operativo el que se encargue de que as sea. A la hora de explotar un gran nmero de bases de datos de diferentes editores nos encontramos ante un doble problema. Por una parte, la citada falta de homogeneidad de los sistemas informticos de los usuarios; por otra parte, cada una de las bases de datos suele tener su propio programa de consulta, de modo que nos encontramos multitud de programas diferentes que debern conocer los usuarios. Dichos programas estn en su mayor parte diseados para ordenadores tipo PC con sistema operativo Windows. Teniendo en cuenta todo lo anterior, podemos ver que el sistema ha de permitir acceder a multitud de mquinas diferentes a una serie de programas en muchos casos incompatibles con ellas. Los servidores de aplicaciones son la base de programas informticos diseados para ser ejecutados desde ordenadores personales a travs de Navegadores de Internet convencionales. Con ello se consigue independencia de la mquina (los programas funcionan en cualquier ordenador), independencia de ubicacin (es posible utilizar los programas desde cualquier lugar) y una administracin ligera y centralizada (mantenimiento cero de los programas de los ordenadores de los usuarios al residir stos en el servidor). Simplicidad: Un lenguaje debe ser tan simple como sea posible. Debe haber un nmero mnimo de conceptos con reglas simples para su combinacin. Un lenguaje de programacin debe esforzarse en la simplicidad sintctica y semntica. Simplicidad en la semntica implica que el lenguaje contiene un mnimo nmero de conceptos y estructuras. Estos conceptos deben ser naturales, rpidamente aprendidos, y fcilmente entendidos. With little danger of misinterpretation. La simplicidad requiere que un idioma incorpore tan pocos conceptos como sean posibles. El lenguaje debe ser una ayuda para el programador antes de que alcance el estado real de codificacin en programacin. Debe darle un conjunto de conceptos claro, simple y unificado para que pueda usarlos como primarios en el desarrollo de lenguajes. Para ello es deseable tener un nmero mnimo de conceptos diferentes, con las reglas de su combinacin lo ms simples y regulares posibles. Esta claridad semntica y de conceptos es el factor determinante del valor de un lenguaje. La simplicidad sintctica requiere que la sintaxis represente cada concepto en una y una nica forma y que sta interpretacin es tan legible como sea posible. Esto no necesariamente implica que la sintaxis es tan concisa como sea posible, desde que la concisin es a menudo contraproducente a la legibilidad. Excluye mltiples representaciones de la misma semntica conceptual y representaciones sintcticas que son fcilmente confusas. Uniformidad: Ya que la representacin de los objetos lleva implica tanto el anlisis como el diseo y la codificacin de los mismos. La estructura lgica de la BD definida mediante el LDD debe ser uniforme y acorde al modelo de datos del SGBD, para facilitar la manipulacin de esta estructura. En el caso especfico del LDD, el lenguaje del SGBD debe ser capaz de definir la estructura lgica de la BD, sin entrar en detalles de implementacin ni mecanismos en que se accede a los datos de la BD. La forma idnea de realizar lo anterior es mediante un lenguaje declarativo, el cual permite declarar la estructura del modelo de acuerdo al modelo de datos que utiliza el SGBD. Para el caso del LMD, el lenguaje del SGBD debe incluir formas de especificar qu se desea hacer con los datos (insertar, recuperar, modificar o borrar datos), sin entrar en detalles acerca de cmo se realizan estas operaciones. Igual que en el caso anterior, la mejor manera de realizar esto es mediante un lenguaje declarativo que permita especificar la estructura de la operacin a realizar, de acuerdo siempre con el modelo de datos utilizado por el SGBD.

Generalizacin y especializacin: La generalizacin dice que algo similar tambin es correcto, pero es difcil de implementar. Hay que especializar para facilitar la implementacin sin perder la utilidad del lenguaje. Resumen. (Cuidadito con poner esto como resumen de la tarea! Atte. Frank) Para el diseo de lenguajes de Programacin se debe considerar varios aspectos, entre ellos las tareas que se desean realizar y los datos a manejar. Generalmente diseamos un lenguaje porque necesitamos comunicarnos con algo de manera fcil y rpida, por ejemplo un archivo, un hardware, una base de datos; dependiendo de la tarea que se quiera realizar entonces diseamos. Una forma de cmo hacerla y cmo podemos relacionarlo con otras tareas para permitir que esa relacin pueda ser automatizada. Adems de las tareas que se van a realizar tambin se debe pensar en los tipos de datos que se van a manejar, por ejemplo nmeros, cadenas, ya que si se van a realizar operaciones, hay que pensar en que espacio de memoria se van a almacenar. Otras cosas a considerar son como se va a manejar la memoria, y a qu tipo de computadoras estarn enfocados.

2.3. OBJETIVOS Y FILOSOFIAS DEL DISEO DE LOS LENGUAJES DE PROGRAMACION. Objetivos: El principal objetivo del lenguaje es, por supuesto, servir de apoyo didctico en una materia de lenguajes de programacin, intrpretes y compiladores. Derivado de la persecucin de este objetivo surgen varias metas especficas y objetivos particulares: La apreciacin del desarrollo e implementacin de un lenguaje de programacin. La comprensin del procedimiento seguido en la formacin de un conjunto de reglas gramaticales que permiten identificar y nombrar sin ambigedad acciones y secuencias ordenadas de acciones sobre el contexto especfico de un problema en particular. Proporcionar un medio de familiarizacin con la realizacin de operaciones aritmticas usando una pila y su posterior extensin para la manipulacin de otros datos. La clara especificacin y adecuada documentacin del proceso de creacin o extensin de un lenguaje y sus resultados. En el diseo de Stop se ha tratado de seguir muchos de los principios usados en los modernos lenguajes de programacin hasta el punto donde su implementacin no sea demasiado complicada para el desarrollo de un proyecto semestral. Principalmente se ha buscado que sea regular, modular y estructurado. Filosofa del Diseo del Lenguaje: El lenguaje de programacin est pensado para la programacin evolutiva. Esta consiste en un mtodo de programacin basado en un ciclo de prueba y error donde se refina un programa hasta conseguir que haga lo que queremos. Esta forma de programar se aplica a problemas donde se desconoce que algoritmo nos llevar a la solucin. Esta situacin se da en investigacin y en la creacin de prototipos donde hay que realizar muchas pruebas hasta dar con la solucin ms apropiada. Para estos casos, es ms apropiado el uso de un intrprete que un compilador, ya que de esta forma se reduce el tiempo invertido en cada prueba. Para que un lenguaje sea efectivo en programacin evolutiva tiene que facilitar: la interaccin, la modificacin del programa y aportar instrucciones de alto nivel cercanas al problema. Estos tres puntos se consiguen cuando el lenguaje tiene las siguientes caractersticas: Estado de Interaccin. Entre prueba y prueba es interesante guardar el estado de ejecucin. De esta forma se evita repetir la ejecucin de las instrucciones necesarias para llegar al estado de ejecucin donde queremos realizar pruebas. Los programas implementa esta caracterstica mediante un mbito global dinmico que guarda funciones y variables mientras se utiliza el intrprete.

Sintaxis Cercana al Problema. Es ms efectivo escribir en una notacin cercana al problema que adaptarse a la sintaxis de un lenguaje de programacin. De esta forma se evita el paso de traduccin que tiene que realizar el programador antes de escribir una nueva sentencia del programa. Diseo del Lenguaje: Hasta el momento, lo que se ha visto ha sido una serie de operaciones aritmticas y de manipulacin de la pila. Todas estn indicadas de manera implcita a travs de una serie de trminos y convenciones que es necesario definir de forma ms precisa antes de continuar con otra cosa. Existen dos formas en las que puede representarse una pila y su funcionamiento; de sta depender la terminologa que se emplee. Nosotros hemos venido usando una representacin que conceptualiza a la pila como un arreglo que crece o es utilizado desde su base (el primer nivel) hacia arriba. Los datos entran y se toman de la base y desplazan o empujan a los elementos, que ya pudieran estar introducidos en la pila, hacia arriba. Identificaremos a los diversos elementos involucrados acorde al siguiente diagrama: Ingreso: Llamaremos nivel a cada una de las localidades con que cuente la pila y los enumeraremos a partir de 1. La base es el primer nivel. El tope de la pila lo identificaremos como el nivel en el que se encuentre el elemento con ingreso ms antiguo. Representaremos con una elipsis () el resto de las localidades o elementos en la pila. Por ltimo, mientras que nos hemos limitado a usar nmeros en la representacin de elementos que pueden ser introducidos en la pila, no estamos restringidos a esto. Dependiendo de su implementacin una pila puede albergar ms que nmeros. De forma genrica nos referiremos a estos elementos como objetos. Los diagramas que se han usado para ilustrar el contenido de la pila antes y despus de la aplicacin de una instruccin (que aparece como una operacin, funcin, operador o nombre en el cdigo del programa) sern identificados como diagramas de pila. En estos diagramas la elipsis se incluir slo cuando sea necesario recalcar la existencia del resto de la pila o su contenido; mientras no se indique lo contrario, siempre debe considerarse a la pila de Stop como infinita y factible de tener un contenido. Adicionalmente, en la presente descripcin: Las palabras clave de Stop se escriben en maysculas, aunque el lenguaje no es sensible a altas o bajas (lo que en otros ambientes es lo que se denomina case insensitive). Palabras clave de Stop se escriben usando un Font no proporcional. Elementos a substituir por otro valor se ilustran en itlicas. Conceptos y acciones a resaltar se subrayan. En las descripciones sintcticas, elementos repetitivos se denotan por el seguimiento de una elipsis. Salidas en pantalla se muestran en negritas. Comunicacin Humana: Las teoras de la comunicacin representan un punto de partida indispensable no slo para el estudio y la investigacin de la comunicacin, sino para el quehacer profesional prctico. El curso discute las aportaciones conceptuales de las perspectivas tericas ms recientes para el anlisis de la comunicacin masiva contempornea. Comunicacin interpersonal e intercultural, as como las habilidades interactivas necesarias para gerentes. Anlisis de las capacidades de transmisin de informacin de fibras pticas, tomando en cuenta los sistemas transmisores, los sistemas receptores y los requerimientos de acoplamiento ptico. Comportamiento de ondas electromagnticas en el interior de las fibras pticas. Receptores ptimos, transmisin coherente, amplificacin ptica, multicanalizacin por divisin de longitud de onda, redes pticas, SONET, ATM. La computadora, a diferencia de otras herramientas que en general apoyan el esfuerzo fsico de los humanos, fue inventada para facilitar el trabajo intelectual. Si el hombre tiene algn problema, por ejemplo sumar dos y dos, el diseador define el algoritmo que resuelve el problema, el programador lo codifica en un lenguaje de programacin, el cual la computadora es capaz de entender, luego la computadora ejecuta el algoritmo expresado como programa en el lenguaje de programacin en cuestin, y listo. La mquina le entrega al hombre la respuesta 4, sin que ste tuviera que esforzar sus neuronas. Se busca una comunicacin eficiente entre el programador y el ordenador. Un buen nivel de comunicacin se da cuando los programas son lebles. No ha de ser necesaria una documentacin externa al programa (minimizar). Es ms importante que un programa sea leble que escribible. Un programa se escribe una vez,

pero se lee muchas durante su depuracin, documentacin y mantenimiento. Tendencia actual a separar la interfaz de la implementacin de un mdulo. La sintaxis ha de reflejar la semntica. Reducir las manipulaciones implcitas. Coerciones (coerciones de PL/I o C). ON de BASIC para eventos o excepciones. Constructores y destructores de C++ (necesarios, pero complican el seguimiento del flujo de ejecucin). El lenguaje ha de representar los patrones de pensamiento humanos. No hay que crear una sintaxis pensada exclusivamente para un modelo de cmputo terico (l-calculus). Un conjunto de instrucciones de la mquina. facilitar la compilacin (forth). El programador no es un ordenador. Que el compilador entienda una estructura es posible que el programador no. Evitar incluso la posibilidad de escribirlas. Reducir el conocimiento contextual. El programador no funciona con una pila como el programa compilado. Prevencin y Deteccin de Errores: Tener una serie de defensas tal que si un error no es detectado por uno, este probablemente sea detectado por otro. Los errores deben ser detectados por el compilador, si un mecanismo no es capaz de detectar un error es necesario implementar otro que lo detecte, pero nunca ignorarlo. A continuacin se presentan prevencin y tolerancia de errores y fallos Prevencin de errores: El programador comete errores. Hay que prevenir los errores. El programador es su fuente. El programador no sabe lo que hace y el compilador ha de limitar sus acciones (EUCLID, PASCAL). Hacer imposible cierto tipo de errores.

Ejecutar datos control de flujo limitado Errores en el uso de datos Tipado fuerte Apuntadores errneos Gestin de memoria implcita (LISP, PROLOG, ML, etc). Hay que facilitar su deteccin, identificacin y correccin. Tener que declarar antes de utilizar. Evitar coerciones inductoras de errores. float a int por su prdida de precisin.

Comprobaciones en tiempo de ejecucin. ndice de array fuera de lmites. Control sobre los apuntadores a NULL. Prevencin y tolerancia de fallos: Hay dos formas de aumentar la fiabilidad de un sistema:

Prevencin de fallos: Se trata de evitar que se introduzcan fallos en el sistema antes de que entre en funcionamiento. La prevencin de fallos se realiza en dos etapas: Evitacin de fallos: Se trata de impedir que se introduzcan fallos durante la construccin del sistema. Eliminacin de fallos: Consiste en encontrar y eliminar los fallos que se producen en el sistema una vez construido Tolerancia de fallos: Se trata de conseguir que el sistema contine funcionando aunque produzcan fallos. En ambos casos el objetivo es desarrollar sistemas con modos de fallo bien definidos. Deteccin de errores: Por el entorno de ejecucin hardware (p.ej.. instruccin ilegal).

Ncleo o sistema operativo (p.ej. puntero nulo). Por el software de aplicacin. Duplicacin (redundancia con dos versiones). Comprobaciones de tiempo. Inversin de funciones. Cdigos detectores de error. Validacin de estado. Validacin estructural 2.4. DISEO DETALLADO. El diseo detallado tiene que ver con la especificacin de detalles algortmicos, representaciones concretas de datos, interconexiones entre funciones y estructuras de datos, y empaque del producto de programacin. El diseo detallado est fuertemente influenciado por el lenguaje de instrumentacin, pero no es lo mismo que la instrumentacin; el diseo detallado tiene que ver ms con aspectos semnticos y menos con detalles sintcticos que es la instrumentacin. El punto de inicio para el diseo detallado es una estructura arquitectnica a la que se le van a proporcionar los detalles algortmicos y las representaciones concretas de datos. Mientras que hay una fuerte tentacin para proceder directamente de la estructura arquitectnica a la instrumentacin, hay varias ventajas que pueden lograrse en el nivel intermedio de detalle proporcionado por el diseo detallado. La instrumentacin comunica los aspectos de la sintaxis del lenguaje de programacin, el estilo de codificacin la documentacin interna, y la insercin de pruebas y depuraciones al cdigo. Las dificultades que se encuentran durante la instrumentacin casi siempre se deben al hecho de que el instrumentador simultneamente est realizando anlisis, diseo y actividades de codificacin mientras intenta expresar el resultado final en un lenguaje de instrumentacin. El diseo detallado permite el diseo de algoritmos y representaciones de datos en un nivel ms alto de abstraccin y notacin que el que proporciona el lenguaje de instrumentacin. El diseo detallado separa la actividad de diseo a bajo nivel de la instrumentacin, igual que las actividades de anlisis y diseo aslan las consideraciones de lo que se desea de la estructura que lograr los resultados deseados. Una especificacin adecuada de diseo detallado minimiza el nmero de sorpresas durante la instrumentacin del producto.

2.5. CASO DE ESTUDIO. (Lo que me entregaron fue un anteproyecto de lo que iba hacer el compilador que funcionalidad y usabilidad tendr. Pero faltara complementar con lo siguiente. Atte. Frank) Explicar el lenguaje que se va a desarrollar en el curso:

Por qu se va a desarrollar (problemtica)? Vocabulario del lenguaje (lxico palabras clases que hacen). Reglas de estructura (gramtica, sintaxis). Semntica. Si existe cdigo intermedio. Si se mejora ese cdigo. El cdigo objeto final.

Unidad 4 Analizador Sintactico

Un analizador sintctico (en ingls parser) es una de las partes de un compilador que transforma su entrada en un rbol de derivacin. El anlisis sintctico convierte el texto de entrada en otras estructuras (comnmente rboles), que son ms tiles para el posterior anlisis y capturan la jerarqua implcita de la entrada. Un analizador lxico crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son procesados por el analizador sintctico para construir la estructura de datos, por ejemplo un rbol de anlisis o rboles de sintaxis abstracta. El anlisis sintctico tambin es un estado inicial del anlisis de frases de lenguaje natural. Es usado para generar diagramas de lenguajes que usan flexin gramatical, como los idiomas romances o el latn. Los lenguajes habitualmente reconocidos por los analizadores sintcticos son los lenguajes libres de contexto. Cabe notar que existe una justificacin formal que establece que los lenguajes libres de contexto son aquellos reconocibles por un autmata de pila, de modo que todo analizador sintctico que reconozca un lenguaje libre de contexto es equivalente en capacidad computacional a un autmata de pila. Los analizadores sintcticos fueron extensivamente estudiados durante los aos 70 del siglo XX, detectndose numerosos patrones de funcionamiento en ellos, cosa que permiti la creacin de programas generadores de analizadores sintticos a partir de una especificacin de la sintaxis del lenguaje en forma Backus-Naur por ejemplo, tales y como yacc, GNU bison y javaCC.

You might also like