You are on page 1of 23

UNIDAD I. INTRODUCCION A LA PROGRAMACION DE SISTEMAS 1.1. QUE ES Y QUE ESTUDIA LA PROGRAMACION DE SISTEMAS ¿QUE ES?

Un sistema es un conjunto de componentes que interaccionan entre si para lograr un objetivo común. Las personas se comunican con el lenguaje, que es un sistema muy desarrollado formado por palabras y símbolos que tienen significado 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 programación es el proceso de convertir las especificaciones a grandes rasgos de los sistemas en instrucciones de máquina 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 desempeñan una función 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. También participan en las decisiones relativas a reducciones o ampliaciones de hardware y/o software. Programación de Sistemas Conceptos y Aplicaciones Se entiende por programación de sistemas el conjunto de programas necesario para que una computadora de una imagen coherente y monolítica ante sus usuarios. Es un área especializada dentro de las ciencias de la computación. Así, mediante la programación de sistemas, no solo se manejan las computadoras por medio del lenguaje maquina (0 y 1) sino por otros sistemas operativos, sin lo cual sería muy difícil la interacción con la maquina.

El

estudio

de

la

programación

de

sistemas

En esta área se estudia la teoría de máquinas y su aplicación en el diseño de sistemas digitales y de arquitectura de computadoras. Áreas específicas: 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 están diseñando 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 simultáneamente un mismo documento. La plataforma, denominada PINAS, es un sistema de edición cooperativa (AllianceWeb) y un sistema de notaciones sobre documentos complejos (COARSY) los cuales podrán permitir a coautores o revisores distribuidos en diferentes sitios del mundo, compartir y anotar observaciones sobre documentos complejos tales como capítulos de libro, artículos, reportes, expedientes médicos, etc.

Sistemas

para

arquitecturas

paralelas

y

distribuidas

Diseño de sistemas operativos para arquitecturas paralelas y sistemas distribuidos, particularmente en lo que se refiere a manejo de memoria y calendarización de procesos. Redes y protocolos, programación distribuida, diseño y evaluación de "middleware" enfocados a aplicaciones de minería de datos y multimedia. Diseño de algoritmos paralelos y distribuidos. Herramientas para programación paralela y distribuida. Sistemas de tiempo real

Relacionados con diversos aspectos de la planificación de los sistemas de tiempo real entre los cuales se encuentran los siguientes: planificación tolerante a fallas en sistemas de tiempo real, planificación de tiempo real en situaciones de sobrecarga, esto es en aplicaciones en donde se demande del procesador más del 100% de su capacidad, y planificación de sistemas de tiempo real aplicada al control de procesos y técnicas de planificación de tareas de tiempo real con restricciones de consumo de poder. Diseño y programación 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 aplicación final. El resultado se convierte en aplicaciones monolíticas difíciles de mantener. Otros lenguajes, en contraste, parten del concepto de módulo y proporcionan mecanismos de encapsulamiento y abstracción que ayudan a programar sistemas grandes, ya que el trabajo del equipo de programación y posterior mantenimiento del sistema se ve facilitado. Uno de estos lenguajes es Ada, que está fuertemente fundamentado en la disciplina de la ingeniería del software por lo que es el lenguaje más apropiado en la programación de sistemas empotrados industriales grandes.Ada asume la necesidad de la compilación separada y proporciona dos mecanismos para realizarla, uno ascendente y otro descendente: o El mecanismo descendente (descomposición): consiste en dividir un sistema complejo en componentes más 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 después que la unidad de la que forman parte. o El mecanismo ascendente (abstracción): consiste en la especificación de los aspectos esenciales de un componente, posponiendo su diseño detallado. Es apropiado para la creación 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 diseño de sistemas mediante módulos permite encapsular partes del sistema mediante interfaces bien definidas y permiten utilizar técnicas que facilitan el desarrollo de sistemas grandes como: Ocultación de información.

. .Unidades Genéricas: ayudan a realizar código reutilizable. MC GRAW HILL.-ANALISIS Y DISEÑO DE SISTEMAS DE INFORMACIÓN. unidades de programa en Ada son las siguientes: .Tarea: define una computación que puede llevarse a cabo en paralelo con otras computaciones. Pueden ser subprogramas o paquetes. con el nombre de la unidad y la extensión .Unidad Protegida: puede coordinar el acceso a datos compartidos en el procesamiento paralelo.adb para cuerpos.Paquete: define una colección de entidades. .Subprograma que define los algoritmos ejecutables.Las Tipos abstractos Compilación de datos. Los paquetes son el principal mecanismo de agrupación de Ada. Aparece en el estándar Ada 95. . El guión "-" se ha de utilizar en sustitución del punto ". En o o o Ada. separada." para unidades hijas y subunidades. JAMES A. Documental: 1. SENN. . Los procedimientos y las funciones son subprogramas. las unidades de compilación de de subprogramas o pueden ser: Especificaciones Especificaciones Cuerpos de subprogramas paquetes paquetes Algunos compiladores pueden establecer ciertos requisitos para las unidades de compilación. Por ejemplo. GNAT en su configuración predefinida exige que cada unidad esté definida en un fichero. 2da EDICION.ads para especificaciones y .

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 paréntesis izquierdo hasta su correspondiente end o paréntesis derecho. Una impresora estética analiza un programa y lo imprime de forma que la estructura del programa resulte claramente visible. como intentar utilizar una variable real como apuntador. Se llamaría a sí misma de manera recursiva para calcular el valor de la expresión velocidad*60. la rutina descubriría que tiene que calcular la suma de dos expresiones. Para una proposición de asignación. sino que también analiza el texto del programa. puede detectar errores de lógica. Verificadores estáticos.1. Intérpretes. Así. puede proporcionar palabras clave de manera automática (por ejemplo. En el hijo derecho de la raíz. En lugar de producir un programa objeto como resultado de una traducción. un verificador estático puede detectar si hay partes de un programa que nunca se podrán ejecutar o si cierta variable se usa antes de ser definida. lo analiza e intenta descubrir errores potenciales sin ejecutar el programa. Además. y llamaría a una rutina para evaluar la expresión de la derecha y después almacenaría el valor resultante en la localidad de memoria asociada con el identificador posición. por ejemplo. Por ejemplo. el editor de estructuras puede realizar tareas adicionales útiles para la preparación de programas. un intérprete podría construir un árbol como el de la figura 1 y después efectuar las operaciones de los nodos conforme “recorre” el árbol. El editor de estructuras no sólo realiza las funciones de creación y modificación de textos de un editor de textos ordinario. puede comprobar si la entrada está formada correctamente. 3. Algunos ejemplos de tales herramientas son: 1. Impresoras estéticas. Por ejemplo. La parte de análisis a menudo es similar a la que se encuentra en los compiladores de optimización. En la raíz descubriría que tiene que realizar una asignación. De esa manera. empleando las técnicas de verificación de tipos. imponiendo al programa fuente una estructura jerárquica apropiada. Editores de estructuras. la salida de tal editor suele ser similar a la salida de la fase de análisis de un compilador.2 Herramientas Desarrolladas con Teoria de Programacion de Sistemas Muchas herramientas de software que manipulan programas fuente realizan primero algún tipo de análisis. cuando el usuario escribe while. y las proposiciones pueden aparecer con una indentación proporcional a la profundidad de su anidamiento en la organización jerárquica de las proposiciones. Un verificador estático lee un programa. Un editor de estructuras toma como entrada una secuencia de órdenes para construir un programa fuente. un intérprete realiza las operaciones que implica el programa fuente. 2. Después sumaría ese valor de la variable . 4. Además. los comentarios pueden aparecer con un tipo de letra especial.

Sin embargo las variables del lenguaje no representan localidades de memoria. Muchas veces los intérpretes se usan para ejecutar lenguajes de órdenes. la mayor parte de la cual es texto para componer. Tradicionalmente. Del mismo modo algunos lenguajes de “muy alto nivel”. como subíndices o superíndices.inicial. al lenguaje ensamblador o de máquina de algún computador. 5. sino señales lógicas (0 o 1) o grupos de señales en un circuito de conmutación. La salida es el diseño de un circuito en un lenguaje apropiado. normalmente son interpretados. Sin embargo. pues cada operador que se ejecuta en un lenguaje de órdenes suele ser una invocación de una rutina compleja. porque hay muchas cosas sobre los datos. como un editor o un compilador. Compiladores. La parte de análisis de cada uno de los siguientes ejemplos es parecida a la de un compilador convencional. que no se pueden deducir en el momento de la compilación. b) Compiladores de circuitos de silicio. Un formador de textos toma como entrada una cadena de caracteres. al parecer. pero alguna incluye órdenes para indicar párrafos. a) Formadores de textos. Un compilador de circuitos de silicio tiene un lenguaje fuente similar o idéntico a un lenguaje de programación convencional. figuras o estructuras matemáticas. como FORTRAN. como el tamaño y la forma de las matrices. Un intérprete de consultas traduce un predicado que contiene operadores relacionales y boléanos a órdenes para buscar en una base de datos registros que satisfagan ese predicado. c) Intérpretes de consultas. no relacionados donde la tecnología de los compiladores se usa con regularidad. Referencias: . hay lugares. se concibe un compilador como un programa que traduce un programa fuente.

