INTRODUCCION. Docente: Ing. Mirko Manrique Ronceros

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 ~

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

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

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

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

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

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

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

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

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

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

Estas visiones de la información, denominadas vistas, se pueden identificar de varias formas.

Estas visiones de la información, denominadas vistas, se pueden identificar de varias formas. El primer paso en el diseño de una base de datos es la producción del esquema conceptual. Normalmente, se construyen varios esquemas conceptuales, cada uno para representar las distintas visiones que los

Más detalles

TEMA 2: Representación de la Información en las computadoras

TEMA 2: Representación de la Información en las computadoras TEMA 2: Representación de la Información en las computadoras Introducción Una computadora es una máquina que procesa información y ejecuta programas. Para que la computadora ejecute un programa, es necesario

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

MACROS. Automatizar tareas a través del uso de las macros.

MACROS. Automatizar tareas a través del uso de las macros. OBJETIVOS MACROS Definiciones Automatizar tareas a través del uso de las macros. Grabar Ejecutar Manipular macros. Tipos de Macros en Excel Introducción Las operaciones tradicionales que se pueden realizar

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

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse.

TABLA DE DECISION. Consideremos la siguiente tabla, expresada en forma genérica, como ejemplo y establezcamos la manera en que debe leerse. TABLA DE DECISION La tabla de decisión es una herramienta que sintetiza procesos en los cuales se dan un conjunto de condiciones y un conjunto de acciones a tomar según el valor que toman las condiciones.

Más detalles

Capítulo 9. Archivos de sintaxis

Capítulo 9. Archivos de sintaxis Capítulo 9 Archivos de sintaxis El SPSS permite generar y editar archivos de texto con sintaxis SPSS, es decir, archivos de texto con instrucciones de programación en un lenguaje propio del SPSS. Esta

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

Naturaleza binaria. Conversión decimal a binario

Naturaleza binaria. Conversión decimal a binario Naturaleza binaria En los circuitos digitales sólo hay 2 voltajes. Esto significa que al utilizar 2 estados lógicos se puede asociar cada uno con un nivel de tensión, así se puede codificar cualquier número,

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

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3

UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 UNIDADES FUNCIONALES DEL ORDENADOR TEMA 3 INTRODUCCIÓN El elemento hardware de un sistema básico de proceso de datos se puede estructurar en tres partes claramente diferenciadas en cuanto a sus funciones:

Más detalles

SISTEMAS DE NUMERACIÓN. Sistema decimal

SISTEMAS DE NUMERACIÓN. Sistema decimal SISTEMAS DE NUMERACIÓN Sistema decimal Desde antiguo el Hombre ha ideado sistemas para numerar objetos, algunos sistemas primitivos han llegado hasta nuestros días, tal es el caso de los "números romanos",

Más detalles

Módulo 9 Sistema matemático y operaciones binarias

Módulo 9 Sistema matemático y operaciones binarias Módulo 9 Sistema matemático y operaciones binarias OBJETIVO: Identificar los conjuntos de números naturales, enteros, racionales e irracionales; resolver una operación binaria, representar un número racional

Más detalles

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual

Introducción. Ciclo de vida de los Sistemas de Información. Diseño Conceptual Introducción Algunas de las personas que trabajan con SGBD relacionales parecen preguntarse porqué deberían preocuparse del diseño de las bases de datos que utilizan. Después de todo, la mayoría de los

Más detalles

by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true

by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true by Tim Tran: https://picasaweb.google.com/lh/photo/sdo00o8wa-czfov3nd0eoa?full-exif=true I. FUNDAMENTOS 3. Representación de la información Introducción a la Informática Curso de Acceso a la Universidad

Más detalles

Tema: INSTALACIÓN Y PARTICIONAMIENTO DE DISCOS DUROS.

Tema: INSTALACIÓN Y PARTICIONAMIENTO DE DISCOS DUROS. 1 Facultad: Ingeniería Escuela: Electrónica Asignatura: Arquitectura de computadoras Lugar de ejecución: Lab. de arquitectura de computadoras, edif. de electrónica. Tema: INSTALACIÓN Y PARTICIONAMIENTO

Más detalles

Decisión: Indican puntos en que se toman decisiones: sí o no, o se verifica una actividad del flujo grama.

Decisión: Indican puntos en que se toman decisiones: sí o no, o se verifica una actividad del flujo grama. Diagrama de Flujo La presentación gráfica de un sistema es una forma ampliamente utilizada como herramienta de análisis, ya que permite identificar aspectos relevantes de una manera rápida y simple. El

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

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

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

