INTRODUCCION. Docente: Ing. Mirko Manrique Ronceros


Save this PDF as:
 WORD  PNG  TXT  JPG

Tamaño: px
Comenzar la demostración a partir de la página:

Download "INTRODUCCION. Docente: Ing. Mirko Manrique Ronceros"

Transcripción

1 INTRODUCCION La computadora es la máquina más versátil concebida por el hombre. Aunque inicialmente es construida como un mecanismo de cálculo de prestaciones superiores a los primeros dispositivos mecánicos y electromecánicos, con el paso del tiempo se le incorporaron capacidades para la realización de operaciones lógicas y para la manipulación de datos no numéricos. Un largo proceso evolutivo ha llevado a este dispositivo calculador de la aritmética de cifras a la generación de información, teniendo como meta inmediata la manipulación del conocimiento y como objetivo futuro la generación de conciencia. Las actuales computadoras son capaces de realizar los más complejos cálculos aritméticos, lógicos y simbólicos, de emular los más elaborados mecanismos (incluyendo a otros computadores), de simular eventos naturales y de crear mundos virtuales. Las crecientes capacidades con que se presentan generación tras generación acercan a los nuevos computadores cada vez más a la realización de tareas mucho más complejas y que se antojan imposibles, como pueden ser la emulación de la mente y el pensamiento. Todo esto se sustenta, por supuesto, en la electrónica y en la capacidad de programación del computador. Sabemos que la electrónica del computador se denomina digital y que funciona con base en valores discretos. Sabemos que es a través de códigos y estrategias de representación de datos como podemos alimentar al computador con nuestras ideas y las expresiones con que identificamos a los objetos en nuestro mundo análogo y tridimensional. También sabemos que mediante reglas de operación perfectamente definidas podemos instruir al computador en la manipulación de dichos datos que llevarán a la generación de otros y a la obtención de información en la resolución de problemas. La forma de expresar dicha instrucción y la manera de llevar a cabo su traducción a lo que el computador es realmente capaz de procesar son el tema de este curso. El tema del diseño de compiladores es usualmente visto como uno de los más complejos, áridos y abstractos. Adicionalmente suele considerarse que estos temas no dejan de ser de un interés meramente académico, a menos que se trate de una enorme compañía de software dedicada a la creación de herramientas de desarrollo. Tales creencias han dado lugar a una enorme variedad de mitos, algunos de estos por ejemplo son: "Para competir con productos de calidad en un mercado tan dinámico, amplio e internacional como es el de la informática y computación, se requiere de una enorme cantidad de recursos humanos, materiales y económicos. El desarrollo de herramientas de programación como intérpretes y compiladores, ya sea para uso propio o comercialización, está reservado para las empresas que disponen de dichos recursos. La mediana y pequeña empresa no cuenta con los recursos necesarios para desarrollos internos de esta naturaleza, además de que no los necesita; si se trata de empresas dedicadas al desarrollo de programas su mercado o está únicamente en el campo de la consultoría y el desarrollo de sistemas a la medida o programación por contrato." "El conocimiento teórico asociado con el diseño y creación de compiladores y lenguajes de programación no son necesarios para un gerente de sistemas o líder de proyecto, esto es sólo para el académico, lo importante es estar al día en lo que a tendencias y productos de hardware y software se refiere." ~1~

2 "Las actividades en informática y computación en nuestro país están dedicadas al desarrollo de software administrativo en su mayoría. Es poco probable que los profesionistas en estas áreas se enfrenten al reto del desarrollo de un compilador o de un lenguaje de programación." "Es más barato comprar software que desarrollarlo. Desarrollar software es lento y caro, es más rápido comprar algo hecho." "El diseño de compiladores y lenguajes de programación es una actividad reservada para investigadores y catedráticos en ciencias computacionales." "Siempre hay que usar un compilador, el código fuente queda seguro y la ejecución es más rápida. Los intérpretes no son adecuados para el desarrollo de sistemas de información, estos son sólo un recurso para la programación de computadoras pequeñas y para el usuario final." "Los compiladores son hechos por nerds o gurús de la computación que dominan obscuros lenguajes de programación, programan en lenguaje máquina y tienen un profundo conocimiento de la arquitectura del computador." Aunque al final del curso se darán cuenta el porqué las aseveraciones anteriores deben ser consideradas como falsas o imprecisas. Lenguaje C++, Fortran, COBOL, Pascal Java Modelo Compilado AWK, Basic, SQL, Lisp, Forth Interpretado Pseudo Compilado Características Sintaxis específica para tipos de datos. Ideal para el desarrollo de programas veloces o de tamaño reducido. Permiten la explotación de instrucciones especiales del microprocesador. Mayor seguridad para evitar alteración o robo de código fuente. Transportabilidad absoluta. Requiere de una máquina virtual para ser ejecutado. Mejor desempeño que un programa interpretado pero más lento que uno compilado. Lenguajes de sintaxis rigurosa. Requiere del intérprete para su ejecución. Desempeño lento. Ideal para desarrollos rápidos (prototipos), operaciones no planeadas y programas pequeños y simples. Lenguajes de sintaxis más relajadas y mayor libertad para la conversión de datos. Con el paso del tiempo los diversos lenguajes de programación han madurado. Hoy en día es posible categorizarlos por las características que han venido exhibiendo con dicha maduración. De manera que tenemos: 1GL o lenguajes de primera generación.- Esta fue (y continua siendo) aquella a la que pertenece el Lenguaje Máquina, el nivel en el que datos instrucciones son dados como una serie de códigos (binarios, octales, decimales o hexadecimales). 2GL o lenguajes de segunda generación.- Todos aquellos lenguajes ensambladores. 3GL o lenguajes de tercera generación.- También conocidos como lenguajes de nivel alto. 4GL o lenguajes de cuarta generación.- Generalmente un lenguaje 4GL es un lenguaje de propósito específico, que proveen un lenguaje muy cercano al lenguaje natural o simbólico manejado en un ámbito específico. Muchos lenguages son llamados 4GL cuando en realidad sólo son una mezcla de 3GL y 4GL o 3GL con extensiones de de dominio especícifico. Por ejemplo, el comando list en dbase es un comando propio de un 4GL pero las aplicaciones programadas en dbase son 3GL. El siguiente ~2~

3 ejemplo ilustra la diferencia de una sintaxis 3GL y 4GL para abrir un registro de clientes y mostrar su contenido en pantalla. 5GL o lenguajes de quinta generación.- Estos lenguajes comienzan a ser identificados como aquellos que hacen uso de los ambientes gráficos para llevar a cabo la programación del computador a través de iconos o elementos gráficos similares. COMPILADORES Y PROGRAMAS RELACIONADOS: DEFINICIONES Y CONCEPTOS Aunque es equivocado, es común encontrar referencias en documentación de productos, publicidad y textos (e inclusive escuchar a la gente del medio informático) utilizando los términos traductor, compilador e intérprete de una forma libre e indistinta. Estas palabras no se utilizan para identificar de manera genérica a un programa que nos permitiría poder programar una computadora. Debemos ser precisos al emplear estas palabras, ya que se refieren a programas de distinta naturaleza que realizan labores encaminadas a un objetivo específico y particular. Aunque la conducta manifestada pueda ser similar, su comportamiento interno definitivamente es diferente. Genéricamente hablando, en ciencias de la computación, los procesadores de lenguajes son aquellos programas destinados a trabajar sobre una entrada que, por la forma como ha sido elaborada, pertenece a un lenguaje en particular reconocido o aceptado por el programa en cuestión. Los procesadores de lenguajes se clasifican como traductores o intérpretes. TRADUCTOR Un traductor es un programa que recibe una entrada escrita en un lenguaje (el lenguaje fuente) a una salida perteneciente a otro lenguaje (el lenguaje objeto), conservando su significado. En términos computacionales esto significa que tanto la entrada como la salida sean capaces de producir los mismos resultados. INTERPRETE Un intérprete, por otra parte, no lleva a cabo tal transformación; en su lugar obtiene los resultados conforme va analizando la entrada. Los intérpretes son útiles para el desarrollo de prototipos y pequeños programas para labores no previstas. Presentan la facilidad de probar el código casi de manera inmediata, sin tener que recurrir a la declaración previa de secciones de datos o código, y poder hallar errores de programación rápidamente. Resultan inadecuados para el desarrollo de complejos o grandes sistemas de información por ser más lentos en su ejecución. Los traductores son clasificados en compiladores, ensambladores y preprocesadores. Compiladores Un compilador es un programa que recibe como entrada un programa escrito en un lenguaje de nivel medio o superior (el programa fuente) y lo transforma a su equivalente en lenguaje ensamblador (el programa objeto), e inclusive hasta lenguaje máquina (el programa ejecutable) pero sin ejecutarlo. Un compilador es un traductor. La forma de como llevará a cabo tal traducción es el objetivo central en el diseño de un compilador. ~3~

4 Programa Fuente Compilado r Programa Objeto Un compilador es un programa muy complejo con un número de líneas de código que puede variar de 10,000 a 1, Escribir un programa de esta naturaleza o incluso comprenderlo, no es tarea fácil, y la mayoría de los científicos y profesionales de la computación nunca escribirán un compilador completo. Ensamblador Un ensamblador es el programa encargado de llevar a cabo un proceso denominado de ensamble o ensamblado. Este proceso consiste en que, a partir de un programa escrito en lenguaje ensamblador, se produzca el correspondiente programa en lenguaje máquina (sin ejecutarlo), realizando: La integración de los diversos módulos que conforman al programa. La resolución de las direcciones de memoria designadas en el área de datos para el almacenamiento de variables, constantes y estructuras complejas; así como la determinación del tamaño de éstas. La identificación de las direcciones de memoria en la sección de código correspondientes a los puntos de entrada en saltos condicionales e incondicionales junto con los puntos de arranque de las subrutinas. La resolución de los diversos llamados a los servicios o rutinas del sistema operativo, código dinámico y bibliotecas de tiempo de ejecución. La especificación de la cantidad de memoria destinada para las áreas de datos, código, pila y montículo necesarios y otorgados para su ejecución. La incorporación de datos y código necesarios para la carga del programa y su ejecución. Precompilador Un precompilador, también llamado preprocesador, es un programa que se ejecuta antes de invocar al compilador. Este programa es utilizado cuando el programa fuente, escrito en el lenguaje que el compilador es capaz de reconocer (de aquí en adelante denominado lenguaje anfitrión-- en inglés host language), incluye estructuras, instrucciones o declaraciones escritas en otro lenguaje (el lenguaje empotrado-- en inglés embeded language). El lenguaje empotrado es siempre un lenguaje de nivel superior o especializado (e.g. de consulta, de cuarta generación, simulación, cálculo numérico o estadístico, etcétera). Siendo que el único lenguaje que el compilador puede trabajar es áquel para el cual ha sido escrito, todas las instrucciones del lenguaje empotrado deben ser traducidas a instrucciones del lenguaje anfitrión para que puedan ser compiladas. Así pu es un precompilador también es un traductor. Los precompiladores son una solución rápida y barata a la necesidad de llevar las instrucciones de nuevos paradigmas de programación (e.g. los lenguajes de cuarta generación), extensiones a lenguajes ya existentes (como el caso de C y C++) y soluciones de nivel conceptual superior (por ejemplo paquetes de simulación o cálculo numérico) a código máquina utilizando la tecnología existente, probada, optimizada y confiable (lo que evita el desarrollo de nuevos compiladores). Facilitan la incorporación de las nuevas herramientas de desarrollo en sistemas ya elaborados (por ejemplo, la consulta a bases de datos relacionales substituyendo las instrucciones de acceso a archivos por consultas en SQL). ~4~