y no solo transmite descripciones sino también emociones. -. la ironía o el sutil arte de la poesía demuestran la capacidad del lenguaje natural para transmitir informaciones (en el sentido lato de la palabra) en distintos planos Un lenguaje se considera como un conjunto de oraciones. el hindi o cualquier otro comúnmente hablado en algún momento y en algún lugar. porque ha sido formado paulatinamente mediante el uso del grupo social. el inglés. los lenguajes naturales se caracterizan por las siguientes propiedades: -. etc. El contenido metafórico. por ejemplo) fueron impulsados en algún momento por motivos políticos de identidad nacional. que usualmente es infinito y se forma con combinaciones de palabras del diccionario. Un lenguaje es la función que expresa pensamientos y comunicaciones entre la gente.1. -. son lenguajes naturales el castellano. El lenguaje natural posee una gran riqueza significativa. ya que algunos lenguajes que hoy se consideran naturales (el indonesio o el hebreo moderno. Es necesario que esas combinaciones sean correctas(con respecto a sintaxis) y tengan sentido(con respecto a la semántica). Así. alemán. Por otro lado la sintaxis de un LN puede ser modelada fácilmente por un lenguaje formal. En este punto podemos distinguir entre dos clases de lenguajes: los lenguajes naturales(ingles. etc. órdenes u otros mensajes.) y lenguajes formales(matemático. Esta función es llevada a cabo por medio de señales y vocales(voz) y posiblemente por signos escritos(escritura).) El Lenguaje Natural(LN) es el medio que utilizamos de manera cotidiana para establecer nuestra comunicación con las demás personas Este tipo de lenguaje es el que nos permite el designar las cosas actuales y razonar a cerca de ellas. Otra propiedad de los lenguajes naturales es la polisemantica. el latín. lógico. Esta exigencia de la falta de deliberación en la formación del idioma no debe tomarse rígidamente. En un primer resumen.Dificultad o imposibilidad de una formalización completa. a través de una dinámica histórica no deliberada.3. es decir la posibilidad de que una palabra en una oración tenga diversos significados.1 LENGUAJES NATURALES Se llama lenguaje natural al que utilizan los seres humanos en su comunicación ordinaria. similar a los utilizados en las matemáticas y la lógica.La importancia de su carácter expresivo debido grandemente a la riqueza del componente semántico(polisemantica). fue desarrollado y organizado a partir de la experiencia humana y puede ser utilizado para analizar situaciones altamente complejas y razonar muy sutilmente. La riqueza de sus componentes semánticos da a los lenguajes naturales su gran poder expresivo y su valor como una herramienta para razonamiento sutil. .Desarrollados por enriquecimiento progresivo antes de cualquier intento de formación de una teoría. español. las sugerencias.

. Los lenguajes formales son exentos de cualquier componente semántico fuera de sus operadores y relaciones.El lenguaje formal es aquel que el hombre ha desarrollado para expresar las situaciones que se dan en especifico en cada área del conocimiento científico. es la manipulación de lenguajes naturales usando herramientas de computación. Las aplicaciones del Procesamiento de Lenguajes Naturales son muy variadas. ni construir sentidos derivados. facilita el desarrollo de programas que realicen tareas relacionadas con el lenguaje o bien. ya que su alcance es muy grande. ya que forman el enlace necesario entre los lenguajes naturales y su manipulación por una maquina. Por ejemplo. . Las palabras y oraciones de un lenguaje formal son perfectamente definidas(una palabra mantiene su el mismo significado prescindiendo de su contexto o uso. Una meta fundamental de la Inteligencia Artificial(IA). . ni introducir nuevas palabras. . el uso de estos lenguajes naturales.Componente semántico minimo. el potencial de la construcción computacional. tareas que se realizan espontáneamente cuando se utiliza el lenguaje natural. Por un lado es una ventaja. El uso del lenguaje natural (LN) en la comunicación hombre-maquina es a la vez una ventaja y un obstáculo con respecto a otros medios de comunicación. o de otra naturaleza. En resumen las características de los lenguajes formales son las siguientes: .Completa formalización y por esto. . desarrollar modelos que ayuden a comprender los mecanismos humanos relacionados con el lenguaje. algunas de las aplicaciones del PLN son: . en esta. El PLN (PROCESAMIENTO COMPUTACIONAL DEL LENGUAJE NATURAL) es la utilización de un lenguaje natural para comunicarnos con la computadora.Posibilidad de incrementar el componente semántico de acuerdo con la teoría a formalizar. debiendo esta entender las oraciones que le sean proporcionadas. fisica. el usuario no puede hablar sobrentendidos.Se desarrollan de una teoría preestablecida. ingeniería eléctrica.La importancia del rol de los números. Los lenguajes formales pueden ser utilizados para modelar una teoría de la mecánica. Su uso también es a la vez un obstáculo por que la computadora tiene una limitada comprensión del lenguaje.La sintaxis produce oraciones no ambiguas. en la medida en que el locutor no tiene que esforzarse para aprender el medio de comunicación a diferencia de otros medios de interacción como lo son los lenguajes de comando o las interfaces gráficas(4° Generación). matemática. con la ventaja de que en estos toda ambigüedad es eliminada. los lenguajes de programación juegan un papel importante.

tomando en cuenta lo que se quiere expresar en cada oración. en un 99%. Resolución cooperativa de problemas: La computadora debe tener la capacidad de cooperar con los humanos para la solución de problemas complejos. y no solo palabra por palabra. realizando un análisis detallado del contenido y no solo la truncando las primeras Lineas de los párrafos. ya que se refiere a la enseñanza asistida por computadora. Recuperación de la información: en esta aplicación. la demanda de información por parte del ordenador al usuario. Tutores inteligentes: La aplicación del PLN en este aspecto. al tener esta la capacidad de evaluar al educando y tener la capacidad de adaptándose a cada tipo de alumno. Una aproximación a este tipo de traductores es el babylon. que son accesibles por la mayoría de los usuarios. ya que las computadoras de hoy ya tienen esta característica. debiendo existir una excelente interactividad entre el usuario y el ordenador. debiendo esta ser aprox. incluyendo también. existiendo ya programas comerciales.Traducción automática: se refiere más que nada a la traducción correcta de un lenguaje a otro. Extracción de Información y Resúmenes: Los nuevos programas. proporcionando datos e información. esta busca y le dice que es lo que tiene referente al tema. el reconocimiento de voz puede tener dos posibles usos: para identificar al usuario o para procesar lo que el usuario dicte. deben tener la capacidad de crear un resumen de un documento basándose en los datos proporcionados. viene siendo más académico. . ejemplo: ViaVoice. Reconocimiento de Voz: Esta es una aplicación del PLN que más éxito ha obtenido en la actualidad. un claro ejemplo seria el siguiente: Una persona llega a la computadora y le dice(en LN) que es lo que busca.

2 LENGUAJES ARTIFICIALES Los lenguajes de programación no se hablan. Pascal…) para “explicar” a la computadora las acciones a realizar. Cabe advertir que el uso de esta terminología en nada prejuzga acerca de la relación entre el . C. Por el contrario. dentro de la ventana de programa y en la secuencia adecuada. En sí. el software de desarrollo se basaba fundamentalmente en Lenguajes Artificiales (Basic. párrafos. la palabra "artificial" nos dice algo sobre el plan del programador. el lenguaje engloba a distintos medios utilizados para sostener la comunicación. Aunque el español o cualquier otro idioma son también producto de artificio. muy pocos programadores estarían dispuestos a dialogar en FORTRAN. El lenguaje verbal emplea signos que transmiten significados y que pueden articularse formando estructuras complejas que adquieren nuevas capacidades de significación (morfemas. en la actualidad nos encontramos con distintos lenguajes para programar y también los campos de aplicación son variados y completamente distintos. Su fin no es que se entiendan en la comunicación oral. los programas y funciones de los que nos provee. En las distintas ramas de la ciencia nos encontramos con lenguajes artificiales o mejor conocidos como lenguajes formales que limitan su alcance a su materia de estudio. Pero aún suponiendo que fuera posible hablar a una computadora (lo cual es completamente concebible). Concretadamente y después de esta breve introducción. De este modo la tarea se simplifica enormemente y se reduce a disponer. textos). Cobol. su creación a lo largo de siglos no fue plenamente consciente y racional como ha sido la creación de lenguajes de programación.1. El lenguaje nos permite hacer la abstracción de ideas y conceptualizar puntos por medio de la comunicación. Como concepto general.3. Hasta hace pocos años. En este terreno resulta exacta la imagen que nos da la ficción científica. De acuerdo a la complejidad del problema a resolver será necesario hacer una selección adecuada del lenguaje de programación (incluso se puede generar el lenguaje de programación propio) que permita resolver de manera eficiente el problema. Es famosa su tesis según la cual el lenguaje es la casa del ser (Haus des Seins) y la morada de la esencia del hombre. palabras. Filósofos como Martin Heidegger consideran que el lenguaje propiamente dicho es sólo privativo del hombre. Los llamados lenguajes artificiales se denominan así por la oposición al lenguaje natural. oraciones. ya que las computadoras actuales casi no toman en cuenta las ondas sonoras. Los programadores se dan cuenta de esto cuando distinguen entre lenguajes artificiales o programación y lenguajes "naturales" como el español y el inglés. lo cual significa también una gran diferencia. los “Orientados a Objetos” permiten que el programador ignore el lenguaje comprensible para la máquina poniendo a su disposición una serie de objetos preprogramados.

pero la base y la estructura del lenguaje técnico son las mismas del lenguaje natural del que se parte. sin referencia alguna a la realidad concreta. y que el científico considera relevante ("protón". A veces la necesidad de precisión es tal que el uso de un lenguaje técnico no es suficiente: las palabras utilizadas pueden traer a la mente asociaciones no queridas. a su modo. Las ciencias utilizan comúnmente este procedimiento para otorgar mayor precisión al lenguaje. Los términos definidos pueden haber sido tomados del lenguaje natural (así. tal como en el álgebra o en la lógica formal. expresadas en fórmulas. decimos: (a+b) = (b+a) Esta expresión formal puede verse como un mero cálculo. Todos ellos hablan un mismo idioma. Entre los Lenguajes Artificiales suelen distinguirse el lenguaje técnico y el formal. la definición de "robo"-en un texto jurídico es más precisa y restringida que en su sentido usual). Así un cirujano dirá: "el paciente requiere una apendicectomía". con un mayor grado de univocidad en los conceptos relevantes para determinado sector del conocimiento. Pero no por esto dejaremos de reconocer que los símbolos son en principio arbitrarios y que no existen significados "naturales" de los términos. "la contraparte ha quedado en rebeldía en la absolución de posiciones" y un psicólogo hablará de "la influencia del edipo en el superego". y la vaguedad (o a veces la ambigüedad) no puede en ocasiones reducirse aceptablemente. por . artificial. por ejemplo. por ejemplo. intervenir individualmente de modo apreciable en su conformación. también el lenguaje natural es. suponer que a equivale a 3. Aparece cuando se otorga a determinados vocablos o expresiones un significado restringido. pero cada uno agrega a esta base común términos estrictamente definidos que constituyen el lenguaje específico (o lajerga profesional) de cada ciencia. El cálculo queda entonces interpretado. por ejemplo. a través de definiciones precisas. 2) Lenguaje formal. Hablamos de lenguaje "natural" en cuanto éste aparece como dado para los hablantes de una comunidad lingüística: desde que nacemos aprendemos el lenguaje de nuestro grupo social sin que podamos. o puede haberse creado un vocablo para nombrar una categoría hasta entonces inexistente en el lenguaje. de hecho. y que b vale 5. "sincronía". El lenguaje técnico podría denominarse. con mayor propiedad. un abogado. “Lenguaje natural con términos técnicos”. En tales casos suele resultar necesario o conveniente el recurso a los lenguajes formales. En álgebra. su conmutatividad). y resulta aplicable a un sector de la realidad (sabremos. En este último sentido. Pero también podemos asignar valores a los símbolos arbitrarios. 1) Lenguaje técnico. de cuyo significado se prescinde para dirigir la atención exclusivamente sobre las relaciones entre dichos símbolos. que conserva su vocabulario general y su construcción gramatical. Un lenguaje formal es aquel en el que se han eliminado los términos del lenguaje ordinario y se emplean únicamente símbolos arbitrarios. "parsec"). y en este sentido la comprendemos como la enunciación de cierta propiedad de la suma (a saber.lenguaje y la realidad.

receptor o decodificador. ruido (barreras o interferencias) y la retroalimentación o realimentación (feed-back. ruido (barreras o interferencias) y la retroalimentación o realimentación (feed-back. canal.ejemplo. código (reglas del signo. mensaje de retorno o mensaje secundario). Elementos del Proceso de la comunicación Los elementos de la comunicación humana son: fuente.3 Proceso De La Comunicación La comunicación es un fenómeno inherente a la relación grupal de los seres vivos por medio del cual éstos obtienen información acerca de su entorno y de otros entornos y son capaces de compartirla haciendo partícipes a otros de esa información. Los elementos o factores de la comunicación humana son: fuente. código (reglas del signo. mensaje primario (bajo un código). 1. por el emisor y “decodificado” por el receptor”. organización…) que elige y selecciona los . canal. emisor o codificador. receptor o decodificador. Se considera una categoría polisémica en tanto su utilización no es exclusiva de una ciencia social en particular. que puede traducirse como “poner en común. emisor o codificador. el contenido que se enviará. • Fuente: Es el lugar de donde emana la información. En la transmisión y la recepción de esa información se utiliza un código específico que debe ser “codificado”. la palabra comunicación deriva del latín “commūnicāre”. símbolo). • Emisor o codificador: Es el punto (persona.3. Proceso de transmisión de información de un emisor (A) a un receptor (B) a través de un medio ©. mensaje primario (bajo un código). los datos. símbolo). mensaje de retorno o mensaje secundario). compartir algo”. teniendo connotaciones propias de la ciencia social de que se trate. que si tenemos tres vacas y compramos cinco tendremos el mismo número de animales que si tenemos cinco y compramos tres). Etimológicamente. pues la información que ésta extrae de su medio ambiente y su facultad de transmitir mensajes serán claves para sacar ventaja del modo de vida gregario. La comunicación es de suma importancia para la supervivencia de especies gregarias. en conclusión: de donde nace el mensaje primario.