1. SISTEMAS DIGITALES

1. SISTEMAS DIGITALES 1. SISTEMAS DIGITALES DOCENTE: ING. LUIS FELIPE CASTELLANOS CASTELLANOS CORREO ELECTRÓNICO: FELIPECASTELLANOS2@HOTMAIL.COM FELIPECASTELLANOS2@GMAIL.COM PAGINA WEB MAESTROFELIPE.JIMDO.COM 1.1. INTRODUCCIÓN

Más detalles

Estándares para planes de calidad de software. Escuela de Ingeniería de Sistemas y Computación Desarrollo de Software II Agosto Diciembre 2008

Estándares para planes de calidad de software. Escuela de Ingeniería de Sistemas y Computación Desarrollo de Software II Agosto Diciembre 2008 Estándares para planes de calidad de software Escuela de Ingeniería de Sistemas y Computación Desarrollo de Software II Agosto Diciembre 2008 DIFERENCIA ENTRE PRODUCIR UNA FUNCION Y PRODUCIR UNA FUNCION

Más detalles

FASES DEL PROCESO DE RESOLUCIÓN DE PROBLEMAS

FASES DEL PROCESO DE RESOLUCIÓN DE PROBLEMAS FASES DEL PROCESO DE RESOLUCIÓN DE PROBLEMAS Varios autores han tratado de identificar y describir las distintas fases en el proceso de resolución de problemas. Polya (1945), en su modelo descriptivo,

Más detalles

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de

CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de CAPÍTULO VI PREPARACIÓN DEL MODELO EN ALGOR. En este capítulo, se hablará acerca de los pasos a seguir para poder realizar el análisis de cualquier modelo en el software Algor. La preparación de un modelo,

Más detalles

Capítulo VI. Diagramas de Entidad Relación

Capítulo VI. Diagramas de Entidad Relación Diagramas de Entidad Relación Diagramas de entidad relación Tabla de contenido 1.- Concepto de entidad... 91 1.1.- Entidad del negocio... 91 1.2.- Atributos y datos... 91 2.- Asociación de entidades...

Más detalles

La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx

La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx La nueva criba de Eratóstenes Efraín Soto Apolinar 1 F.I.M.E. U.A.N.L. San Nicolás, N.L. México. efrain@yalma.fime.uanl.mx Resumen Se dan algunas definiciones básicas relacionadas con la divisibilidad

Más detalles

Introducción a la plataforma Moodle Aníbal de la Torre 2006. Plataforma Moodle. Accediendo a los contenidos

Introducción a la plataforma Moodle Aníbal de la Torre 2006. Plataforma Moodle. Accediendo a los contenidos Plataforma Moodle Accediendo a los contenidos Formatos ----------------------------------------------------------------------- 2 Glosarios -----------------------------------------------------------------------

Más detalles

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL

LABORATORIO Nº 2 GUÍA PARA REALIZAR FORMULAS EN EXCEL OBJETIVO Mejorar el nivel de comprensión y el manejo de las destrezas del estudiante para utilizar formulas en Microsoft Excel 2010. 1) DEFINICIÓN Una fórmula de Excel es un código especial que introducimos

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

Base de datos en Excel

Base de datos en Excel Base de datos en Excel Una base datos es un conjunto de información que ha sido organizado bajo un mismo contexto y se encuentra almacenada y lista para ser utilizada en cualquier momento. Las bases de

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

Introducción a la Firma Electrónica en MIDAS

Introducción a la Firma Electrónica en MIDAS Introducción a la Firma Electrónica en MIDAS Firma Digital Introducción. El Módulo para la Integración de Documentos y Acceso a los Sistemas(MIDAS) emplea la firma digital como método de aseguramiento

Más detalles

SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION

SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION SISTEMAS NUMERICOS CAMILO ANDREY NEIRA IBAÑEZ UNINSANGIL INTRODUCTORIO A LA INGENIERIA LOGICA Y PROGRAMACION CHIQUINQUIRA (BOYACA) 2015 1 CONTENIDO Pág. QUE ES UN SISTEMA BINARIO. 3 CORTA HISTORIA DE LOS

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

Entidad Formadora: Plan Local De Formación Convocatoria 2010