5 Resulta común encontrar que el flujo de proceso en los lenguajes de cuarta generación o de propósito especial puede resultar demasiado inflexible para su implantación en los procesos de una empresa, flujos de negocio o interacción con otros elementos de software y hardware, de aquí que se recurra o prefiera la creación de sistemas híbridos soportados en programas elaborados en lenguajes de tercera generación con instrucciones empotradas de nivel superior o propósito especial. Pseudocompilador Un pseudocompilador es un programa que actúa como un compilador, salvo que su producto no es ejecutable en ninguna máquina real sino en una máquina virtual. Un pseudocompilador toma de entrada un programa escrito en un lenguaje determinado y lo transforma a una codificación especial llamada código de byte. Este código no tendría nada de especial o diferente al código máquina de cualquier microprocesador salvo por el hecho de ser el código máquina de un microprocesador ficticio. Tal procesador no existe, en su lugar existe un programa que emula a dicho procesador, de aquí el nombre de máquina virtual. La ventaja de los pseudocompiladores que permite tener tantos emuladores como microprocesadores reales existan, pero sólo se requiere un compilador para producir código que se ejecutará en todos estos emuladores. Este método es una de las respuestas más aceptadas para el problema del tan ansiado lenguaje universal o código portable independiente de plataforma. Un intérprete es un programa que ejecuta cada una de las instrucciones y declaraciones que encuentra conforme va analizando el programa que le ha sido dado de entrada (sin producir un programa objeto o ejecutable). La ejecución consiste en llamar a rutinas ya escritas en código máquina cuyos resultados u operaciones están asociados de manera unívoca al significado de la instrucciones o declaraciones identificadas. Ligadores Tanto los compiladores como los ensambladores a menudo dependen de un programa conocido como ligador, el cual recopila el código que se compila o ensambla por separado en diferentes archivos objetos, a un archivo que es directamente ejecutable. En este sentido, puede hacerse una distinción entre código objeto (código máquina que todavía no se ha ligado) y código de máquina ejecutable. Un ligador también conecta un programa objeto con el código de funciones de librerías estándar, así como con recursos suministrados por el sistema operativo de la computadora, tales como asignadotes de memoria y dispositivos de entrada y salida. Es interesante advertir que los ligadores ahora realizan la tarea que originalmente era una de las principales actividades de un compilador (de aquí el uso de la palabra compilador: construir mediante la recopilación o compilación de fuentes diferentes). Cargadores Con frecuencia un compilador, ensamblador o ligador producirá un código que todavía no está completamente organizado y listo para ejecutarse, pero cuyas principales referencias de memoria se hacen relativas a una localidad de arranque indeterminada que puede estas en cualquier sitio de la memoria. Se dice que tal código es relocalizable y un cargador resolverá todas las direcciones relocalizables relativas a una dirección base, o de inicio, dada. ~5~

6 El uso de un cargador hace mas flexible el código ejecutable, pero el proceso de carga con frecuencia ocurre en segundo plano (como parte del entorno operacional) o conjuntamente con el ligado. Rara vez un cargador es en realidad un programa por separado. Editores Los compiladores por lo regular aceptan programas fuente escritos utilizando cualquier editor que pueda producir un archivo estándar, tal como un archivo ASCII. Más recientemente, los compiladores han sido integrados junto con los editores y otros programas en un ambiente de desarrollo interactivo o IDE. En un caso así, un editor, mientras que aún produce archivos estándar, puede ser orientado hacia el formato o estructura del lenguaje de programación en cuestión. Tales editores se denominaban basados en estructura y ya incluyen algunas de las operaciones de un compilador, de manera que, por ejemplo, pueda informarse al programador de los errores a medida que el programa se vaya escribiendo en lugar de hacerlo cuando está compilado. El compilador y sus programas acompañantes también pueden llamarse desde el editor, de modo que el programador pueda ejecutar el programa sin tener que abandonar el editor. Depuradores Un depurador es un programa que puede utilizarse para determinar los errores de ejecución en un programa compilado. A menudo está integrado en un IDE. La ejecución de un programa con un depurador se diferencia de la ejecución directa en que el depurador se mantiene al tanto de la mayoría o la totalidad de la información sobre el código fuente, tal como los números de línea y los nombres de las variables y procedimientos. También puede detener la ejecución en ubicaciones previamente especificadas denominadas puntos de ruptura, además de proporcionar información de cuáles funciones se ha invocado y cuáles son los valores actuales de las variables. Para efectuar estas funciones el compilador debe suministrar al depurador la información simbólica apropiada, lo cual en ocasiones puede ser difícil, en especial en un compilador que intente optimizar el código objeto. De este modo, la depuración se convierte en una cuestión de compilación. Perfiladores Es un programa que recolecta estadísticas sobre el comportamiento de un programa objeto durante la ejecución. Las estadísticas típicas que pueden ser de interés para el programador son el número de veces que se llama cada procedimiento y el porcentaje de tiempo de ejecución que se ocupa cada uno de ellos. Tales estadísticas pueden ser muy útiles para ayudar al programador a mejorar la velocidad de ejecución del programa. A veces el compilador utilizará incluso la salida del perfilador para mejorar de manera automática el código objeto sin la intervención del programador. PROCESO DE COMPILACION ~6~

7 Un compilador se compone internamente de varias etapas, o fases que realizan distintas operaciones lógicas. Es útil pensar en estas fases como piezas separadas dentro del compilador, y pueden en realidad escribirse como operaciones codificadas separadamente aunque en la práctica a menudo se integren juntas. Figura 1.- Etapas del proceso de compilación. ~7~

8 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 específico aunque también puede ser el resultado de algún otro proceso. A partir de este archivo diversos pasos pueden ser llevados a cabo: Preprocesamiento.- Un preprocesador es la estrategia generalmente adoptada como solución a lenguajes huéspedes, extensiones, lenguajes 4GL, o lenguajes de dominio específico. El preprocesador es un traductor encargado de transformar dichas instrucciones a instrucciones del lenguaje anfitrión (generalmente un tradicional 3GL) sobre las cuales finalmente trabajará el compilador. Esta etapa es definitivamente opcional. Análisis Léxico.- 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 comúnmente como scanning (exploración). Durante esta fase se identifican los elementos gramaticales usados en la creación del programa. Cada elemento identificado es substituido por un código numérico conocido como token. Análisis Sintáctico.- La cadena de tokens resultante es alimentada a un programa conocido como parser. El parser es el encargado de verificar que la secuencia y disposición de los tokens corresponda con la sintaxis del lenguaje. Este proceso de verificación sintáctica es conocido como parsing y es completamente guiado por la gramática del lenguaje. Análisis Semántico y Generación de Código.- Una vez que la secuencia de tokens ha sido validada, ésta es utilizada para identificar el sentido de la acción a realizar y generar el correspondiente código en lenguaje máquina. Algunos compiladores recurren a la creación de código intermedio para posteriormente generar la secuencia de instrucciones máquinas necesarias, mientras que algunos otros proceden a la generación directa del código máquina. Optimización de Código.- Esta es otra etapa opcional. La optimización de código 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 técnicas desarrolladas al respecto pero nada supera a la experiencia de un hábil programador. En esta etapa, ya sea posteriormente o trabajando al unísono con el generador de código, secuencias de instrucciones y estructuras de datos son examinadas buscando su substitución con secuencias, instrucciones o estructuras más cortas, rápidas o eficientes. Ligado.- Como paso final, todas las referencias pendientes de resolver sobre rutinas, módulos, bibliotecas y dem s porciones de código necesarias para el funcionamiento del programa son cubiertas en esta parte. La resolución puede consistir desde el proporcionar meramente una dirección o llamado a una función hasta la inclusión de enormes porciones de código. Al final, como producto de todo este proceso, lo que se obtiene es un programa escrito en código máquina que puede ser cargado en memoria y ejecutado. El proceso seguido por un intérprete es ligeramente diferente, ya que mientras que cubre todas las etapas de análisis no cuenta con una fase síntesis. Un intérprete no genera código, se limita a invocar rutinas ya escritas (proceso muchas veces llamado de interpretación). La siguiente figura ilustra esto. ~8~

9 Figura 2.- Etapas del proceso de interpretación En el caso de un pseudo-compilador, cuyo caso mejor conocido es el de Java, la diferencia consiste en el código 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 "hipotético" o "imaginario" y conocido generalmente como máquina virtual. La máquina virtual es otro programa cuyo funcionamiento simula al de un procesador. Este procesador recibe de entrada el pseudo-código creado por el compilador y procede a la ejecución de las instrucciones contenidas en éste; puede verse que no se trata más que de un intérprete muy sencillo. Figura 3.- Etapas del proceso de pseudo-compilación. ~9~

10 La siguiente figura ilustra con mayor detalle lo que pasa en cada una de las etapas del proceso de compilación. El procesamiento de instrucciones de un lenguaje huesped (como puede ser SQL) correría a cargo del pre-procesador, siendo transformadas instrucciones del lenguaje anfitrión. Durante la fase de análisis léxico 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 código numérico único (tokens). En este proceso se eliminan comentarios y espacios en blanco. Los tokens son alimentados al analizador sintáctico que valida que su disposición está acorde a las reglas del lenguaje. Validado este el analizador semántico procede a identificar el propósito de las diversas secuencias de tokens y buscará generar representaciones intermedias de cada acción o directamente código máquina. Este posteriormente es optimizado. Figura 4.- Detalle del flujo de datos y acciones en el proceso de compilación. ~ 10 ~