en el caso de la voz. en el caso de una conversación telefónica. los codifica para poder llevarlo de manera entendible al receptor. Ejemplos: el aire. la ortografía defectuosa. • Canal: Es el medio a través del cual se transmite la información-comunicación.signos adecuados para transmitir su mensaje. y el receptor activo o perceptor ya que es la persona que no sólo recibe el mensaje sino que lo percibe y lo almacena. o la distorsión de la imagen de la televisión. todo lo que nos rodea son códigos. para combinarlos de manera arbitraria porque tiene que estar de una manera adecuada para que el receptor pueda captarlo. la alteración de la escritura en un viaje. Un ejemplo claro es el código que utilizan los marinos para poder comunicarse. se puede dar en cualquiera de sus elementos. entonces solo hay información más no comunicación. Comprende todo aquello que es descrito por el mensaje. organización…) al que se destina el mensaje. • Código: Es el conjunto de reglas propias de cada sistema de signos y símbolos que el emisor utilizará para trasmitir su mensaje. la distracción del receptor. la afonía del hablante. Si no hay realimentación. • Mensaje: Es el contenido de la información (contenido enviado): el conjunto de ideas. sentimientos. acontecimientos expresados por el emisor y que desea trasmitir al receptor para que sean captados de la manera que desea el emisor. siempre y cuando se reciba una respuesta (actitud. el pasivo que es el que sólo recibe el mensaje. Puede ser positiva (cuando fomenta la comunicación) o negativa (cuando se busca cambiar el tema o terminar la comunicación). El mensaje es la información. Existen dos tipos de receptor. Logrando la interacción entre el emisor y el receptor. la sordera del oyente. el alumno que no atiende aunque esté en silencio. • Receptor o decodificador: Es el punto (persona. . estableciendo una conexión entre el emisor y el receptor. • Situación: Es el tiempo y el lugar en que se realiza el acto comunicativo. en este tipo de receptor se realiza lo que comúnmente denominamos el feed-back o retroalimentación. En el emisor se inicia el proceso comunicativo. • Retroalimentación o realimentación (mensaje de retorno): Es la condición necesaria para la interactividad del proceso comunicativo. realiza un proceso inverso al del emisor ya que en él está el descifrar e interpretar lo que el emisor quiere dar a conocer. es decir. la gramática de algún idioma. los algoritmos en la informática…. El mensaje es recibido tal como el emisor quiso decir. conducta…) sea deseada o no. Mejor conocido como el soporte material o espacial por el que circula el mensaje. el hilo telefónico. • Interferencia o barrera: Cualquier perturbación que sufre la señal en el proceso comunicativo. Son las distorsiones del sonido en la conversación. • Referente: Realidad que es percibida gracias al mensaje.

Escribir el "listing" en lenguaje de ensamblador con el código en lenguaje de máquina correspondiente 6. Construir las instrucciones en lenguaje de máquina en el formato apropiado 4.4. operandos y modos de direccionamiento. Un mismo procesador puede tener diferentes programas ensambladores con diferentes lenguajes de entrada. a un fichero objeto que contiene código máquina u operativos. En esencia. El propósito para el que se crearon este tipo de aplicaciones es la de facilitar la escritura de programas.1. el ensamblador debe realizar las siguientes tareas: 1.cada uno de los cuales puede generar muchas instrucciones en lenguaje ensamblador a bajo nivel codifican instrucciones simbólicas . ejecutable directamente por la máquina para la que se ha generado. informático que se encarga de traducir un fichero fuente o instrucciones mnemónicas escrito en un lenguaje ensamblador. evitando tediosos cálculos y direccionamiento manual después de cada modificación del programa. que éste procesa y ejecuta al hallarlos en el programa en lenguaje . STX) a su código equivalente en lenguaje de máquina 2. El programa lee el fichero escrito en lenguaje ensamblador y sustituye cada uno de los códigos mnemotécnicos que aparecen por su código de operación correspondiente en sistema binario para la plataforma que se eligió como destino en las opciones específicas del ensamblador. LDA.1 ENSAMBLADORES Un lenguaje ensamblador se refiere a un tipo de programa. que es el único código entendible por la computadora. Convertir las constantes definidas en el programa en su verdadera representación 5. Convertir los operandos simbólicos (las etiquetas o variables) en las direcciones correspondientes de los operandos 3. El uso de referencias simbólicas es una característica básica de los ensambladores.codifican comandos poderosos .como c y pascal . La entrada al programa ensamblador es uno o varios ficheros de texto plano que contiene un programa o secuencia de instrucciones a ejecutar por el procesador.4 Traductor y Su Estructura 1. Convertir los códigos ("opcode" o mnemónicos: ej.cada una de las cuales genera una instrucción en lenguaje de máquina Funciones De Un Ensamblador La tarea fundamental de un ensamblador es traducir un programa en lenguaje de ensamblador al código correspondiente en lenguaje de máquina. El lenguaje ensamblador no sólo permite utilizar los nombres de las instrucciones. Procesar las directrices al ensamblador (las directrices son instrucciones o comandos dirigidos al ensamblador. pero todos ellos producen idéntico código (o lenguaje) máquina. Programadores que escriben en un lenguaje de alto nivel . sino que también permite especificar etiquetas y definir porciones de memoria para almacenar datos.El lenguaje en el que se escriben estas instrucciones se conoce como lenguaje ensamblador. es en la práctica imposible. ya que escribir directamente en código binario.

-Ensambladores de alto nivel.de ensamblador. esto le permite implementar software y hardware de un manera más consciente. siempre y cuando está sea físicamente capaz de hacerlo . d)El ensamblador brinda la oportunidad de conocer más a fondo la operación de su PC. más compactos y tienen mayor capacidad que los creados en otros lenguajes. fueron muy populares en las décadas de los 50 y los 60.-Ensambladores modulares. permiten utilizar estructuras de programación más complejas propias de los lenguajes de alto nivel. como reservar memoria para variables. Son de muy bajo nivel. Son ensambladores que aparecieron como respuesta a una nueva arquitectura de procesadores de 32 bits. macros). Ensambladores modulares 32-bits o de alto nivel.-Ensambladores básicos. f)Los programas en ensamblador son más rápidos. antes de la generalización de los lenguajes de alto nivel. algunas ventajas de codificar en lenguaje ensamblador son: a)Proporciona más control sobre el manejo particular de los requerimientos de hardware. Hacen todo lo que puede hacer un ensamblador. A pesar del hecho de que codificar en un lenguaje de alto nivel es más productivo. estas directrices no se traducen a lenguaje de máquina. permitiendo también el uso de macros. muchos de ellos teniendo compatibilidad hacia atrás pudiendo trabajar con programas con estructuras de 16 bits. o macro ensambladores. y además proporcionan una serie de directivas para definir e invocar macroinstrucciones (o simplemente. Tipos de ensambladores Podemos distinguir entre tres tipos de ensambladores: 1. e) Conserva usted el control total de lo que deberá hacer su PC. si no que el ensamblador ejecuta alguna acción. Además. reconoce una serie de directivas (o meta instrucciones) que indican ciertos parámetros de funcionamiento del ensamblador. Descendientes de los ensambladores básicos. g)Pueden optimizarse al máximo sus programas (tanto en tamaño como en velocidad de ejecución). 2. entre otras). parámetros y cosas tales como los modos de direccionamiento. 3. . Además de realizar la misma tarea que los anteriores. b)Genera módulos ejecutables más pequeños y más compactos c)Con mayor probabilidad tiene una ejecución más rápida. y su tarea consiste básicamente en ofrecer nombres simbólicos a las distintas instrucciones.