Entidad Formadora: Plan Local De Formación Convocatoria 2010 Entidad Formadora: Enterprise Architect Comenzando Puede iniciar Enterprise Architect desde el ícono que se creó en su escritorio de Windows durante la instalación, o alternativamente: 1. Abrir el menú

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso

PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación. II MODELOS y HERRAMIENTAS UML. II.2 UML: Modelado de casos de uso PROGRAMACIÓN ORIENTADA A OBJETOS Master de Computación II MODELOS y HERRAMIENTAS UML 1 1 Modelado de casos de uso (I) Un caso de uso es una técnica de modelado usada para describir lo que debería hacer

Más detalles

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos

UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos 2.1. Principios básicos del Modelado de Objetos UNIDAD 2: Abstracción del Mundo real Al Paradigma Orientado a Objetos Hoy en día muchos de los procesos que intervienen en un negocio o empresa y que resuelven

Más detalles

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Documento de trabajo elaborado para la Red Temática DocenWeb: Red Temática de Docencia en Control mediante Web (DPI2002-11505-E)

Más detalles

DE VIDA PARA EL DESARROLLO DE SISTEMAS

DE VIDA PARA EL DESARROLLO DE SISTEMAS MÉTODO DEL CICLO DE VIDA PARA EL DESARROLLO DE SISTEMAS 1. METODO DEL CICLO DE VIDA PARA EL DESARROLLO DE SISTEMAS CICLO DE VIDA CLÁSICO DEL DESARROLLO DE SISTEMAS. El desarrollo de Sistemas, un proceso

Más detalles

Capítulo 1 Introducción a la Computación

Capítulo 1 Introducción a la Computación Capítulo 1 Introducción a la Computación 1 MEMORIA PRINCIPAL (RAM) DISPOSITIVOS DE ENTRADA (Teclado, Ratón, etc) C P U DISPOSITIVOS DE SALIDA (Monitor, Impresora, etc.) ALMACENAMIENTO (Memoria Secundaria:

Más detalles

Metodologías de diseño de hardware

Metodologías de diseño de hardware Capítulo 2 Metodologías de diseño de hardware Las metodologías de diseño de hardware denominadas Top-Down, basadas en la utilización de lenguajes de descripción de hardware, han posibilitado la reducción

Más detalles

Matemática de redes Representación binaria de datos Bits y bytes

Matemática de redes Representación binaria de datos Bits y bytes Matemática de redes 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 pueden entender

Más detalles

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere.

Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere. UNIVERSIDAD DE CARABOBO FACULTAD DE CIENCIA Y TECNOLOGÍA DIRECCION DE EXTENSION COORDINACION DE PASANTIAS Modificación y parametrización del modulo de Solicitudes (Request) en el ERP/CRM Compiere. Pasante:

Más detalles

Ingeniería del Software I Clase de Testing Funcional 2do. Cuatrimestre de 2007

Ingeniería del Software I Clase de Testing Funcional 2do. Cuatrimestre de 2007 Enunciado Se desea efectuar el testing funcional de un programa que ejecuta transferencias entre cuentas bancarias. El programa recibe como parámetros la cuenta de origen, la de cuenta de destino y el

Más detalles

Instituto Tecnológico de Celaya

Instituto Tecnológico de Celaya LOS SISTEMAS DE REPRESENTACIÓN NUMÉRICA Es común escuchar que las computadoras utilizan el sistema binario para representar cantidades e instrucciones. En esta sección se describen las ideas principales

Más detalles

PROGRAMACIÓN ORIENTADA A OBJETOS

PROGRAMACIÓN ORIENTADA A OBJETOS PROGRAMACIÓN ORIENTADA A OBJETOS Clase 1. Introducción Profesor: Diego Sánchez Gómez Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases

Más detalles

CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP

CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP CAPÍTULO 4. EL EXPLORADOR DE WINDOWS XP Características del Explorador de Windows El Explorador de Windows es una de las aplicaciones más importantes con las que cuenta Windows. Es una herramienta indispensable

Más detalles

ARCHIVOS CON SERIES DEL BOLETÍN ESTADÍSTICO Manual de Usuario

ARCHIVOS CON SERIES DEL BOLETÍN ESTADÍSTICO Manual de Usuario Dirección General del Servicio de Estudios 04.09.2007 ARCHIVOS CON SERIES DEL BOLETÍN ESTADÍSTICO Manual de Usuario Departamento de Estadística Hoja de Control Título Autor Versión Fecha Registro de Cambios

Más detalles

Interoperabilidad de Fieldbus

Interoperabilidad de Fieldbus 2002 Emerson Process Management. Todos los derechos reservados. Vea este y otros cursos en línea en www.plantwebuniversity.com. Fieldbus 201 Interoperabilidad de Fieldbus Generalidades Qué es interoperabilidad?

Más detalles

Capítulo 1 Documentos HTML5

Capítulo 1 Documentos HTML5 Capítulo 1 Documentos HTML5 1.1 Componentes básicos HTML5 provee básicamente tres características: estructura, estilo y funcionalidad. Nunca fue declarado oficialmente pero, incluso cuando algunas APIs

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

LiLa Portal Guía para profesores

LiLa Portal Guía para profesores Library of Labs Lecturer s Guide LiLa Portal Guía para profesores Se espera que los profesores se encarguen de gestionar el aprendizaje de los alumnos, por lo que su objetivo es seleccionar de la lista

Más detalles

forma de entrenar a la nuerona en su aprendizaje.

forma de entrenar a la nuerona en su aprendizaje. Sistemas expertos e Inteligencia Artificial,Guía5 1 Facultad : Ingeniería Escuela : Computación Asignatura: Sistemas expertos e Inteligencia Artificial Tema: SISTEMAS BASADOS EN CONOCIMIENTO. Objetivo

Más detalles

Capítulo 5. Cliente-Servidor.

Capítulo 5. Cliente-Servidor. Capítulo 5. Cliente-Servidor. 5.1 Introducción En este capítulo hablaremos acerca de la arquitectura Cliente-Servidor, ya que para nuestra aplicación utilizamos ésta arquitectura al convertir en un servidor

Más detalles

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON)