11 AMBIENTES DE COMPILACION Los compiladores a menudo producen como resultado del análisis semántico, una forma de representación intermedia del código fuente. Hoy en día, es cada vez más común que, en ambientes de estación de trabajo o de computador central, todos los compiladores de los distintos lenguajes generen el mismo código intermedio, el cual después, por un generador de código, es transformado en el código objeto. Esto tiene una gran ventaja: si se cambia el sistema operativo o alguna otra cosa, solo hay que reemplazar el generador de código, y no todo todos los compiladores. La generación de códigos intermedios aumenta la transportabilidad de los compiladores, ya que no es necesario cambiar sus partes independientes de la máquina para un nuevo hardware distinto. CODIGO FUENTE CODIGO INTERMEDIO CODIGO HEXADECIMAL Int suma_enteros( int i,j, suma) *SECTION 9 Define la sección de código F 0004 { * SECTION 14 define la sección de Pila F 0008 SECTION F 000C xdef.suma_enteros C D081 MOVE.L 4(A7), D E 2080 MOVE.L 8(A7), D E75 suma=i+j; } MOVE.L 12(A7).A0 ADD.L D1,D0 MOVE.L D0(A0) RTS * SECTION 14 * Asignaciones de suma_enteros * 4(A7).i * 8(A7).j * 12(a7).suma ANALISIS Y SINTESIS La compilación de un programa consiste en analizar y sintetizar dicho programa, es decir, determinar la estructura y el significado de un código fuente y traducir ese código fuente a un código de máquina equivalente. Las tareas o fases principales de un compilador son: Análisis léxico. Análisis sintáctico. Análisis semántico. Generación de código. Podemos considerar a un programa como un flujo de caracteres que sirven como entrada para el análisis léxico. La tarea del análisis léxico consiste en reconocer los componentes léxicos dentro de ese flujo, es decir, transformar un flujo de caracteres en un flujo de componentes léxicos (como ~ 11 ~

12 los textos en lenguaje natural, podemos distinguir entre palabras y componentes léxicos: el número de palabras determina el tamaño del vocabulario del programa, mientras que el número de componentes léxicos determina la longitud del programa. Por ejemplo: La proposición i:= 10; Producirá lo siguiente: el identificador i el símbolo de asignación := el número 10 el símbolo delimitador; (punto y coma) Los identificadores o nombres reconocidos se organizan en una tabla de símbolos, que es una estructura de datos que contiene registros con campos de atributo para cada nombre. El contenido de la tabla de símbolos se completa con el análisis léxico y sintáctico y se usará para el análisis semántico y la generación de código. El siguiente paso es el análisis sintáctico. La palabra Sintaxis significa estructura del orden de las palabras en una frase. Otro término utilizado para el análisis sintáctico es el análisis jerárquico. La tarea del análisis sintáctico es revisar si los símbolos aparecen en el orden correcto (es decir, revisar si el programa fuente fue diseñado de acuerdo con la sintaxis del lenguaje de programación) y combina los símbolos del código fuente para formar unidades gramaticales. En esta fase se detectan errores de sintaxis como: h + x := x * y En general, las unidades gramaticales se organizan y representan con árboles de análisis sintáctico o árboles sintácticos. En la siguiente figura se muestra el árbol de análisis sintáctico de la siguiente proposición: h:= x + y x * y Asignación identificador expresión identificador expresión identificador expresión identificador h := x + y x expresión * y ~ 12 ~

13 Después del análisis semantico y el de tipos. El análisis semantico es mucho más difícil que el sintáctico, pues hay que considerar el significado de una unidad gramatical; es decir hay que interpretarla. Esto se puede lograr traduciendo la entrada a una forma de representación intermedia. Por ejemplo, nunca hubiéramos definido la variable h de la figura, la proposición de asignación no tendría sentido. En forma análoga, la asignación de una variable booleana a una variable real tampoco tendrá sentido. Este tipo de inconsistencias será reconocido por el análisis de tipos. El código objeto se genera en la última fase de la compilación: el generador de código. En esta fase el código intermedio se transforma en código de maquina y la memoria necesaria quedara determinada. Obviamente, esta es la única fase que depende del hardware, ya que por lo general, los conjuntos de instrucciones varían de un computador a otro. Ambigüedad Se ha de tener cuidado al considerar la estructura de una cadena según una gramática. Aunque es evidente que cada árbol de análisis sintáctico deriva exactamente la cadena que leer en sus hojas, una gramática puede tener más de un árbol de análisis sintáctico que genere una cadena dada de componentes léxicos. Esta clase de gramática se dice que es ambigua. Para demostrar que una gramática es ambigua, lo único que se requiere es encontrar una cadena de componentes léxicos que tenga más de un árbol de análisis sintáctico. Como una cadena que cuenta con más de un árbol de análisis sintáctico suele tener más de un significado, para aplicaciones de compilación es necesario diseñar gramáticas no ambiguas o utilizar gramáticas ambiguas con reglas adicionales para resolver las ambigüedades. Por ejemplo, si se tiene la expresión tiene ahora más de un árbol de análisis sintáctico. Los dos árboles de corresponden a dos formas de agrupamientos entre paréntesis de la expresión : (9 5) + 2 y 9 (5 + 2). Esta segunda forma de agrupamiento entre paréntesis da a la expresión el valor de 2, en lugar del valor acostumbrado 6. Asociatividad de operadores Por convención, es equivalente a (9 + 5) + 2, y es equivalente a (9 5) 2. Cuando un operando con 5 tiene operadores a su izquierda y derecha, se necesitan convenciones para decidir que operador considera es operando. Se dice que el operador + asocia a la izquierda, porque un operando que tenga un signo + a ambos lados es tomado por el operador que esté a su izquierda. En la mayoría de los lenguajes de programación, los cuatro operadores matemáticos, adición, sustracción, multiplicación y división son asociativos a la izquierda. ~ 13 ~

14 Algunos operadores comunes, como la exponenciacion son asociativos por la derecha. Otro ejemplo análogo, el operador de asignación = en C es asociativo por la derecha; en C la expresión a = b = c; con un operador asociativo por la derecha, son generadas por la siguiente gramática: derecha letra = derecha letra letra a b... z El contraste entre un árbol de análisis sintáctico para un operador asociativo por la izquierda como y un árbol de análisis sintáctico para un operador asociativo por la derecha como =, se muestra la siguiente figura: expresión expresión expresión digito digito derecha digito 2 5 letra a = derecha letra b 9 = derecha letra c Procedencia de operadores Considere la expresión * 2. Hay dos interpretaciones posibles de esta expresión: (9 + 5) * 2 o 9 + (5 * 2). La asociatividad de + y * no resuelve esta ambigüedad. Por esta razón, se necesita conocer la precedencia relativa de los operadores cuando esté presente más de una clase de operadores. Se dice que * tiene mayor precedencia que + si * considera sus operandos antes que lo haga +. En aritmética elemental, la multiplicación y división tiene mayor precedencia que la adición y sustracción. Por tanto 5, es considerado por * en * 2 y en 9 * 5 + 2; es decir las expresiones son equivalentes a 9 + (5 * 2) y (9 * 5) + 2, respectivamente. TRADUCCION DIRIGIDA POR LA SINTAXIS Para traducir una construcción de un lenguaje de programación, un compilador puede necesitar tener en cuenta muchas características, además del código generado para la construcción. Por ejemplo, puede ocurrir que el compilador necesite conocer el tipo de la construcción, la posición de la primera instrucción del código objeto o el numero de instrucciones generadas. Por tanto, los atributos asociados con las construcciones se mencionan de manera abstracta. Un atributo puede representar cualquier cantidad, por ejemplo, una expresión, una cadena, una posición de memoria o cualquier otra cosa. ~ 14 ~

15 Notación Posfija La notación posfija de una expresión E se puede definir de manera inductiva como sigue: Si E es una variable o una constante, entonces la notación posfija de E es también E. Si E es una expresión de la forma E1 op E2, donde op es cualquier operador binario, entonces la notación posfija de E es E 1E 2op, donde E 1 y E 2 son las notación posfijas de E1 y E2 respectivamente. Si E es una expresión de la forma (E1), entonces la notación posfija de E1 es también la notación posfija de E. La notación posfija no necesita paréntesis, porque la posición y la ariedad (numero de argumentos) de los operadores permiten solo una descodificación de una expresión posfija. Por ejemplo, la notación posfija de (9 5) + 2 es y la notación posfija de 9-(5+2) es ~ 15 ~

16 ~ 16 ~

17 EXPRESIONES REGULARES Y AUTOMATAS La fase de rastreo, o análisis léxico, de un compilador tiene la tarea de leer el programa fuente como un archivo de caracteres y dividirlo en tokens. Los tokens son como las palabras de un lenguaje natural: cada token es una secuencia de caracteres que representa una unidad de información en el programa fuente. Ejemplos típicos de token son las palabras reservadas, como if y while, las cuales son cadenas fijas de letras; los identificadores, que son cadenas definidas por el usuario, compuestas por lo regular de letras y números, y que comienzan con una letra; los símbolos especiales, como los símbolos aritméticos + y *; además de algunos símbolos compuestos de múltiples caracteres, tales como > = y <>. En cada caso un token representa cierto patrón de caracteres que el analizador léxico reconoce, o ajusta desde el inicio de los caracteres de entrada restantes. Como la tarea que realiza el analizador léxico es un caso especial de coincidencia de patrones, necesitamos estudiar métodos de especificación y reconocimiento de patrones en la medida en que se aplican al proceso de análisis léxico. Estos métodos son principalmente los de las expresiones regulares y los autómatas finitos. Sin embargo, un analizador léxico también es la parte del compilador que maneja la entrada del código fuente, y puesto que esta entrada a menudo involucra un importante gasto de tiempo, el analizador léxico debe funcionar de manera tan eficiente como sea posible. Por lo tanto, también necesitamos poner mucha atención a los detalles prácticos de la estructura del analizador léxico. Dividiremos el estudio de las cuestiones del analizador léxico como sigue. En primer lugar, daremos una perspectiva general de la función de un analizador léxico y de las estructuras y conceptos involucrados. Enseguida, estudiaremos las expresiones regulares y por último el estudio de las máquinas de estados finitos o autómatas finitos. EL PROCESO DEL ANÁLISIS LÉXICO El trabajo del analizador léxico es leer los caracteres del código fuente y formarlos en unidades lógicas para que lo aborden las partes siguientes del compilador (generalmente el analizador sintáctico). Las unidades lógicas que genera el analizador léxico se denominan tokens, y formar caracteres en tokens es muy parecido a formar palabras a partir de caracteres en una oración en un lenguaje ~ 17 ~

18 natural como el inglés o cualquier otro y decidir lo que cada palabra significa. En esto se asemeja a la tarea del deletreo. Los tokens son entidades lógicas que por lo regular se definen como un tipo enumerado. Por ejemplo, pueden definirse en C como: typedef enum {IF,THEN,ELSE,PLUS,MINUS,NUM,ID,...} TokenType; Los tokens caen en diversas categorías, una de ellas la constituyen las palabras reservadas, como IF y THEN, que representan las cadenas de caracteres "if' y "then". Una segunda categoría es la de los símbolos especiales, como los símbolos aritméticos MÁS y MENOS, los que se representan con los caracteres "+" y " ". Finalmente, existen tokens que pueden representar cadenas de múltiples caracteres. Ejemplos de esto son NUM e ID, los cuales representan números e identificadores. Los tokens como entidades lógicas se deben distinguir claramente de las cadenas de caracteres que representan. Por ejemplo, el token de la palabra reservada IF se debe distinguir de la cadena de caracteres "if' que representa. Para hacer clara la distinción, la cadena de caracteres representada por un token se denomina en ocasiones su valor de cadena o su lexema. Algunos tokens tienen sólo un lexema: las palabras reservadas tienen esta propiedad. No obstante, un token puede representar un número infinito de lexemas. Los identificadores, por ejemplo, están todos representados por el token simple ID, pero tienen muchos valores de cadena diferentes que representan sus nombres individuales. Estos nombres no se pueden pasar por alto, porque un compilador debe estar al tanto de ellos en una tabla de símbolos. Por consiguiente, un rastreador o analizador léxico también debe construir los valores de cadena de por lo menos algunos de los tokens. EXPRESIONES REGULARES Las expresiones regulares representan patrones de cadenas de caracteres. Una expresión regular r se encuentra completamente definida mediante el conjunto de cadenas con las que concuerda. Este conjunto se denomina lenguaje generado por la expresión regular y se escribe como L(r), Aquí la palabra lenguaje se utiliza sólo para definir "conjunto de cadenas" y no tiene (por lo menos en esta etapa) una relación específica con un lenguaje de programación. Este lenguaje depende, en primer lugar, del conjunto de caracteres que se encuentra disponible. En general, estaremos hablando del conjunto de caracteres ASCII o de algún subconjunto del mismo. En ocasiones el conjunto será más general que el conjunto de caracteres ASCII, en cuyo caso los elementos del conjunto se ~ 18 ~

19 describirán como símbolos. Este conjunto de símbolos legales se conoce como alfabeto y por lo general se representa mediante el símbolo griego Σ (sigma). Una expresión regular r también contendrá caracteres del alfabeto, pero esos caracteres tendrán un significado diferente: en una expresión regular todos los símbolos indican patrones. En este capítulo distinguiremos el uso de un carácter como patrón escribiendo todo los patrones en negritas. De este modo, a es el carácter a usado como patrón. Por último, una expresión regular r puede contener caracteres que tengan significados especiales. Este tipo de caracteres se llaman metacaracteres o metasímbolos, y por lo general no pueden ser caracteres legales en el alfabeto, porque no podríamos distinguir su uso como metacaracteres de su uso como miembros del alfabeto. Sin embargo, a menudo no es posible requerir tal exclusión, por lo que se debe utilizar una convención para diferenciar los dos usos posibles de un metacaracter. En muchas situaciones esto se realiza mediante el uso de un carácter de escape que "desactiva" el significado especial de un metacaracter. Unos caracteres de escape comunes son la diagonal inversa y las comillas. Advierta que los caracteres de escape, si también son caracteres legales en el alfabeto, son por sí mismos metacaracteres. ~ 19 ~

20 Definición de expresiones regulares Expresiones regulares básicas: Estas son precisamente los caracteres simples del alfabeto, los cuales se corresponden a sí mismos. Dado cualquier carácter a del alfabeto Σ, indicamos que la expresión regular a corresponde al carácter a escribiendo L(a) = {a}. Existen otros dos símbolos que necesitaremos en situaciones especiales. Necesitamos poder indicar una concordancia con la cadena vacía, es decir, la cadena que no contiene ningún carácter. Utilizaremos el símbolo ε (épsilon) para denotar la cadena vacía, y definiremos el metasímbolo ε (e en negritas) estableciendo que L(ε) = { ε }. También necesitaremos ocasionalmente ser capaces de describir un símbolo que corresponda a la ausencia de cadenas, es decir, cuyo lenguaje sea el conjunto vacío, el cual escribiremos como { }. Emplearemos para esto el símbolo φ y escribiremos L(φ) = { }. Observe la diferencia entre { } y {ε}: el conjunto { } no contiene ninguna cadena, mientras que el conjunto {ε} contiene la cadena simple que no se compone de ningún carácter. Operaciones de expresiones regulares: Existen tres operaciones básicas en las expresiones regulares: 1) selección entre alternativas, la cual se indica mediante el metacaracter (barra vertical); 2) concatenación, que se indica medíante yuxtaposición (sin un metacaracter), y 3) repetición o "cerradura", la cual se indica mediante el metacaracter *. Analizaremos cada una por turno, proporcionando la construcción del conjunto correspondiente para los lenguajes de cadenas concordantes. Selección entre alternativas: Si r y s son expresiones regulares, entonces r s es una expresión regular que define cualquier cadena que concuerda con r o con s. En términos de lenguajes, el lenguaje de r s es la unión de los lenguajes de r y s, o L(r s) = L(r) u L(s). Como un ejemplo simple, considere la expresión regular a b: ésta corresponde tanto al carácter a como al carácter b, es decir, L(a b) = L(a) U L(b) = {a} u {b} = {a, b}. Como segundo ejemplo, la expresión regular a ε corresponde tanto al carácter simple a como a la cadena vacía (que no está compuesta por ningún carácter). En otras palabras, L(a ε) = {a, ε}. La selección se puede extender a más de una alternativa, de manera que, por ejemplo, L(a b c d) = {a, b, c, d}. En ocasiones también escribiremos largas secuencias de selecciones con puntos, como en a b... z, que corresponde a cualquiera de las letras minúsculas de la a a la z. Concatenación: La concatenación de dos expresiones regulares r y s se escribe como rs, y corresponde a cualquier cadena que sea la concatenación de dos cadenas, con la primera ~ 20 ~