lo que se denominó lenguaje máquina.2 COMPILADORES Un compilador es querer traducir un programa de un lenguaje de alto nivel. Los trabajos de investigación se orientaron hacia la creación de un lenguaje que expresara las distintas acciones a realizar de una manera lo más sencilla posible para el hombre. pero más fácil de manejar. Pronto los primeros usuarios de estos ordenadores descubrieron la ventaja de escribir sus programas mediante claves más fáciles de recordar que esos códigos. El primer compilador de FORTRAN tardó 18 años-persona en realizarse y era muy sencillo.1. al final. para luego compilarlo a un programa más manejable por una computadora. a otro lenguaje de nivel inferior (típicamente lenguaje máquina).4. En 1954 se empezó a desarrollar un lenguaje que permitía escribir fórmulas matemáticas de manera traducible por un ordenador. En el caso particular de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje traducido de bajo nivel. A pesar de todo. Fue el primer lenguaje de alto nivel y se introdujo en 1957 para el uso de la computadora IBM modelo 704. Un compilador acepta programas escritos en un lenguaje de alto nivel y los traduce a otro lenguaje. Los compiladores son programas o herramientas encargadas de compilar. En un principio. existen dos grandes formas de ejecutar programas: programas compilados (previamente pasados por un compilador) y programas interpretados (necesitan pasar por un intérprete para ejecutarse en tiempo real). estas máquinas ejecutaban instrucciones consistentes en códigos numéricos que señalaban a los circuitos de la máquina los estados correspondientes a cada operación. que puede ejecutarse tantas veces como se quiera. le llamaron FORTRAN (FORmulae TRANslator). Un compilador toma un texto (código fuente) escrito en un lenguaje de alto nivel y lo traduce a un lenguaje comprensible por las computadoras (código objeto). el lenguaje ensamblador seguía siendo el de una máquina. Como un ejemplo de . se emplea el término compilador. Surgió así por primera vez el concepto de un traductor como un programa que traducía un lenguaje a otro lenguaje. Básicamente. en 1952 para el lenguaje de programación A-0. Estas claves constituyen los llamados lenguajes ensambladores. Este desarrollo de FORTRAN estaba muy influenciado por la máquina objeto en la que iba a ser implementado. Historia En 1946 se desarrolló el primer ordenador digital. La tarea de realizar un compilador no fue fácil. generando un programa equivalente independiente. Este proceso de traducción se conoce como compilación. De esta manera un programador puede diseñar un programa en un lenguaje mucho más cercano a como piensa un ser humano. todas esas claves juntas se traducían manualmente a lenguaje máquina. El primer compilador fue escrito por Grace Hopper. En 1950 John Backus dirigió una investigación en IBM sobre un lenguaje algebraico.