3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON) 3.1 INGENIERIA DE SOFTWARE ORIENTADO A OBJETOS OOSE (IVAR JACOBSON) 3.1.1 Introducción Este método proporciona un soporte para el diseño creativo de productos de software, inclusive a escala industrial.

Más detalles

ANEXO 26-A COMITÉ PERMANENTE DE INTERPRETACIÓN SIC N 32 ACTIVOS INTANGIBLES COSTOS DE SITIOS WEB. (Modificada en 2008) (IV Difusión)

ANEXO 26-A COMITÉ PERMANENTE DE INTERPRETACIÓN SIC N 32 ACTIVOS INTANGIBLES COSTOS DE SITIOS WEB. (Modificada en 2008) (IV Difusión) ANEXO 26-A COMITÉ PERMANENTE DE INTERPRETACIÓN SIC N 32 ACTIVOS INTANGIBLES COSTOS DE SITIOS WEB (Modificada en 2008) (IV Difusión) Interpretación SIC-32 Activos Intangibles - Costos de Sitios Web Referencias

Más detalles

Capitulo I. Introducción

Capitulo I. Introducción Capitulo I. Introducción 1.1 Descripción del trabajo El ser humano, como todos sabemos tiene la necesidad de comunicarse, de ser escuchado y sobretodo interactuar con los demás seres vivos que lo rodean.

Más detalles

Operación Microsoft Access 97

Operación Microsoft Access 97 Trabajar con Controles Características de los controles Un control es un objeto gráfico, como por ejemplo un cuadro de texto, un botón de comando o un rectángulo que se coloca en un formulario o informe

Más detalles

Tema 2 : Códigos Binarios

Tema 2 : Códigos Binarios Tema 2 : Códigos Binarios Objetivo: Conocer diferentes códigos binarios Conocer algunos códigos de detección y corrección de errores. Códigos alfanuméricos 1 Códigos Binarios A la representación de cifras,

Más detalles

Tecnologías en la Educación Matemática. Expresiones. Datos. Expresiones Aritméticas. Expresiones Aritméticas 19/08/2014

Tecnologías en la Educación Matemática. Expresiones. Datos. Expresiones Aritméticas. Expresiones Aritméticas 19/08/2014 Tecnologías en la Educación Matemática jac@cs.uns.edu.ar Dpto. de Ciencias e Ingeniería de la Computación UNIVERSIDAD NACIONAL DEL SUR 1 Datos Los algoritmos combinan datos con acciones. Los datos de entrada

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

DISEÑO DE FUNCIONES (TRATAMIENTOS)