21 de ellas correspondiendo a r y la segunda correspondiendo a s. Por ejemplo, la expresión regular ab corresponde sólo a la cadena ab, mientras que la expresión regular (a b) c corresponde a las cadenas ac y bc. (El uso de los paréntesis como metacaracteres en esta expresión regular se explicará en breve). Podemos describir el efecto de la concatenación en términos de lenguajes generados al definir la concatenación de dos conjuntos de cadenas. Dados dos conjuntos de cadenas S1 y S2, el conjunto concatenado de cadenas S1S2 es el conjunto de cadenas de S1 complementado con todas las cadenas de S2. Por ejemplo, si S1 = {aa, b} y S2 = {a, bb}, entonces S1S2 = {aaa, aabb, ba, bbb}. Ahora la operación de concatenación para expresiones regulares se puede definir como sigue: L(rs)=L(r)L(s). De esta manera (utilizando nuestro ejemplo anterior), L{(a b) c) = L(a b)l(c) = {a, b } { c ) = {ac, bc}. La concatenación también se puede extender a más de dos expresiones regulares: L(r r2... r ) = L(ri)L(r2)... L(rn) = el conjunto de cadenas formado al concatenar todas las cadenas de cada una de las L(r1),..., L(rn). Repetición: La operación de repetición de una expresión regular, denominada también en ocasiones cerradura (de Kleene), se escribe r*, donde r es una expresión regular. La expresión regular r* corresponde a cualquier concatenación finita de cadenas, cada una de las cuales corresponde a r. Por ejemplo, a* corresponde a las cadenas e, a, aa, aaa,... (Concuerda con e porque e es la concatenación de ninguna cadena concordante con a.) Podemos definir la operación de repetición en términos de lenguajes generados definiendo, a su vez, una operación similar * para conjuntos de cadenas. Dado un conjunto S de cadenas, sea: S* = {e} usussusssu... Ahora podemos definir la operación de repetición para expresiones regulares como sigue: L{r*) = L(r)* Considere como ejemplo la expresión regular (a bb) *. (De nueva cuenta, la razón de tener paréntesis como metacaracteres se explicará más adelante.) Esta expresión regular corresponde a cualquiera de las cadenas siguientes: e, a, bb, aa, abb, bba, bbbb, aaa, aabb y así sucesivamente. En términos de lenguajes, L( (a bb) *) = L(a bb)* = [a, bb}* = {ε, a, bb, aa, abb, bba, bbbb, aaa, aabb, abba, abbbb, bbaa,...}. ~ 21 ~

22 Precedencia de operaciones y el uso de los paréntesis La descripción precedente no toma en cuenta la cuestión de la precedencia de las operaciones de elección, concatenación y repetición. Por ejemplo, dada la expresión regular a b*, deberíamos interpretar esto como (a b) * o como a (b*)? (Existe una diferencia importante, puesto que L( (a b) *) = {ε, a, b, aa, ab, ba, bb,...}, mientras que L(a (b*)) = {ε, a, b, bb, bbb,...}.) La convención estándar es que la repetición debería tener mayor precedencia, por lo tanto, la segunda interpretación es la correcta. En realidad, entre las tres operaciones, se le da al * la precedencia más alta, a la concatenación se le da la precedencia que sigue y a la se le otorga la precedencia más baja. De este modo, por ejemplo, a bc* se interpreta como a (b (c * ) ), mientras que ab c*d se interpreta como (ab) ( ( c * ) d ). Cuando deseemos indicar una precedencia diferente, debemos usar paréntesis para hacerlo. Ésta es la razón por la que tuvimos que escribir (a b)c para indicar que la operación de elección debería tener mayor precedencia que la concatenación, ya que de otro modo a bc se interpretaría como si correspondiera tanto a a como a bc. De manera similar, (a l bb) * se interpretaría sin los paréntesis como a bb*, lo que corresponde a a, b, bb, bbb,... Los paréntesis aquí se usan igual que en aritmética, donde (3 + 4) * 5 = 35, pero * 5 = 23, ya que se supone que * tiene precedencia más alta que +. Nombres para expresiones regulares A menudo es útil como una forma de simplificar la notación proporcionar un nombre para una expresión regular larga, de modo que no tengamos que escribir la expresión misma cada vez que deseemos utilizarla. Por ejemplo, si deseáramos desarrollar una expresión regular para una secuencia de uno o más dígitos numéricos, entonces escribiríamos ( )( )* o podríamos escribir dígito dígito* donde dígito = 0I1I2I...I9 es una definición regular del nombre dígito. El uso de una definición regular es muy conveniente, pero introduce la complicación agregada de que el nombre mismo se convierta en un metasímbolo y se deba encontrar un significado para distinguirlo de la concatenación de sus caracteres. En nuestro caso hicimos esa distinción al utilizar letra cursiva para el nombre. Advierta que no se debe emplear el nombre del término en su propia definición (es decir, de manera recursiva): debemos poder eliminar nombres reemplazándolos sucesivamente con las expresiones regulares para las que se establecieron. ~ 22 ~