Partes Normalmente los de compiladores están un divididos en dos compilador partes: Front End: es la parte que analiza el código fuente. aunque Pascal y C han sido alternativas muy usadas. Esta división permite que el mismo Back End se utilice para generar el código máquina de varios lenguajes de programación distintos y que el mismo Front End que sirve para analizar el código fuente de un lenguaje de programación concreto sirva para generar código máquina en varias plataformas distintas. Compiladores de una sola pasada: generan el código máquina a partir de una única lectura . El primer compilador autocontenido. realizada por el Front End. específico de una plataforma. por lo que puede haber compiladores que se adscriban a varias categorías: Compiladores cruzados: generan código para un sistema distinto del que están funcionando. Esta parte suele ser independiente de la plataforma o sistema para el cual se vaya a compilar. capaz de compilar su propio código fuente fue el creado para Lisp por Hart y Levin en el MIT en 1962. es decir. comprueba su validez. pero manteniendo la funcionalidad del programa original. Back End: es la parte que genera el código máquina. Crear un compilador autocontenido genera un problema llamado bootstrapping. Compiladores optimizadores: realizan cambios en el código para mejorar su eficiencia. a partir de los resultados de la fase de análisis. genera el árbol de derivación y rellena los valores de la tabla de símbolos.ello tenemos el hecho de que los espacios en blanco fuesen ignorados. sino que necesita ser enlazado por un programa enlazador (linker). El código que genera el Back End normalmente no se puede ejecutar directamente. Desde 1970 se ha convertido en una práctica comun escribir el compilador en en mismo lenguaje que este compila. es decir el primer compilador creado para un lenguaje tiene que o bien ser compilado en por un compilador escrito en otro lenguaje o bien compilado al ejecutar el compilador en un interprete. Tipos de compiladores Esta taxonomía de los tipos de compiladores no es excluyente. debido a que el periférico que se utilizaba como entrada de programas (una lectora de tarjetas perforadas) no contaba correctamente los espacios en blanco.

es que cuando un programa es interpretado. porque mapear los identificadores para almacenar las localizaciones debe hacerse repetidas veces en tiempo real. También el acceso a variables es más lento en un intérprete. la principal desventaja de los intérpretes. Son aquellos que compilan a un código intermedio llamado bytecode. Compiladores de varias pasadas: necesitan leer el código fuente varias veces antes de poder producir el código máquina. pero algunos lenguajes suelen asociarse más a una vía que a la otra.del código fuente. que es más eficiente de ejecutar que hacerlo directamente desde el código fuente. Esto se debe a que el intérprete debe analizar cada sentencia en el programa en cada ejecución (un análisis en tiempo real). y por esto son llamados "lenguajes interpretados" o "lenguajes compilados" respectivamente. También existen intérpretes que incluyen cierta "compilación" en el medio. Compiladores JIT (Just In Time): forman parte de un intérprete y compilan partes del código según se necesitan. Intérpretes vs Compiladores Cualquier lenguaje puede ser ejecutado tanto vía intérprete o vía compilador. También puede darse que un programa contenga partes que son implementadas via intérprete y otras vía compilador. Referencias: Web: . En general. suele ejecutarse más lento que si el mismo programa estuviese compilado.