DISEÑO DE FUNCIONES (TRATAMIENTOS) DISEÑO DE FUNCIONES (TRATAMIENTOS) Diseño Estructurado. Estrategias para Derivar el Diagrama de Estructura. Diseño de Módulos Programables. 1. DISEÑO ESTRUCTURADO El Diseño es el proceso por el cual se

Más detalles

❷ Aritmética Binaria Entera

❷ Aritmética Binaria Entera ❷ Una de las principales aplicaciones de la electrónica digital es el diseño de dispositivos capaces de efectuar cálculos aritméticos, ya sea como principal objetivo (calculadoras, computadoras, máquinas

Más detalles

Administración por Procesos contra Funciones

Administración por Procesos contra Funciones La administración moderna nos marca que en la actualidad, las organizaciones que no se administren bajo un enfoque de procesos eficaces y flexibles, no podrán sobrepasar los cambios en el entorno y por

Más detalles

Sistemas de numeración

Sistemas de numeración Sistemas de numeración Un sistema de numeración es un conjunto de símbolos y reglas que permiten representar datos numéricos. Los sistemas de numeración actuales son sistemas posicionales, que se caracterizan

Más detalles

Para representar los conjuntos, los elementos y la relación de pertenencia, mediante símbolos, tendremos en cuenta las siguientes convenciones:

Para representar los conjuntos, los elementos y la relación de pertenencia, mediante símbolos, tendremos en cuenta las siguientes convenciones: 2. Conjuntos 2.1 Introducción El concepto de conjunto, de singular importancia en la ciencia matemática y objeto de estudio de una de sus disciplinas más recientes, está presente, aunque en forma informal,

Más detalles

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX

COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX COMO CONFIGURAR UNA MAQUINA VIRTUAL EN VIRTUALBOX PARA ELASTIX En este manual se presenta el proceso de configuración de una Maquina Virtual en VirtualBox, que será utilizada para instalar un Servidor

Más detalles

Educación y capacitación virtual, algo más que una moda

Educación y capacitación virtual, algo más que una moda Éxito Empresarial Publicación No.12 marzo 2004 Educación y capacitación virtual, algo más que una moda I Introducción Últimamente se ha escuchado la posibilidad de realizar nuestra educación formal y capacitación

Más detalles

Sistemas de Gestión de Calidad. Control documental

Sistemas de Gestión de Calidad. Control documental 4 Sistemas de Gestión de Calidad. Control documental ÍNDICE: 4.1 Requisitos Generales 4.2 Requisitos de la documentación 4.2.1 Generalidades 4.2.2 Manual de la Calidad 4.2.3 Control de los documentos 4.2.4

Más detalles

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO

DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO I. SISTEMAS NUMÉRICOS DESARROLLO DE HABILIDADES DEL PENSAMIENTO LÓGICO LIC. LEYDY ROXANA ZEPEDA RUIZ SEPTIEMBRE DICIEMBRE 2011 Ocosingo, Chis. 1.1Sistemas numéricos. Los números son los mismos en todos

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

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología

Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología Ciclo de vida y Metodologías para el desarrollo de SW Definición de la metodología La metodología para el desarrollo de software es un modo sistemático de realizar, gestionar y administrar un proyecto

Más detalles

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD

Ingº CIP Fabian Guerrero Medina Master Web Developer-MWD 1 Java es un lenguaje de programación de Sun Microsystems originalmente llamado "Oak. James Gosling Bill Joy 2 Oak nació para programar pequeños dispositivos electrodomésticos, como los asistentes personales

Más detalles

Apuntes de Matemática Discreta 9. Funciones

Apuntes de Matemática Discreta 9. Funciones Apuntes de Matemática Discreta 9. Funciones Francisco José González Gutiérrez Cádiz, Octubre de 004 Universidad de Cádiz Departamento de Matemáticas ii Lección 9 Funciones Contenido 9.1 Definiciones y

Más detalles

Elementos requeridos para crearlos (ejemplo: el compilador)

Elementos requeridos para crearlos (ejemplo: el compilador) Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción

Más detalles

En la actualidad ASCII es un código de 8 bits, también conocido como ASCII extendido, que aumenta su capacidad con 128 caracteres adicionales

En la actualidad ASCII es un código de 8 bits, también conocido como ASCII extendido, que aumenta su capacidad con 128 caracteres adicionales Definición(1) Sistemas numéricos MIA José Rafael Rojano Cáceres Arquitectura de Computadoras I Un sistema de representación numérica es un sistema de lenguaje que consiste en: un conjunto ordenado de símbolos

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

Los sistemas de numeración se clasifican en: posicionales y no posicionales.

Los sistemas de numeración se clasifican en: posicionales y no posicionales. SISTEMAS NUMERICOS Un sistema numérico es un conjunto de números que se relacionan para expresar la relación existente entre la cantidad y la unidad. Debido a que un número es un símbolo, podemos encontrar

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

El modelo de ciclo de vida cascada, captura algunos principios básicos:

El modelo de ciclo de vida cascada, captura algunos principios básicos: Ciclo de Vida del Software Un modelo de ciclo de vida define el estado de las fases a través de las cuales se mueve un proyecto de desarrollo de software. El primer ciclo de vida del software, "Cascada",

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

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación.

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación. Unidad II Metodología de Solución de Problemas 2.1 Descripción del problema (enunciado). Este aspecto nos indica describir de manera objetiva la realidad del problema que se esta investigando. En la descripción

Más detalles

SISTEMAS DE NUMERACIÓN. Sistema de numeración decimal: 5 10 2 2 10 1 8 10 0 =528 8 10 3 2 10 2 4 10 1 5 10 0 9 10 1 7 10 2 =8245,97

SISTEMAS DE NUMERACIÓN. Sistema de numeración decimal: 5 10 2 2 10 1 8 10 0 =528 8 10 3 2 10 2 4 10 1 5 10 0 9 10 1 7 10 2 =8245,97 SISTEMAS DE NUMERACIÓN Un sistema de numeración es un conjunto de símbolos y reglas que permiten representar datos numéricos. La norma principal en un sistema de numeración posicional es que un mismo símbolo

Más detalles

Parámetros con la ventana de selección de usuario, reglas, texto y descomposición (IVE)

Parámetros con la ventana de selección de usuario, reglas, texto y descomposición (IVE) QUÉ SON CONCEPTOS PARAMÉTRICOS? Los conceptos paramétricos de Presto permiten definir de una sola vez una colección de conceptos similares a partir de los cuales se generan variantes o conceptos derivados

Más detalles

EL PROCESO DE BENCHMARKING

EL PROCESO DE BENCHMARKING EL PROCESO DE BENCHMARKING Michael J. Spendolini El benchmarking es un proceso sistemático y continuo para evaluar los productos, servicios y procesos de trabajo de las organizaciones que son reconocidas

Más detalles

SistemA Regional de Información y Evaluación del SIDA (ARIES)

SistemA Regional de Información y Evaluación del SIDA (ARIES) SistemA Regional de Información y Evaluación del SIDA (ARIES) Que es ARIES? El Sistema Regional de Información y Evaluación del SIDA (ARIES) es un sistema informático del VIH/SIDA basado en el internet

Más detalles

Capitulo III. Diseño del Sistema.

Capitulo III. Diseño del Sistema. Capitulo III. Diseño del Sistema. Para el desarrollo del sistema en la presente tesis se utilizo el paradigma orientado a objetos utilizando el lenguaje Java en su versión 1.2. Por medio de este lenguaje

Más detalles

Anexo B. Comunicaciones entre mc y PC

Anexo B. Comunicaciones entre mc y PC Anexo B Comunicaciones entre mc y PC En este apartado se hará hincapié en los comandos para el manejo del módulo de comunicaciones desde el PC. Conociendo estos comando se podrá realizar una aplicación

Más detalles

Gestión de la Configuración

Gestión de la Configuración Gestión de la ÍNDICE DESCRIPCIÓN Y OBJETIVOS... 1 ESTUDIO DE VIABILIDAD DEL SISTEMA... 2 ACTIVIDAD EVS-GC 1: DEFINICIÓN DE LOS REQUISITOS DE GESTIÓN DE CONFIGURACIÓN... 2 Tarea EVS-GC 1.1: Definición de

Más detalles

Agradecimiento: A Javier Lomelín Urrea por su dedicación y esmero en este proyecto. Manuel Fernando Guzmán Muñoz Presidente OMIJal

Agradecimiento: A Javier Lomelín Urrea por su dedicación y esmero en este proyecto. Manuel Fernando Guzmán Muñoz Presidente OMIJal Karel para todos! 1 Estás interesado en aprender a programar en lenguaje de Karel? Te interesa la Olimpiada Mexicana de Informática? Esta es tu oportunidad de unirte al equipo OMI y ser parte de la mejor

Más detalles