23 Antes de considerar una serie de ejemplos para elaborar nuestra definición de expresiones regulares, reuniremos todas las piezas de la definición de una expresión regular. Una expresión regular es una de las siguientes: 1. Una expresión regular básica constituida por un solo carácter a, donde a proviene de un alfabeto Σ de caracteres legales; el metacarácter ε ; o el metacarácter ε. En el primer caso, L(a) = {a}; en el segundo, L(ε) = {ε}; en el tercero, L(φ) = {}. 2. Una expresión de la forma r s, donde r y s son expresiones regulares. En este caso, L(r s) = L(r) u L(s). 3. Una expresión de la forma rs, donde r y s son expresiones regulares. En este caso, L(rs) = L(r)L(s). 4. Una expresión de la forma r*, donde r es una expresión regular. En este caso, L(r*)=L(r)*. 5. Una expresión de la forma (r), donde r es una expresión regular. En este caso, L((r)) = L(r). De este modo, los paréntesis no cambian el lenguaje, sólo se utilizan para ajustar la precedencia de las operaciones. Ejemplo1: Consideremos el alfabeto simple constituido por sólo tres caracteres alfabéticos: Σ= {a, b,c). También el conjunto de todas las cadenas en este alfabeto que contengan exactamente una b. Este conjunto es generado por la expresión regular (alc)*b(alc)* Advierta que, aunque b aparece en el centro de la expresión regular, la letra b no necesita estar en el centro de la cadena que se desea definir. En realidad, la repetición de a o c antes y después de la b puede presentarse en diferentes números de veces. Por consiguiente, todas las cadenas siguientes están generadas mediante la expresión regular anterior: b, abc, abaca, baaaac, ccbaca, ccccccb. Ejemplo2: Con el mismo alfabeto que antes, considere el conjunto de todas las cadenas que contienen como máximo una b. Una expresión regular para este conjunto se puede obtener utilizando la solución al ejemplo anterior como una alternativa (definiendo aquellas cadenas con exactamente una b) y la expresión regular ( a l c ) * como la otra alternativa (definiendo los casos sin b en todo). De este modo, tenemos la solución siguiente: (alc)* ( a l c ) * b ( a c ) * ~ 23 ~

24 Una solución alternativa sería permitir que b o la cadena vacía apareciera entre las dos repeticiones de a o c: ( a c )* (b l ε ) (alc)* Ejemplo3: Consideremos el conjunto de cadenas S sobre el alfabeto Σ = {a,b} compuesto de una b simple rodeada por el mismo número de a: n n S = {b, aba, aabaa, aaabaaa,...} = {a ba n 0} ~ 24 ~

25 AUTÓMATAS FINITOS Los autómatas finitos, o máquinas de estados finitos, son una manera matemática para describir clases particulares de algoritmos (o "máquinas"). En particular, los autómatas finitos se pueden utilizar para describir el proceso de reconocimiento de patrones en cadenas de entrada, y de este modo se pueden utilizar para construir analizadores léxicos. Por supuesto, también existe una fuerte relación entre los autómatas finitos y las expresiones regulares, y veremos en la sección siguiente cómo construir un autómata finito a partir de una expresión regular. Sin embargo, antes de comenzar nuestro estudio de los autómatas finitos de manera apropiada, consideraremos un ejemplo explicativo. El patrón para identificadores como se define comúnmente en los lenguajes de programación está dado por la siguiente definición regular (supondremos que letra y dígito ya se definieron): identificador = letra(letra dígito)* Esto representa una cadena que comienza con una letra y continúa con cualquier secuencia de letras y/o dígitos. El proceso de reconocer una cadena así se puede describir mediar diagrama de la figura: En este diagrama los círculos numerados 1 y 2 representan estados, que son localidades en proceso de reconocimiento que registran cuánto del patrón ya se ha visto. Las líneas flechas representan transiciones que registran un cambio de un estado a otro en una coincidencia del carácter o caracteres mediante los cuales son etiquetados. En el diagrama muestra, el estado 1 es el estado de inicio, o el estado en el que comienza el proceso de reconocimiento. Por convención, el estado de inicio se indica dibujando una línea con flecha sin etiqueta que proviene de "de ninguna parte". El estado 2 representa el punto en el cual se ha igualado una sola letra (lo que se indica mediante la transición del estado 1 al estado 2 etiquetada con letra). Una vez en el estado 2, cualquier número de letras y/o dígitos se puede ver, y una coincidencia de éstos nos regresa al ~ 25 ~

TEMA 1: INTRODUCCIÓN

TEMA 1: INTRODUCCIÓN 1 DISEÑO Y DESARROLLO DE COMPILADORES TEMA 1: INTRODUCCIÓN Qué es un Compilador? Un compilador no es más que un traductor, es decir, un programa que nos permite pasar información de un lenguaje a otro.

Más detalles

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz

Compiladores y Lenguajes de Programación. Maria de Guadalupe Cota Ortiz Compiladores y Lenguajes de Programación Maria de Guadalupe Cota Ortiz Organizaciones que rigen las normas para estandarización de Lenguajes de Programación IEEE (Instituto de Ingenieros Eléctricos y Electrónicos)

Más detalles

PROGRAMACIÓN BÁSICA DE LA COMPUTADORA. 1 Introducción. Tabla 1: Instrucciones MIPS

PROGRAMACIÓN BÁSICA DE LA COMPUTADORA. 1 Introducción. Tabla 1: Instrucciones MIPS PROGRAMACIÓN BÁSICA DE LA COMPUTADORA 1 Introducción Un sistema de computadora total incluye tanto circuitería (hardware) como programación (software). El hardware consta de los componentes físicos y todo

Más detalles

construcción de programas Prof. Eliana Guzmán U.

construcción de programas Prof. Eliana Guzmán U. Unidad II. Metodología para la construcción de programas Prof. Eliana Guzmán U. Semestre: A-2015 Introducción Resolver un problema con una computadora conduce a la escritura de un programa y a su ejecución.

Más detalles

Bienvenidos a la presentación: Introducción a conceptos básicos de programación.

Bienvenidos a la presentación: Introducción a conceptos básicos de programación. Bienvenidos a la presentación: Introducción a conceptos básicos de programación. 1 Los programas de computadora son una serie de instrucciones que le dicen a una computadora qué hacer exactamente. Los

Más detalles

Tema 2 Conceptos básicos de programación. Fundamentos de Informática

Tema 2 Conceptos básicos de programación. Fundamentos de Informática Tema 2 Conceptos básicos de programación Fundamentos de Informática Índice Metodología de la programación Programación estructurada 2 Pasos a seguir para el desarrollo de un programa (fases): Análisis

Más detalles

CONTENIDO. 1. Introducción. 2. Reseña histórica del computador. 3. Definición de computador.

CONTENIDO. 1. Introducción. 2. Reseña histórica del computador. 3. Definición de computador. CONTENIDO 1. Introducción. 2. Reseña histórica del computador. 3. Definición de computador. 4. Sistemas numéricos. 4.1 Generalidades. 42 Sistema binario. 4.3 Sistema octal,. 4.4 Sistema decimal. 4.5 Sistema

Más detalles

4 o Ingeniería Informática

4 o Ingeniería Informática Esquema del tema 1. Introducción 4 o Ingeniería Informática II26 Procesadores de lenguaje Estructura de los compiladores e intérpretes 2. Etapas del proceso de traducción 3. La interpretación 4. La arquitectura

Más detalles

Proyecto Unico Interpretador de SetCalc

Proyecto Unico Interpretador de SetCalc Universidad Simón Bolívar Dpto. de Computación y Tecnología de la Información CI3721 - Traductores e Interpretadores Abril-Julio 2008 Proyecto Unico Interpretador de SetCalc A continuación se describe

Más detalles

GENERACIÓN DE CÓDIGO

GENERACIÓN DE CÓDIGO GENERACIÓN DE CÓDIGO INTRODUCCION La generación de código es la fase más compleja de un compilador, puesto que no sólo depende de las características del lenguaje fuente sino también de contar con información

Más detalles

Introducción a compiladores. Universidad Autónoma de Aguascalientes Prof. Eduardo Serna-Pérez Correo-e: [email protected]

Introducción a compiladores. Universidad Autónoma de Aguascalientes Prof. Eduardo Serna-Pérez Correo-e: eduardo.serna@gmail.com Introducción a compiladores Universidad Autónoma de Aguascalientes Prof. Eduardo Serna-Pérez Correo-e: [email protected] Introducción a compiladores Definición de compilador Historia de los compiladores

Más detalles

Lenguajes de Programación

Lenguajes de Programación Lenguajes de Programación Mediante los programas se indica a la computadora que tarea debe realizar y cómo efectuarla, pero para ello es preciso introducir estas órdenes en un lenguaje que el sistema pueda

Más detalles

COMPILADOR DE PSEUDOCÓDIGO COMO HERRAMIENTA PARA EL APRENDIZAJE EN LA CONSTRUCCIÓN DE ALGORITMOS RAFAEL ANIBAL VEGA CASTRO

COMPILADOR DE PSEUDOCÓDIGO COMO HERRAMIENTA PARA EL APRENDIZAJE EN LA CONSTRUCCIÓN DE ALGORITMOS RAFAEL ANIBAL VEGA CASTRO COMPILADOR DE PSEUDOCÓDIGO COMO HERRAMIENTA PARA EL APRENDIZAJE EN LA CONSTRUCCIÓN DE ALGORITMOS RAFAEL ANIBAL VEGA CASTRO UNIVERSIDAD DEL NORTE PROGRAMA DE INGENIERÍA DE SISTEMAS DIVISIÓN DE INGENIERÍAS

Más detalles

Procesadores de lenguaje Tema 1: Introducción a los compiladores

Procesadores de lenguaje Tema 1: Introducción a los compiladores Procesadores de lenguaje Tema 1 Introducción a los compiladores Salvador Sánchez, Daniel Rodríguez Departamento de Ciencias de la Computación Universidad de Alcalá Resumen del tema Traductores Estructura

Más detalles

UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA EL LENGUAJE DE LOS DATOS EN LA PC Y SU FORMA DE ALMACENAMIENTO

UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA EL LENGUAJE DE LOS DATOS EN LA PC Y SU FORMA DE ALMACENAMIENTO UNIVERSIDAD TECNOLÓGICA NACIONAL FACULTAD REGIONAL CÓRDOBA EL LENGUAJE DE LOS DATOS EN LA PC Y SU FORMA DE ALMACENAMIENTO TRABAJO REALIZADO COMO APOYO PARA LA CATEDRA INFORMATICA I Autora: Ing. Ing. Sylvia

Más detalles

Tema 2. La Información y su representación

Tema 2. La Información y su representación Tema 2. La Información y su representación 2.1 Introducción. Un ordenador es una máquina que procesa información. La ejecución de un programa implica la realización de unos tratamientos, según especifica

Más detalles

INDICE Parte I. Conceptos 1. El estudio de los lenguajes de programación 2. Cuestiones de diseño de lenguajes