debido a la posibilidad que estos tienen de ejecutarse independientemente de la plataforma. sin dejar constancia por escrito. a partir de un texto. un compilador equivale a un traductor profesional que. Representación Interna (P/RI): La representación interna debe ser consistente con el programa original. Los intérpretes suelen contraponerse a los compiladores. los primeros sólo realizan la traducción a medida que sea necesario y normalmente.1. uno de los entornos más comunes de uso de los intérpretes informáticos es Internet. es conveniente ir creando una tabla con información relativa a los símbolos que aparecen. Smalltalk y Python son ejemplos de lenguajes que son normalmente interpretados en vez de compilados. la organización interna de la mayoría de los intérpretes se descompone en los módulos: Traductor a Representación Interna: Toma como entrada el código del programa P en Lenguaje Fuente. Comparando su actuación con la de un ser humano. los árboles sintácticos son los más utilizados y. LISP. De esta forma.Traduce y ejecuta una línea del programa a la vez .Si hay error.Programas más lentos pero más portables y flexibles Estructura de un intérprete A la hora de construir un intérprete es conveniente utilizar una Representación Interna (RI) del lenguaje fuente a analizar. escritos en un lenguaje de alto nivel. BASIC. por ejemplo. Los programas interpretados suelen ser más lentos que los compilados debido a la necesidad de traducir el programa mientras se ejecuta. en una mayor facilidad para reemplazar partes enteras del programa o añadir módulos completamente nuevos).4. que traduce de viva voz las palabras que oye. si las características del lenguaje lo permiten. pero a cambio son más flexibles como entornos de programación y depuración (lo que se traduce. prepara otro independiente traducido a otra lengua. En la actualidad. JavaScript. lo analiza y lo transforma a la representación interna correspondiente a dicho programa P. La información a almacenar en dicha tabla de . sino del propio intérprete (lo que se conoce comúnmente como máquina virtual). mientras que un intérprete corresponde al intérprete humano. pueden utilizarse estructuras de pila para una mayor eficiencia. y permiten ofrecer al programa interpretado un entorno no dependiente de la máquina donde se ejecuta el intérprete. no guardan el resultado de dicha traducción. Entre los tipos de representación interna. ya que mientras que los segundos se encargan de traducir un programa desde su descripción en un lenguaje de programación al código máquina del sistema destino. El intérprete tiene estas características .3 INTÉRPRETE Un intérprete es un programa capaz de analizar y ejecutar otros programas. detiene ejecución del programa . Tabla de símbolos: Durante el proceso de traducción.

es introducida directamente por el usuario. Dependiendo de la complejidad del código a analizar.símbolos depende de la complejidad del lenguaje fuente. el intérprete puede contener módulos similares a los de un compilador tradicional: Análisis léxico. La interpretación consiste en un ciclo básico de búsqueda. etc. Tratamiento de errores: Durante el proceso de evaluación pueden aparecer diversos errores como desbordamiento de la pila. Durante el proceso de evaluación es necesario contemplar la aparición de errores. Sintáctico y Semántico. Durante la evaluación. etc. el lenguaje fuente contiene varios tipos de instrucciones. Evaluador de Representación Interna: A partir de la Representación Interna anterior y de los datos de entrada. el intérprete interactúa con los recursos del sistema como la memoria. existen dos métodos fundamentales: la interpretación iterativa y la interpretación recursiva. de forma que la ejecución se descompone en varios casos. Se pueden almacenar etiquetas para instrucciones de salto. se construye un intérprete iterativo de un sencillo lenguaje intermedio. se llevan a cabo las acciones indicadas para obtener los resultados. A la hora de evaluar la representación interna. divisiones por cero. que el intérprete debe contemplar. tipo. Interpretación Iterativa: La interpretación iterativa es apropiada para lenguajes sencillos. información sobre identificadores (nombre. discos. Normalmente. Interpretación Recursiva Comúnmente. El esquema sería: Inicializar REPETIR Buscar siguiente Instrucción i SI encontrada ENTONCES Analizar i Ejecutar i HASTA (que no haya más instrucciones) Cada instrucción se busca en el almacenamiento (memoria o disco) o. Luego la instrucción es analizada en sus componentes y ejecutada. línea en la que aparecen. el diseño de nuevos lenguajes de programación se realiza en dos fases: Una primera fase de especificación semántica mediante la construcción de un intérprete prototipo que actúa como una especificación ejecutable y una segunda fase de implementación del compilador de dicho lenguaje. etc. en algunos casos. donde se analiza y ejecuta cada expresión de forma directa. como podrían ser los códigos de máquinas abstractas o lenguajes de sentencias simples. uno por cada tipo de instrucción. Para la construcción de prototipos suele utilizarse un modelo de interpretación recursiva donde las sentencias pueden estar compuestas de otras sentencias y la ejecución de una sentencia puede lanzar la ejecución de . Muchos sistemas interpretados liberan al programador del manejo explícito de memoria mediante técnicas de recolección de basura. En la página 42. análisis y ejecución de instrucciones.) o cualquier otro tipo de información que se necesite en la etapa de evaluación.

APL. No obstante. son más sencillos de implementar. Los intérpretes recursivos no son apropiados para aplicaciones prácticas debido a su ineficiencia y se utilizan únicamente como prototipo ejecutable del lenguaje. Esto es debido a que durante la ejecución de código compilado no es necesario realizar complejos análisis (ya se hicieron en tiempo de compilación). Actualmente. Prolog. Ventajas de la utilización de intérpretes En general. la eficiencia es un problema menos grave y muchas veces se prefieren sistemas que permitan un desarrollo rápido de aplicaciones que cumplan fielmente la tarea encomendada. surgieron en primer lugar como sistemas interpretados y posteriormente surgieron compiladores. Puesto que no existen etapas intermedias de compilación. un buen compilador es capaz de detectar errores y optimizar el código generado. los nuevos avances informáticos aumentan la velocidad de procesamiento y capacidad de memoria de los ordenadores. Un programa puede manipular su propio código fuente a medida que se ejecuta. la utilización de compiladores permite construir programas más eficientes que los correspondientes interpretados. lo cual imposibilita tales optimizaciones. En muchos casos se opta por utilizar lenguajes ya implementados pero que carecen de una especificación semántica clara. realizan la fase de análisis y ejecución a la vez. Proporcionan una mayor flexibilidad que permite modificar y ampliar características del lenguaje fuente. los sistemas interpretados facilitan el desarrollo rápido de prototipos. No es necesario contener en memoria todo el código fuente. por definición. Aumentan la portabilidad del lenguaje: Para que el lenguaje interpretado funcione en otra máquina sólo es necesario que su intérprete funcione en dicha máquina. Lo cual facilita el estudio de la corrección del intérprete y proporciona nuevas líneas de investigación como la generación automática de intérpretes a partir de las especificaciones semánticas del lenguaje. Esto permite su utilización en sistemas de poca memoria o en entornos de red. Por esta razón. en los que se puede obtener el código fuente a medida que se necesita [Plezbert 97]. los sistemas interpretados suelen ser menos eficientes que los compilados. potencian la utilización de sistemas interactivos y facilitan las tareas de depuración. etc. El problema de especificar un lenguaje mediante un intérprete prototipo es decidir en qué lenguaje se implementa dicho intérprete. Los intérpretes. Dicho lenguaje debe ser suficientemente expresivo y no ambigüo para definir claramente cómo funcionan las diferentes construcciones. La tendencia actual es investigar técnicas de especificación semántica formal que permitan generar automáticamente este tipo de intérpretes. además. Esto facilita la implementación de sistemas de aprendizaje automatizado y reflectividad. . Muchos lenguajes como Lisp.otras sentencias de forma recursiva. A continuación se enumeran una serie de ventajas de los sistemas interpretados: Los intérpretes. Facilitan la meta-programación. en general.

Surgió así por primera vez el concepto de un traductor. en 1950. se emplea el término compilador. Pero los códigos numéricos de las máquinas son engorrosos. De hecho. las instrucciones de los lenguajes ensambladores obligan a programar cualquier función de una manera minuciosa e iterativa. A pesar de todo. En el caso particular de que el lenguaje a traducir es un lenguaje de alto nivel y el lenguaje traducido de bajo nivel. En 1954 se empezó a desarrollar un lenguaje que permitía escribir fórmulas matemáticas de manera traducible por un ordenador. Estas claves constituyen los llamados lenguajes ensambladores.M. pero más fácil de manejar. Le llamaron FORTRAN (FORmulae TRANslator). La tarea de realizar un compilador no fue fácil. EL COMPILADOR DE COMPILADORES. como un programa que traducía un lenguaje a otro lenguaje. Permitía una programación más cómoda y breve que lo existente hasta ese momento. Dada su correspondencia estrecha con las operaciones elementales de las máquinas. Así. interpretado por un secuenciador cableado o por un microprograma. Los trabajos de investigación se orientaron entonces hacia la creación de un lenguaje que expresara las distintas acciones a realizar de una manera lo más sencilla posible para el hombre. En 1946 se desarrolló el primer ordenador digital. todas esas claves juntas se traducían manualmente a Lenguaje Máquina. John Backus dirigió una investigación en I. normalmente. lo que suponía un considerable ahorro de trabajo. el lenguaje ensamblador seguía siendo el de una máquina.B. estas máquinas ejecutaban instrucciones consistentes en códigos numéricos que señalan a los circuitos de la máquina los estados correspondientes a cada operación. cuanto menor es el nivel de expresión de un lenguaje de programación. El primer compilador de FORTRAN tardó 18 años-persona en realizarse y era muy sencillo.5 GENERADOR DE CODIGO PARA COMPILADORES Introducción. mayor rendimiento se obtiene en el uso de los recursos físicos (hardware). Fue el primer lenguaje considerado de alto nivel. Pronto los primeros usuarios de estos ordenadores descubrieron la ventaja de escribir sus programas mediante claves más fáciles de recordar que esos códigos numéricos. Esta expresión mediante códigos numéricos se llamó Lenguaje Máquina. En un principio.1. que se generalizaron en cuanto se dio el paso decisivo de hacer que las propias máquinas realizaran el proceso mecánico de la traducción. Se introdujo en 1957 para el uso de la computadora IBM modelo 704. Con el fin de aumentar la velocidad de producción de los compiladores y reducir el personal que intervenga en ellos. en un lenguaje algebraico. se han desarrollado lenguajes de alto nivel llamados compilador de . al final. A este trabajo se le llama ensamblar el programa.

En la práctica. el programa objeto producido por un compilador –a su vez generado por un compilador de compiladores. Como los compiladores son funciones bastante complejas. se debe recurrir a un método sistemático de comprobar el compilador para incrementar la confianza de que funcionará satisfactoriamente en el campo. el escritor del compilador puede adoptar la organización de un compilador conocido para un lenguaje similar e implantar los componentes correspondientes. Arranque Un compilador es un programa lo bastante complejo que se desearia escribir en un lenguaje mas asequible que el lenguaje ensamblador. Si no existe ya un compilador adecuado. se desearía tener un computador que comprobara mecánicamente que un compilador implanta fielmente su especificación. Al escritor del compilador del compilador se le informa de las diferencias en los programas objeto producidos por los dos compiladores. ASPECTOS DEL DESARROLLO DE COMPILADORES Hay varios enfoques generales que puede adoptar quien escribe un compilador para implantar un compilador. En general.es mejor y está más optimizado que el producido por un compilador escrito a mano. El mas sencillo consiste en redestinar o reubicar un compilador ya existente. Un compilador debe generar código correcto.compiladores. Incluso los compiladores de C se escriben en C. los compiladores casi nunca se especifican de forma que una implantación arbitraria se pueda comprobar mecánicamente en vez de una especificación formal. PRUEBAS Y MANTENIMIENTO. También se puede usar la orden del sistema UNIX make para automatizar las pruebas. Los primeros lenguajes de este tipo aparecieron en 1958 y suelen estructurarse en sublenguajes específicos para cada parte del proceso de compilación. los programas de prueba se compilan utilizando tanto la versión nueva como la antigua del compilador. utilizando herramientas para la generacion de componenetes o implantandolos a mano. La base del arranque . los compiladores se escriben generalmente en C. también hay que comprobar que la especificación misma sea correcta. En el entorno de programación UNIX. Es evidente: las características especiales que un computador determinado imprime en la traducción de los programas objetos son más fáciles de expresar en un lenguaje de alto nivel y los algoritmos usados generalizan más que los manuales. Idealmente. Un enfoque que han utilizado con éxito muchos escritores de compiladores es la prueba de “regresión”. Varios artículos estudian la corrección de algunos algoritmos de compilación pero desgraciadamente. Se mantiene un conjunto de programas de pruebas y siempre que se modifique el compilador.

Un arranque puede dar lugar a la pregunta: “¿Cómo se compiló el primer compilador?” algo asi como ¿Qué fue antes el huevo o la gallina? Pero la primera pregunta es mas facil de contestar. Por ejemplo. Los tres lenguajes se representan utilizando el siguiente diagrama. de modo que escribió una función eval [e. el lenguaje objeto O para el que genera el codigo y el lenguaje de implantación I en el que esta escrito. Para ello considerese como LISP se convirtió en un lenguaje de programación. R. es decir. McCarthy [1981] señala que a finales de 1958 LISP se utilizó como una notación para escribir funciones. Russell observó que eval podria servir como una interprete para LISP. Si un compilador ya existente para S se ejecuta en la maquina M y genera codigo para M. por su forma (Bratman [1961]). un compilador puede ejecutarse en una maquina y producir codigo objeto para otra maquina. Dentro del texto. La implantación de un interprete para LISP se produjo inesperadamente. un compilador se caracteriza por tres lenguajes: el lenguaje fuente F que compila. la codificó a mano y asi se creó un lenguaje de programación con un interprete. se obtiene un compilador LMN. se crea LSN. Supongase que se escribe un compilador cruzado para un nuevo lenguaje L en el lenguaje de implantación S para que genere código para la maquina N. (Strong y colaboradores [1958]). a] en LISP que tomara una expresión e en LISP como argumento. S. I y O pueden ser todos muy diferentes. F. Recordemos que en lugar de generar codigo objeto un interprete realiza las operaciones del programa fuente. Dicho compilador se denomina a menudo un compilador cruzado. el diagrama T anterior se abrevia: FIO. un compilador de L a N que ejecuta en M.es utilizar las ventajas de un lenguaje para compilarse a si mismo. Los tres lenguajes. Se estudiará el uso del arranque para crear compiladores y trasladarlos de una maquina a otra modificando la estapa final. Si LSN se ejecuta atravez de SMM. McCarthy queria demostrar que LISP era una notación para describir funciones “Mucho mas clara que las maquinas de Turing o las definiciones recursivas generales utilizadas en la teoria de funciones recursivas”. Las ideas basicas para el arranque se conocen desde mediados de los años cincuenta. llamado un diagrama T. después se traducian a mano a lenguaje ensamblador y se ejecutaban. es decir. A efectos de arranque. Este proceso se ilustra en la siguiente figura juntando los diagramas T para estos compiladores . se caracteriza por SMM.

8/0497.O3 $03...  .80:3/.....05708O3/01472. 80.9.84 03:. .O3.4/0-86:0/.203905470:8:.O308.:.8803903.:348..8J2-448/0503/0/0. 57207.../4797.39075709. .08./00.07/.43897:....:.4/0:3803.9.O3 3.:.8 ../48 :7../47/0#05708039.O/48/02E6:3...7 0503/03/4/0.:9..00.8 5./.2E83897:./70.2.00.39075709.3E8800..074 09.O/4.00.5. 08903 /482F94/481:3/.424. /8.089003./.43.:7848/088902.20390 003:.03:..20394 20247.20247.3.078480774708.   39075709.1...:9..7. 6:0039F757090/0-0..424/08-47/..85:0/03089.O339073.. 5./43/0.O339073.4308 /01472.7.6:0 .-0:3.08.O3/0 ./.3.:..9.:78.0 390720/4   39075709.O380-:8.9..807J.4397..42543003.948/00397.7 $% 6:034.439025..439030.425430390800.5747..4308/08./.00.9.....O3  039F7570903907. /..48/0 :3./.43897:.1./4708 342-70 954 J30./.2.O3/03897:.7..3.403:..403:..5..6:074974954/031472.08/0803903..9...4-E8.% $ 3.7 0.O36:08030.30405J..03...3..08/05747.439025.O380/08.084/00.. 472.74.7..7.//003:..4$02E39...4308 086:02.434870..2039.3897:.7 #!%# :8.9.4250/. .O3/0:339F757090 574949546:0.-897.80/0 2502039.O3/0.. 4..O3802E39.O339073.8/070..4308   ./48-07.7 .:78.43889003:3.:9.48 /43/080.0 !.5.425:089..O384-70/0391.:.3900574.4/8.4 4 03.O370. ..09.:.3900574.:.7.O370.O3/0-..424:3.O3   .#05708039.4803:.7489548/0 3897:./70.2.:78.94/020247..O38070..1..03.9.3897:.O3/00774708   %7.. 42320390 0/80N4/03:0.40..43903072O/:4882./47/0/.:. 800.705708039.O3907.01:0390 $05:0/03././..39075709.1.954 /03897:.7..4250/..780:324/04/039075709..O3907.03.94 31472.8:7.882508 .8. .5.O3/0:3.80/00850... 3.4 $39E.:9.380748.4 :7..48 09.848 :34547.42454/7J./47/02.O308 30.5.84308547.8.5.....//0.5745.390..08803.:.20394 /0.74 :04..3..03 09.7 039F7570905:0/0.797/0.390747/048/.6:0.030.47.O300.O3#0.03/481.39075709.78:03903897:./.708.43083/.9.9.3E88F...3.084/00.:.7..390.038:8 .5E3.20/.-4.3897:.O3/05749495488:00 :9..748..839075709.4-9030748708:9.20/..08...9.48 88902.:..390 9F./.70.5:0/0.808&3.425.O35:0/03..0850./..8803903.85./0 0.20394/00774708 :7.848 08 3974/:.43897:0:339F757090907.70.. :.O3907..0.2.3.01:0390..803903.425.7096:09.

/02E8 :3-:03..089.425..4203/.3.O/41:0390 8945072908::9.08 31472E9./485.40303947348/070/ 03486:0805:0/04-903070./6:050729024/1.:.70.5479...08.7744 7E5/4/0574949548 54903..9:. ..:9.0880 5701070388902.9.039075709./.30307./4340830./0137.O3.07430390254/0 .3.//0574.O/4 .6:0003:./48 44-89.70.30/08..8390720/.43003/.4393:.903/03.5.390 483:0.:9.48/02502039.O3/088902.6:08030.O3..O3      .2.839075709.5745..3. !:08946:034 0890309.O3 4888902..8/0 03:.43003497.O3 &35747.O3 ..9:..9.425048.20390 ..-/.08:3574-02.8J30../481.. 0307.!0-079(  .039.00.425.4308 32:.8 /0/05:7.5.3.3E8800.O3/039F7570908 30307..74..4770.203900890954/039F7570908   '039.2-Q45.0/0-08078:1.O303 88902..43897:.20247.:.:..7.2502039.4245749495400.03.8/0.2...7.80/0.9.O/40307.O3 70.04.O3/039F757090574547.547:9..425....20390..48.9..839075709.1..797/0.:78.3.434 .01.039086:048.707747084592..2502039.08.0  !74547..70 .039086:0 48.5703/.2.9.9.03/0:3.8/0..O3/0.//003:.:9./48 8:0038072034801.839075709.O3/0.089../. 20//./0/090.:9..089.43..1..7470..8/10703908.5:0/02.425.8/0-/4.80850.9.403:.5.390./7036:F03:.//020247.7..O/41:0390.:942..:.42488902.3. 8:707430357207:.8/01472.9.430857E.02:.0 574-02..9.03.4803:.   4839F757090870.08....84880459.481.7 .:78..439F757090 .1..839075709. 8432E8803.0 4.89./.3..2.1.4308802E39.20//.79F.425.5.6:050729./048 47/03./48 89408/0-/4.33./48 4839F7570908 030307./4708.../039F7570908.1472...209.O3.083.7.O38003:207.3./4708507290.43..5./47010.1.....7.0089:/4/0 .08.03902039005708.O/4 1:0390.3:3/08.86:050729../  :2039.43903070320247..48 .20394.43086:0.:25...907J89.084592.080 2502039.7..O3802E39.0!.5.4308 !47089.77447E5/4/0...:942E9..1.6:08000.-0/003:..4834843.3:3.3:0.703:.746:08:39F7570901:3. 5747.8/054.8803903.8/00850.O3 802E39. .25.9./4854890747203908:70743./41:3.2548-9. 2E6:3.2E6:3.43897:75747. .3E88 .O3 4888902.20390../.390:339F7570905749495408/0./.42485 ! !744 09.7.203487.O3/088902...0.48.8O40830.80:9../4 4839F7570908 547/013.8/0. 8941.3 1020390. ..78:57454.80.43../4850746:0.:9.8/0 03:.9.8.9.8: 301.. /00850..3:3.47708543/0390839075709.8/03.7../4708   40830.425.0 .4710-/.424.08.7:303:.03..35:.7.01:0390 :..8070/0.:942E9.7 4..O241:3.7. 0850.6:0/:7.82E801.020/.8/048 88902.08.94/40..425.83907.70.:2039./4708 .3.7.70.497.

  -.

9.

. ¯  9 ¯f°f½–f¯fn°¯h¾n¯ f     ¾ ° f¾f ¾  ¯¯ °  ¾½°f°n°¾ f  f f f© –f¾½½¯ f   n°n ½ °f n n¯°½–f¯f f nf° °–f© f °–f© ° nf¾ ½fnf    °–f© ff n ¾° °–f©  f°   °–f© f n   f© °  ¾  ¯½ f x¯°n¯½f  ff f  ff°n¯½f °€ €hn ½¯  n¯½f  @-f f³¾ ½ ¾°f ° ff¾  f¯¾ °n    .h°f ° ½ f ½°¾ n °nf nf  f ½°¯n½–f¯f 9 ¾ n –¾°¯xn¾ f¾¯h°f¾¾° °–¾¾ 9°¾½¯ ¾¾f¾  ¾¾  °f  ¾ ¾n  °f °f©f  ¾n ¾¾½–f¯f¾¯ f° nf ¾¯h¾€hn ¾   n f  ¾¾n –¾°¯xn¾ f€°f  f¾ ¾f¾nf ¾©°f¾¾ f nf°¯f°f¯ °  f °–f© .9  ° nn°  °¾  ¾f ½¯  °f  –f °°½°n½  ¾f¾¯h°f¾ © nf f° °¾nn° ¾n°¾¾ ° ¾ °n –¾°¯xn¾ ¾ ³ff°f¾nn¾ f¯h°f¾ ¾f ¾n ¾½°  ° ¾fnf f½ fn° ¾f ½ ¾°¯ f° n –¾°¯xn¾¾ f¯  °–f© .  °° °–f© f– fn  °¾  ¯½ f ¾ff° °–f©  ½ ¯f ¾n €¯f¾¯f ¯hnf¾  ¯f° ff n  ½° °f   f¯f°@-%¯f @-¾f%   ½¯   °–f© n°¾ f  f°   ° © °½ff ¾ fn¯½f f .h°f ¾f¾nf ¾n°¾ °¾f¯f ¾ °–f© ¾ °¾f¯ f  ¾  ¾  – ° ff° °nf°¾   ½f¾ n¾ fn  f¾½½f¾¯h°f¾ fff°  ½n ¾¯ nh°n ff nn°  ¾ f f©¾  f¯f °¾f¯ f ½–f¯f    f f¾n ¾½° °nf ¾ nfn°f¾½ fn° ¾  ¯ °f ¾ f¾¯h°f¾ f¾ °¾nn° ¾ ¾ °–f© ¾ °¾f¯ f  ¾ –f°f½–f¯fnf €°n° °f ¯f° f¯°n¾f  ff   n °¯f¯ ° nf°¯ ° ¾ °   ½ ¾°  ° °–f©  ½–f¯fn° ¯f ° ¯ °¾   °  ° ¾ ¾ n¾¾€¾n¾ %f f % ½ ¾f     °–f©  °¾f¯ f ¾ –f¾ °   °f¯h°f ½ ¯h¾ €hn ¯f° ©f ¾f f©¾ ° ¾–fn°¾  °f° °°n ¾fnffn fn° °  °–f©   ½ ¾fff¾ ¾°f¾fnn° ¾f ff °f¯f° f¯h¾¾ °nf½¾  ½ff ¯  ¾  ° ° fn¾ –°f° ¾–fn° ° .

.9.

9   ..

° €° f¯ °ff n f  ½ nn° ¾n¯½f  ¾ n ½ ¾°f  °  °–f ° ¾ ¾ f° ¾ff  °–f© ¾ f° f¯f ¾n¯½f      .

-@   D°n¯½f  – ° fn –n n  f¯ ° ¾  ¾ ff ° °n¯½f   n¯½ ff¯ nh°nf¯ °  °n¯½f ¯½f°f€ ¯ ° ¾ ¾½ n€nfn° If¾ fn¾ ¾ f°fn nn° f–°¾f–¯¾ n¯½fn°½  ¾–fnf f¯ ° ¾ n¯½f  ¾nf¾°°nf¾  ¾½ n€nf° €¯f °f¯½f°fn°f ff¾ ½ f n¯½ f¯ nh°nf¯ °  °  °f ¾½ n€nfn°€¯f .n¯½f  ¾   ¾½¯ ¾ °–f© ¾  ¾ ½f½f n ° °¾  ° ¾nf¾  °¾  °–f© ¾ ¾½ n€n¾½ffnf f½f  ½n ¾ n¯½fn° °– ° f  ½–f¯f © ½ n  ½°n¯½f  f¾ – ° f ½°n¯½f  n¯½f  ¾  ¾¯ © ¾h¯h¾ ½¯f   ½ n ½°n¯½f  ¾nf¯f° ¾  ° f¾nffn ¾nf¾ ¾½ nf ¾ °n¯½f   ¯°f ¯½¯  °ff nn° ¾½–f¯f¾ © ¾ ¾°¯h¾€hn ¾  ½ ¾f °° °–f©  f° ¾f–¯¾¾f ¾– ° ff°¯h¾  ¾¯f°f ¾    9D .-@-.

¯¾n¯½f  ¾¾° €°n° ¾ f¾f° n¯½ ©f¾ f¯ x°f n¯½ f f ¾½ n€nfn°¯¾¯f¾ f n nf   °f½hnnf ¾   nf°¯x ¾¾ ¯hn n¯½ f n¯½f ½ff °n ¯ °ffn°€f°f  €°n°fh¾f¾€fnf¯ °  ° nf¯½ D° °€  f° f n°x¯n¾ ¾n ¾ n¯½f  ¾ ¾f½ f # – ¾°#  ¯f° °  °n°©° ½–f¯f¾ ½ f¾¾ ¯½  ¾ ¯ €  n¯½f  ¾½–f¯f¾ ½ f¾ n¯½f°f° f°f ¾°° fn¯ff°–f n¯½f   ¾n n¯½f  n¯½f ¾  °€¯f f¾ €  °nf¾ °¾½–f¯f¾ ©  ½ n ¾½¾ ¾n¯½f  ¾ @f¯ x°¾ ½ ¾ff ° ¾¾ ¯fD-O¯f ½ff f¯fff¾½ f¾   9.

@.

.9  ff¾ °€ ¾– ° f ¾ ½ f ½f ° ¾n °n¯½f ½ff¯½f°f° n¯½f  ¯f¾¾ °nn°¾¾  ° ¾°f  nf°n¯½f f ¾ ° ° ¾ f°n¯½f f nf    ¾n n¯½f ½ f ½ff–f°fn° ° n¯½f n°n ½ff° °–f© ¾¯f ¯½f°f¾n¯½° ° ¾n ¾½°  ° ¾  f°  f¯ °f¾½fff– ° fn° n¯½° °  ¾¯½f°f° ¾f¯f°   f°  D°n¯½f  ¾°½–f¯f f¾f° n¯½ © ¾  ¾ ff ¾n  °° °–f© ¯f¾ f¾      °–f©  °¾f¯ f  °  °° ½–f¯fn°D-O ¾n¯½f  ¾¾  ¾n °– ° f¯ °  °.

°n¾¾n¯½f  ¾ .

¾  ¾n ° °.

f f¾  ff°  .

¾ff¾ °f©f¾ ° °–f© ½ffn¯½f¾ f¾¯¾¯   ¾ fh ¾ ff°  ½ffn fn¯½f  ¾f¾f f¾ °f¯f°fff¯ €nf° f ¾f½f€°f f¾  f¾ f¾nf¾½ff ff° ¾ n°n ° ¾ ¯ f ¾ ¾f³¾n°n °f %°– nf f  ¾  %   D°ff° ½  f–fff½ –°f #".

x€ f° ¾  f–f°f"9 f½¯ f½ –°f ¾¯f¾€fn n° ¾f  9ff n°¾  ¾ n¯9¾ n° °° °–f©  ½–f¯fn° .n.¯¾ n¯½ ½¯ n¯½f "#f–f¾ n¯".

n.f   ¾ ³ff f€°f ¾ 9¾ n¯°f°fn°½ff ¾n €°n° ¾  ¾½x¾¾  f nf°f¯f°f °–f©  °¾f¯ f ¾  © nf f° f¯½f°fn° °° ½  ½ff 9¾ ½ ©° ¾½ f f¯ ° .

f f ¯¾f 9 f°f°fn°½ff ¾n €°n° ¾#. ¾   ° °n¯½f .°n¯½f  f ¾ ° ½ff¾  © nf °f¯f°f. ¾ n °n¯½f  f-   © nf °.  -¾  © nfff  .– ° fn –½ff. ¾ nffn f½. ¾ ½n ¾¾ ¾f °f¾– ° €–f©°f° ¾ f–f¯f¾@½ff ¾¾n¯½f  ¾    . ¾ n ¾ n f....n¯f¾nff f¾¯f°f¾ @°–f¾ €°n° ¾ n¾f¾ – ° f ¾f f¾ °f f €°n° ¾ n¾f¾#  ¯   ¾n °f€°n° f f  °9 ¯ff°f ½ ¾°  °9n¯f–¯ °   ¾¾  ¾   f ½ f¾ n¯°f° ½  ½ff9 fn €nf¯f°f¾¾ n ° °–f©   ½–f¯fn°n°°° ½   n ¯¾  °–f – ° fn – © °° ½    fff¾½ fn° ¾ ½–f¯f€ °    € n¾ ff° °n¯½f ¾ nffn f½ ¾ °–f© ¾   °–f© € °   n¯½f   °–f©  © ½ff  – ° f n –  °–f©  ¯½f°fn° °   ¾f ¾n ¾ ¾ °–f© ¾¾  ½ ¾ °f°f°  ¾– °  f–f¯f f¯f ° f–f¯f@ ½¾€¯f% f¯f°  %    °     f–f¯f@f° ¾ f  f  ¾ ¾ °–f© ¾  ½ °¾   ¾¯ €  ° ¾ 9 © ¯½ °n¯½f ½  © nf¾  °°f¯f°f½ n n – © ½fff¯f°f nn¯½f ¾  °¯°ff¯ ° °n¯½f  nf    ½°–f¾  ¾  ¾n °n¯½f nf ½ff°°  °–f©  °  °–f©   ¯½f°fn°½ff – °  n –½fff¯f°f.