INDICE Parte I. Conceptos 1. El estudio de los lenguajes de programación 2. Cuestiones de diseño de lenguajes INDICE Parte I. Conceptos 1 1. El estudio de los lenguajes de programación 1.1. Por qué estudiar lenguajes de programación? 2 1.2. Breve historia de los lenguajes de programación 1.2.1. Desarrollo de los

Más detalles

Arquitectura de Aplicaciones

Arquitectura de Aplicaciones 1 Capítulo 13: Arquitectura de aplicaciones. - Sommerville Contenidos del capítulo 13.1 Sistemas de procesamiento de datos 13.2 Sistemas de procesamiento de transacciones 13.3 Sistemas de procesamiento

Más detalles

Estructura de Datos. Unidad I Tipos de Datos

Estructura de Datos. Unidad I Tipos de Datos Estructura de Datos Unidad I Tipos de Datos Conceptos Básicos Algoritmo: es una secuencia finita de pasos o instrucciones ordenadas crono-lógicamente que describen un método para resolver un problema específico.

Más detalles

Lenguajes y Compiladores

Lenguajes y Compiladores Información: http://www.cs.famaf.unc.edu.ar/wiki/ Profesores: Héctor Gramaglia, Miguel Pagano, Demetrio Vilela Régimen de regularidad y Promoción Se tomarán 2 parciales Promoción: obteniendo al menos 7

Más detalles

CONTENIDOS. 2. Entidades primitivas para el desarrollo de algoritmos.

CONTENIDOS. 2. Entidades primitivas para el desarrollo de algoritmos. Introducción a la ciencia de la computación y a la programación 1. La computadora CONTENIDOS 2. Entidades primitivas para el desarrollo de algoritmos. 3. Metodología a seguir para la resolución de problemas

Más detalles

CONCEPTOS BASICOS DEL LENGUAJE JAVA

CONCEPTOS BASICOS DEL LENGUAJE JAVA CONCEPTOS BASICOS DEL LENGUAJE JAVA NOMENCLATURA GENERAL En Java se distinguen las letras mayúsculas y minúsculas. Las reglas del lenguaje respecto a los nombres de variables son muy amplias y permiten

Más detalles

INTRODUCCIÓN. Estructura de Datos Tipos Abstractos de Datos (TAD S) Profs. Lorna Figueroa M. Mauricio Solar F. UTFSM 1 / 2008

INTRODUCCIÓN. Estructura de Datos Tipos Abstractos de Datos (TAD S) Profs. Lorna Figueroa M. Mauricio Solar F. UTFSM 1 / 2008 INTRODUCCIÓN Estructura de Datos Tipos Abstractos de Datos (TAD S) Para poder obtener un programa que resuelva un problema dado, son necesarios varios pasos : La formulación y especificación del problema

Más detalles

Representación de Datos. Una Introducción a los Sistemas Numéricos

Representación de Datos. Una Introducción a los Sistemas Numéricos Representación de Datos Una Introducción a los Sistemas Numéricos Tipos de Datos Datos Texto Número Imagen Audio Video Multimedia: Información que contiene números, texto, imágenes, audio y video. Como

Más detalles

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos.

ANÁLISIS SEMÁNTICO. Especificación formal: Semántica Operacional, semántica denotacional, semántica Axiomática, Gramáticas con Atributos. ANÁLISIS SEMÁNTICO El análisis semántico dota de un significado coherente a lo que hemos hecho en el análisis sintáctico. El chequeo semántico se encarga de que los tipos que intervienen en las expresiones

Más detalles

Programación en lenguaje C++

Programación en lenguaje C++ Programación en Lenguaje C++ Objetivos Unidad Tema Subtema Objetivos VI 6.1 Metodología de la programación Metodologías Diseños de algoritmos Creación de algoritmos Entender y aplicar los pasos a seguir

Más detalles

Problemas indecidibles

Problemas indecidibles Capítulo 7 Problemas indecidibles 71 Codificación de máquinas de Turing Toda MT se puede codificar como una secuencia finita de ceros y unos En esta sección presentaremos una codificación válida para todas

Más detalles

Sistemas de numeración, operaciones y códigos.

Sistemas de numeración, operaciones y códigos. Tema : Sistemas de numeración, operaciones y códigos. Para representar ideas, los seres humanos (al menos los occidentales) utilizamos cadenas de símbolos alfanuméricos de un alfabeto definido. En el mundo

Más detalles

U i n d id d a 3. El Element os á bá i s cos de un programa

U i n d id d a 3. El Element os á bá i s cos de un programa Programación Digital U id d 3 El t bá i Unidad 3. Elementos básicos de un programa 1. Concepto de Programa Es un conjunto de instrucciones (órdenes dadas a la computadora), que producirán la ejecución

Más detalles

Sistemas de Numeración

Sistemas de Numeración UNIDAD Sistemas de Numeración Introducción a la unidad Para la mayoría de nosotros el sistema numérico base 0 aparentemente es algo natural, sin embargo si se establecen reglas de construcción basadas

Más detalles

Algoritmos y Diagramas de Flujo 2

Algoritmos y Diagramas de Flujo 2 Algoritmos y Diagramas de Flujo 2 Programación Java NetBeans 7.0 RPC Contenido 2.1 Algoritmo...1 Fase de creación de un algoritmo...1 Herramientas de un algoritmo...2 2.2 Diagrama de Flujo...2 Símbolos

Más detalles

UNIDADES DE ALMACENAMIENTO DE DATOS

UNIDADES DE ALMACENAMIENTO DE DATOS 1.2 MATÉMATICAS DE REDES 1.2.1 REPRESENTACIÓN BINARIA DE DATOS Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS. Los computadores sólo

Más detalles

TEMA 3 Representación de la información

TEMA 3 Representación de la información TEMA 3 Representación de la información Álvarez, S., Bravo, S., Departamento de Informática y automática Universidad de Salamanca Introducción Para que el ordenador ejecute programas necesita dos tipos

Más detalles

Tema 1: Computadores y Programas

Tema 1: Computadores y Programas Tema 1: Computadores y Programas Ingeniería Informática Ingeniería Técnica en Informática de Sistemas Ingeniería Técnica en Informática de Gestión Departamento de Ciencia de la Computación e I.A. Universidad

Más detalles

51 Int. CI.: G06F 17/30 (2006.01) TRADUCCIÓN DE PATENTE EUROPEA

51 Int. CI.: G06F 17/30 (2006.01) TRADUCCIÓN DE PATENTE EUROPEA 19 OFICINA ESPAÑOLA DE PATENTES Y MARCAS ESPAÑA 11 Número de publicación: 2 460 021 1 Int. CI.: G06F 17/ (06.01) 12 TRADUCCIÓN DE PATENTE EUROPEA T3 96 Fecha de presentación y número de la solicitud europea:

Más detalles

Informática y Programación Escuela de Ingenierías Industriales y Civiles Grado en Ingeniería en Ingeniería Química Curso 2010/2011

Informática y Programación Escuela de Ingenierías Industriales y Civiles Grado en Ingeniería en Ingeniería Química Curso 2010/2011 Módulo 1. Fundamentos de Computadores Informática y Programación Escuela de Ingenierías Industriales y Civiles Grado en Ingeniería en Ingeniería Química Curso 2010/2011 1 CONTENIDO Tema 1. Introducción

Más detalles

Elementos léxicos del lenguaje de programación Java

Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Elementos léxicos del lenguaje de programación Java Palabras reservadas Identificadores Literales Operadores Delimitadores Comentarios Apéndices Operadores

Más detalles

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática

Tema 1 Introducción. Arquitectura básica y Sistemas Operativos. Fundamentos de Informática Tema 1 Introducción. Arquitectura básica y Sistemas Operativos Fundamentos de Informática Índice Descripción de un ordenador Concepto básico de Sistema Operativo Codificación de la información 2 1 Descripción

Más detalles

2.1.- EJEMPLO DE UN PROGRAMA FORTRAN

2.1.- EJEMPLO DE UN PROGRAMA FORTRAN 2.1.- EJEMPLO DE UN PROGRAMA FORTRAN Con el presente apartado comenzaremos a conocer cómo se escribe un programa en lenguaje FORTRAN bajo el entorno de programación FORTRAN. En primer lugar conozcamos

Más detalles

Generalidades Computacionales

Generalidades Computacionales Capítulo 2 Generalidades Computacionales 2.1. Introducción a los Computadores Definición: Un computador es un dispositivo electrónico que puede transmitir, almacenar, recuperar y procesar información (datos).

Más detalles

Desarrollo del software imposible si las tareas tuviesen que expresarse en código máquina. Lenguajes de más alto nivel: comprensibles, manejables y

Desarrollo del software imposible si las tareas tuviesen que expresarse en código máquina. Lenguajes de más alto nivel: comprensibles, manejables y 1. Paradigmas de programación Desarrollo del software imposible si las tareas tuviesen que expresarse en código máquina. Lenguajes de más alto nivel: comprensibles, manejables y automáticamente convertibles

Más detalles

HISTORIA Y EVOLUCIÓN DE LOS SISTEMAS OPERATIVOS

HISTORIA Y EVOLUCIÓN DE LOS SISTEMAS OPERATIVOS HISTORIA Y EVOLUCIÓN DE LOS SISTEMAS OPERATIVOS Las primeras computadoras eran enormes máquinas que se ejecutaban desde una consola. El programador, quien además operaba el sistema de computación, debía

Más detalles

CUALIFICACIÓN SISTEMAS DE GESTIÓN DE INFORMACIÓN PROFESIONAL. Nivel 3. Versión 5 Situación RD 1201/2007 Actualización

CUALIFICACIÓN SISTEMAS DE GESTIÓN DE INFORMACIÓN PROFESIONAL. Nivel 3. Versión 5 Situación RD 1201/2007 Actualización Página 1 de 16 CUALIFICACIÓN SISTEMAS DE GESTIÓN DE INFORMACIÓN PROFESIONAL Familia Profesional Informática y Comunicaciones Nivel 3 Código IFC304_3 Versión 5 Situación RD 1201/2007 Actualización Competencia

Más detalles

1. SISTEMAS DIGITALES

1. SISTEMAS DIGITALES 1. SISTEMAS DIGITALES DOCENTE: ING. LUIS FELIPE CASTELLANOS CASTELLANOS CORREO ELECTRÓNICO: [email protected] [email protected] PAGINA WEB MAESTROFELIPE.JIMDO.COM 1.1. INTRODUCCIÓN

Más detalles

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8.

TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8. TRADUCTORES, COMPILADORES E INTÉRPRETES. EJERCICIOS TEMA 5, 6, 7 y 8. 1.) (HOLUB). Escribir un traductor que reconozca definiciones de C siguiendo el estilo antiguo, tal como: prueba(uno, dos, tres, cuatro,

Más detalles

Capítulo 1 Lenguajes formales 6

Capítulo 1 Lenguajes formales 6 Capítulo 1 Lenguajes formales 6 1.8. Operaciones entre lenguajes Puesto que los lenguajes sobre Σ son subconjuntos de Σ, las operaciones usuales entre conjuntos son también operaciones válidas entre lenguajes.

Más detalles

Inicio de MO Inicio de MD Inicio de MF. Documento de Análisis. Base de datos de las especificaciones OMT. MO, MD, MF Detallados. Librería de Clases

Inicio de MO Inicio de MD Inicio de MF. Documento de Análisis. Base de datos de las especificaciones OMT. MO, MD, MF Detallados. Librería de Clases 3.2 TÉCNICA DE MODELADO DE OBJETOS (OMT) (JAMES RUMBAUGH). 3.2.1 Introducción. En este documento se trata tanto el OMT-1 como el OMT-2, el primero contenido en el Libro Modelado y Diseño Orientado (Metodología

Más detalles

Materia: Informática. Nota de Clases Sistemas de Numeración

Materia: Informática. Nota de Clases Sistemas de Numeración Nota de Clases Sistemas de Numeración Conversión Entre Sistemas de Numeración 1. EL SISTEMA DE NUMERACIÓN 1.1. DEFINICIÓN DE UN SISTEMA DE NUMERACIÓN Un sistema de numeración es un conjunto finito de símbolos

Más detalles

!!!!!!!! !!!!! Práctica!4.! Programación!básica!en!C.! ! Grado!en!Ingeniería!!en!Electrónica!y!Automática!Industrial! ! Curso!2015H2016!

!!!!!!!! !!!!! Práctica!4.! Programación!básica!en!C.! ! Grado!en!Ingeniería!!en!Electrónica!y!Automática!Industrial! ! Curso!2015H2016! INFORMÁTICA Práctica4. ProgramaciónbásicaenC. GradoenIngenieríaenElectrónicayAutomáticaIndustrial Curso2015H2016 v2.1(18.09.2015) A continuación figuran una serie de ejercicios propuestos, agrupados por

Más detalles

1. Resolución de problemas con computadoras

1. Resolución de problemas con computadoras Fundamentos de Programación I 1. Resolución de problemas con computadoras Luis Rodríguez Baena ([email protected]) Universidad Pontificia de Salamanca Escuela Superior de Ingeniería y Arquitectura

Más detalles

La Arquitectura de las Máquinas Virtuales.

La Arquitectura de las Máquinas Virtuales. La Arquitectura de las Máquinas Virtuales. La virtualización se ha convertido en una importante herramienta en el diseño de sistemas de computación, las máquinas virtuales (VMs) son usadas en varias subdiciplinas,

Más detalles

Estructura de Bases de datos. Leonardo Víquez Acuña

Estructura de Bases de datos. Leonardo Víquez Acuña Estructura de Bases de datos Leonardo Víquez Acuña Lenguajes de Bases de Datos Un sistema de bases de datos proporciona Un lenguaje de definición de datos para especificar el esquema de la base de datos

Más detalles

1 LA INFORMACION Y SU REPRESENTACION

1 LA INFORMACION Y SU REPRESENTACION 1 LA INFORMACION Y SU REPRESENTACION 1.1 Sistemas de numeración Para empezar a comprender cómo una computadora procesa información, debemos primero entender cómo representar las cantidades. Para poder

Más detalles

Bits, Bytes y Datos y tipos de datos.

Bits, Bytes y Datos y tipos de datos. Bits, Bytes y Datos y tipos de datos. Cualquier computador, incluso el más complejo es en realidad sólo un gran volumen de bits bien organizados. Es difícil definir el término información, ya que tiene

Más detalles

UNIDAD 2 Configuración y operación de un sistema de cómputo Representación de datos Conceptos El concepto de bit (abreviatura de binary digit) es fundamental para el almacenamiento de datos Puede representarse

Más detalles

Computación Tercer Año

Computación Tercer Año Colegio Bosque Del Plata Computación Tercer Año UNIDAD 3 Sistemas Operativos E-mail: [email protected] Profesor: Fernando J. Garcia Ingeniero en Sistemas de Información Sistemas Operativos Generaciones

Más detalles

INSTITUTO POLITÉCNICO NACIONAL

INSTITUTO POLITÉCNICO NACIONAL INSTITUTO POLITÉCNICO NACIONAL UNIDAD PROFESIONAL INTERDISCIPLINARIA DE INGENIERÍA Y CIENCIAS SOCIALES Y ADMINISTRATIVAS DESARROLLO DE UN COMPILADOR PARA PSEUDOCÓDIGO EN LENGUAJE ESPAÑOL T E S I S QUE

Más detalles

Apuntes de Microcontroladores (Repaso de temas previos)

Apuntes de Microcontroladores (Repaso de temas previos) Apuntes de Microcontroladores (Repaso de temas previos) Por M. C. Miguelangel Fraga Aguilar Enero 2015 Representaciones numéricas En estos apuntes se usara el posfijo b para denotar un número escrito en

Más detalles

Unidad de trabajo 2: INFORMÁTICA BÁSICA (primera parte)

Unidad de trabajo 2: INFORMÁTICA BÁSICA (primera parte) Unidad de trabajo 2: INFORMÁTICA BÁSICA (primera parte) Unidad de trabajo 2: INFORMÁTICA BÁSICA... 1 1. Representación interna de datos.... 1 1.2. Sistemas de numeración.... 2 1.3. Aritmética binaria...

Más detalles

SOLUCIÓN: a) Signo y magnitud:

SOLUCIÓN: a) Signo y magnitud: 1. Resolver las siguientes conversiones razonando los pasos seguidos (total 3 a. Dado el número 18525 expresado en decimal, calcular su representación numérica en signo y magnitud, en complemento a 2 y

Más detalles

Unidad 1: Conceptos generales de Sistemas Operativos.

Unidad 1: Conceptos generales de Sistemas Operativos. Unidad 1: Conceptos generales de Sistemas Operativos. Tema 3: Estructura del sistema operativo. 3.1 Componentes del sistema. 3.2 Servicios del sistema operativo. 3.3 Llamadas al sistema. 3.4 Programas

Más detalles

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso 2013-2014. v1.0 (05.03.

INFORMÁTICA. Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial. Curso 2013-2014. v1.0 (05.03. INFORMÁTICA Práctica 5. Programación en C. Grado en Ingeniería en Electrónica y Automática Industrial Curso 2013-2014 v1.0 (05.03.14) A continuación figuran una serie de ejercicios propuestos, agrupados

Más detalles

ELO311 Estructuras de Computadores Digitales. Números

ELO311 Estructuras de Computadores Digitales. Números ELO311 Estructuras de Computadores Digitales Números Tomás Arredondo Vidal Este material está basado en: material de apoyo del texto de David Patterson, John Hennessy, "Computer Organization & Design",

Más detalles

CAPÍTULO I 1. SISTEMAS DE NUMERACIÓN

CAPÍTULO I 1. SISTEMAS DE NUMERACIÓN CAPÍTULO I 1. SISTEMAS DE NUMERACIÓN Un sistema de numeración es el conjunto de símbolos y reglas que se utilizan para la representación de datos numéricos o cantidades. Un sistema de numeración se caracteriza

Más detalles

VISIÓN GENERAL HERRAMIENTAS COMERCIALES

VISIÓN GENERAL HERRAMIENTAS COMERCIALES VISIÓN GENERAL El servidor de MS SQL se ha convertido en un estándar en muchas partes de la América corporativa. Puede manejar volúmenes de datos grandes y se integra bien con otros productos de Microsoft.

Más detalles

Resumen sobre Grafcet RESUMEN SOBRE GRAFCET

Resumen sobre Grafcet RESUMEN SOBRE GRAFCET RESUMEN SOBRE GRAFCET INDICE GENERAL 1 INTRODUCCIÓN 1 2 METODOLOGÍA GRAFCET: CONCEPTOS BÁSICOS 2 2.1 ETAPAS 2 2.1.1 ACCIONES ASOCIADAS A LAS ETAPAS 4 2.2 TRANSICIÓN 5 2.2.1 RECEPTIVIDAD ASOCIADA A LA TRANSICIÓN

Más detalles

Figura 4.1 Clasificación de los lenguajes de bases de datos

Figura 4.1 Clasificación de los lenguajes de bases de datos 1 Colección de Tesis Digitales Universidad de las Américas Puebla Romero Martínez, Modesto Este capítulo describen los distintos lenguajes para bases de datos, la forma en que se puede escribir un lenguaje

Más detalles

SESIÓN 8 TIPOS DE SISTEMAS DE MANUFACTURA

SESIÓN 8 TIPOS DE SISTEMAS DE MANUFACTURA SESIÓN 8 TIPOS DE SISTEMAS DE MANUFACTURA CONTENIDO Términos en manufactura Clasificación de sistemas de manufactura Beneficios y ejemplos de sistemas de manufactura Los componentes de un sistema de manufactura

Más detalles

TIMSS 11.2 DESCRIPCIÓN DE LO EVALUADO EN LOS DOMINIOS DE CONTENIDO MATEMÁTICA Números Incluye la comprensión del proceso de contar, de las maneras de representar los números, de las relaciones entre éstos

Más detalles

Introducción a los Tipos Abstractos de Datos

Introducción a los Tipos Abstractos de Datos Página 1 de 8 Introducción a los Tipos Abstractos de Datos Introducción: Concepto de abstracción Abstracción funcional y abstracción de datos Construcción de tipos abstractos de datos Especificación de

Más detalles

Hardware I - Datos e información en el ordenador

Hardware I - Datos e información en el ordenador Hardware I - 1. El tratamiento de la información. Datos e información. Conviene, en primer lugar, diferenciar el significado de los términos datos e información. La información es un concepto muy amplio,

Más detalles

Nombre de la asignatura: Programación Estructurada. Créditos: 3-2 - 5. Aportación al perfil

Nombre de la asignatura: Programación Estructurada. Créditos: 3-2 - 5. Aportación al perfil Nombre de la asignatura: Programación Estructurada Créditos: 3-2 - 5 Aportación al perfil Diseñar, analizar y construir equipos y/o sistemas electrónicos para la solución de problemas en el entorno profesional,

Más detalles

1 Estructura básica de un programa C++

1 Estructura básica de un programa C++ Elementos básicos de un lenguaje de alto nivel: C++ CONTENIDOS 1. Estructura básica de un programa C++. 2. Tipos de datos simples. 3. Constantes y variables en C++. Declaración. 4. Operadores y expresiones.

Más detalles

Introducción a la Computación

Introducción a la Computación UNIVERSIDAD RAFAEL BELLOSO CHACÍN FACULTAD DE INGENIERIA INTRODUCCIÓN A LA COMPUTACION UNIDAD II: DATOS, ALGORITMOS Y PSEUDOCODIGOS http://www.urbe.edu/info-consultas/web-profesor/12697883/ ALGORITMO Un

Más detalles

Preliminares. Tipos de variables y Expresiones

Preliminares. Tipos de variables y Expresiones Preliminares. Tipos de variables y Expresiones Felipe Osorio Instituto de Estadística Pontificia Universidad Católica de Valparaíso Marzo 5, 2015 1 / 20 Preliminares Computadoras desarrollan tareas a un

Más detalles

Introducción a la Programación 11 O. Humberto Cervantes Maceda

Introducción a la Programación 11 O. Humberto Cervantes Maceda Introducción a la Programación 11 O Humberto Cervantes Maceda Información del profesor Humberto Cervantes Maceda T 138 www.humbertocervantes.net/cursos Acerca de ustedes Nombre Carrera Qué experiencia

Más detalles

UNIDAD 3: ARITMÉTICA DEL COMPUTADOR

UNIDAD 3: ARITMÉTICA DEL COMPUTADOR UNIDAD 3: ARITMÉTICA DEL COMPUTADOR Señor estudiante, es un gusto iniciar nuevamente con usted el desarrollo de esta tercera unidad. En esta ocasión, haremos una explicación más detallada de la representación

Más detalles

INGENIERÍA EN MECATRÓNICA

INGENIERÍA EN MECATRÓNICA HOJA DE ASIGNATURA CON DESGLOSE DE UNIDADES TEMÁTICAS 1. Nombre de la asignatura Instrumentación Virtual 2. Competencias Desarrollar proyectos de automatización y control, a través del diseño, la administración

Más detalles

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal)

Unidad I. 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Unidad I Sistemas numéricos 1.1 Sistemas numéricos (Binario, Octal, Decimal, Hexadecimal) Los computadores manipulan y almacenan los datos usando interruptores electrónicos que están ENCENDIDOS o APAGADOS.

Más detalles

Un filtro general de respuesta al impulso finita con n etapas, cada una con un retardo independiente d i y ganancia a i.

Un filtro general de respuesta al impulso finita con n etapas, cada una con un retardo independiente d i y ganancia a i. Filtros Digitales Un filtro general de respuesta al impulso finita con n etapas, cada una con un retardo independiente d i y ganancia a i. En electrónica, ciencias computacionales y matemáticas, un filtro

Más detalles

ARQUITECTURA DE LAS COMPUTADORAS PRACTICA

ARQUITECTURA DE LAS COMPUTADORAS PRACTICA ARQUITECTURA DE LAS COMPUTADORAS PRACTICA SISTEMAS NUMÉRICOS INTRODUCCIÓN TEÓRICA: Definimos Sistema de Numeración como al conjunto de reglas que permiten, con una cantidad finita de símbolos, representar

Más detalles

Glosario. actividad. 1. (tarea) 2. es un subproceso que no requiere mas descomposición.

Glosario. actividad. 1. (tarea) 2. es un subproceso que no requiere mas descomposición. Glosario Aclaraciones Los conceptos del glosario están ordenados alfabéticamente. Un concepto puede ser un único término como meta o una frase como ambiente de ingeniería de software centrado en procesos.

Más detalles

TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA

TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA TEMA 3. EL PROCESO DE COMPILACIÓN, DEL CÓDIGO FUENTE AL CÓDIGO MÁQUINA Programa: Algoritmo (secuencia no ambigua, finita y ordenada de instrucciones para la resolución de un determinado problema) traducido

Más detalles

I.3 APLICACIÓN DE UN RECONOCEDOR DE LENGUAJE NATURAL RESTRINGIDO A LA RECUPERACIÓN DE DATOS Gabriel Cordero Sánchez*

I.3 APLICACIÓN DE UN RECONOCEDOR DE LENGUAJE NATURAL RESTRINGIDO A LA RECUPERACIÓN DE DATOS Gabriel Cordero Sánchez* I.3 APLICACIÓN DE UN RECONOCEDOR DE LENGUAJE NATURAL RESTRINGIDO A LA RECUPERACIÓN DE DATOS Gabriel Cordero Sánchez* Resumen En este documento se muestra la estructura funcional de un reconocedor de lenguaje

Más detalles

Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software.

Una computadora de cualquier forma que se vea tiene dos tipos de componentes: El Hardware y el Software. ARQUITECTURA DE LAS COMPUTADORAS QUE ES UNA COMPUTADORA (UN ORDENADOR)? Existen numerosas definiciones de una computadora, entre ellas las siguientes: 1) Una computadora es un dispositivo capaz de realizar

Más detalles

Manual de configuración. Nómina

Manual de configuración. Nómina Manual de configuración Nómina COPYRIGHT 2004 Meta4 Spain, S.A. Quedan reservados todos los derechos. AVISO: Este manual está protegido por la legislación referente a propiedad intelectual e industrial

Más detalles

Introducción. 1. Lenguajes de máquina 2. Lenguajes de ensamblador 3. Lenguajes de alto nivel

Introducción. 1. Lenguajes de máquina 2. Lenguajes de ensamblador 3. Lenguajes de alto nivel Introducción Los programadores escriben en diversos lenguajes de programación, algunos de ellos se pueden entender directamente, pero otros requieren pasos de traducción. Se utilizan cientos de lenguajes

Más detalles

El conjunto de conocimientos científicos y técnicos que hacen posible la resolución de forma automática de problemas por medio de las computadoras.

El conjunto de conocimientos científicos y técnicos que hacen posible la resolución de forma automática de problemas por medio de las computadoras. 1 Conceptos Generales 1.1 Definición de Informática Una posible definición de informática podría ser: El conjunto de conocimientos científicos y técnicos que hacen posible la resolución de forma automática

Más detalles

Lenguaje C. Tipos de Datos Simples y Estructuras de Control

Lenguaje C. Tipos de Datos Simples y Estructuras de Control Lenguaje C Tipos de Datos Simples y Estructuras de Control Lenguaje C C es un lenguaje de programación creado en 1972 por Dennis M. Ritchie en los Laboratorios Bell como evolución del anterior lenguaje

Más detalles

1. Se establecen los conceptos fundamentales (símbolos o términos no definidos).

1. Se establecen los conceptos fundamentales (símbolos o términos no definidos). 1. ÁLGEBRA DE BOOLE. El álgebra de Boole se llama así debido a George Boole, quien la desarrolló a mediados del siglo XIX. El álgebra de Boole denominada también álgebra de la lógica, permite prescindir

Más detalles

El álgebra booleana (Algebra de los circuitos lógicos tiene muchas leyes o teoremas muy útiles tales como :

El álgebra booleana (Algebra de los circuitos lógicos tiene muchas leyes o teoremas muy útiles tales como : SIMPLIFICACION DE CIRCUITOS LOGICOS : Una vez que se obtiene la expresión booleana para un circuito lógico, podemos reducirla a una forma más simple que contenga menos términos, la nueva expresión puede

Más detalles

1. Informática e información. 2. Sistemas de numeración. 3. Sistema binario, operaciones aritméticas en binario, 4. Sistemas octal y hexadecimal. 5.

1. Informática e información. 2. Sistemas de numeración. 3. Sistema binario, operaciones aritméticas en binario, 4. Sistemas octal y hexadecimal. 5. Representación de la información Contenidos 1. Informática e información. 2. Sistemas de numeración. 3. Sistema binario, operaciones aritméticas en binario, 4. Sistemas octal y hexadecimal. 5. Conversiones

Más detalles

Tema 1: Introducción

Tema 1: Introducción Tema 1: Introducción Procesamiento de Lenguajes Dept. de Lenguajes y Sistemas Informáticos Universidad de Alicante Procesamiento de Lenguajes Tema 1: Introducción 1 / 12 Definición de compilador Un compilador

Más detalles

Codd propuso estos tres lenguajes como base teórica de cualquier lenguaje que quisiera cumplir con los requisitos formales del modelo.

Codd propuso estos tres lenguajes como base teórica de cualquier lenguaje que quisiera cumplir con los requisitos formales del modelo. 16/05/2012 1 Todo modelo de datos debe definir un lenguaje de definición de datos para crear las estructuras donde se almacenará la información y un lenguaje de manipulación de datos con el que acceder

Más detalles

SISTEMAS DE INFORMACIÓN PARA ADMINISTRACIÓN DE OPERACIONES. Manufactura Integrada por Computadora (CIM) Qué es es CIM?

SISTEMAS DE INFORMACIÓN PARA ADMINISTRACIÓN DE OPERACIONES. Manufactura Integrada por Computadora (CIM) Qué es es CIM? SISTEMAS DE INFORMACIÓN PARA ADMINISTRACIÓN DE OPERACIONES 2003 Manufactura Integrada por Computadora (CIM) Qué es es CIM? Bajo el nombre de CIM se engloba a un conjunto de aplicaciones informáticas cuyo

Más detalles

Tema 1. Representación de la información MME 2012-20131

Tema 1. Representación de la información MME 2012-20131 Tema 1 Representación de la información 1 Índice Unidad 1.- Representación de la información 1. Informática e información 2. Sistema de numeración 3. Representación interna de la información 2 Informática

Más detalles

CONCEPTOS BÁSICOS DE INFORMÁTICA. REPRESENTACIÓN DE LA INFORMACIÓN.

CONCEPTOS BÁSICOS DE INFORMÁTICA. REPRESENTACIÓN DE LA INFORMACIÓN. INDICE. CONCEPTOS BÁSICOS DE INFORMÁTICA. REPRESENTACIÓN DE LA INFORMACIÓN. TÉRMINOS BÁSICOS DE LA INFORMÁTICA. REPRESENTACIÓN INTERNA DE LA INFORMACIÓN. El SISTEMA BINARIO DE NUMERACION. El sistema decimal

Más detalles

Bloque II. Elementos del lenguaje de programación Java

Bloque II. Elementos del lenguaje de programación Java Bloque II. Elementos del lenguaje de programación Java 1.Introducción a los lenguajes de programación 2. Estructura de un programa 3. Datos y expresiones simples 4. Instrucciones de control 5. Entrada/salida

Más detalles

Procesadores Superescalares: Paralelismo Explícito a Nivel de Instrucción

Procesadores Superescalares: Paralelismo Explícito a Nivel de Instrucción Tema 8 Procesadores Superescalares: Paralelismo Explícito a Nivel de Instrucción IA-64 es una arquitectura de 64 bits desarrollada conjuntamente por Intel y HP (Hewlett- Packard). Está basado en una tecnología

Más detalles

BASES DE DATOS TEMA 4 DISEÑO DE BASES DE DATOS RELACIONALES

BASES DE DATOS TEMA 4 DISEÑO DE BASES DE DATOS RELACIONALES BASES DE DATOS TEMA 4 DISEÑO DE BASES DE DATOS RELACIONALES El modelo relacional se basa en dos ramas de las matemáticas: la teoría de conjuntos y la lógica de predicados de primer orden. El hecho de que

Más detalles
Sitemap