Beruflich Dokumente
Kultur Dokumente
Clase Introductoria
En caso de violacin de la tica mnima que debera tener un futuro profesional, la persona y su equipo recibirn cero como nota en dicho proyecto y adems se volvern a revisar todos sus proyectos anteriores en bsqueda de indicios de otras violaciones ticas y se tomarn las medidas que sean correspondientes en caso de conseguirlas.
Eslabones importantes
Gdel y Turing: Cambiaron radicalmente las ciencias matemticas,
con sus descubrimientos. Hechos importantes:
Teorema de Gdel, Toda formulacin axiomtica consistente de la teora de nmeros contiene preposiciones indecidibles, es decir cualquier teora matemtica ser siempre incompleta, porque existirn afirmaciones que no se podrn demostrar ni negar. El teorema anterior, motivo a Alan Turing a estudiar que funciones podan ser calculadas y cules no, surgiendo de esta forma el Teorema de Turing, el cual publico en su articulo sobre los nmeros calculables en el cual demostraba que existen problemas irresolubles y adems introdujo el concepto de la mquina de Turing, que es una entidad matemtica abstracta que formalizo por primera vez el concepto de algoritmo.
Eslabones importantes
Autmatas: Claude Elwood Shannon creo las bases para la
aplicacin de la lgica matemtica a los circuitos combinatorios y secuenciales, lo cual a la larga se convirti en la teora de maquinas secuenciales y autmatas finitos. Hechos importantes:
Un autmata es un sistema capaz de transmitir informacin. Es decir acepta seales de su entorno, como resultado cambia de estado y transmite otras seales a su medio. Esta definicin es muy amplia y abarca cualquier mquina, por lo que se hace demasiado general para su estudio terico, por lo que era necesario introducir limitaciones en su definicin. La salida de un autmata puede ser muy resumida como por ejemplo una seal binaria.
Eslabones importantes
Lenguajes y Gramticas: En el campo de la lingstica Noam
Chomsky propuso la teora de las gramticas transformacionales. Hechos importantes:
Esta teora estableci las bases para la lingstica matemtica que sirvi como herramienta para el estudio y formalizacin de los lenguajes de computadora. Dividi el estudio de los lenguajes en anlisis de la estructura de las frases (gramtica) y su significado (semntica), pudiendo a su vez la gramtica analizar las formas que toman las palabras (morfologa), su combinacin para formar frases correctas (sintaxis).
Aunque la distincin entre la sintaxis y la semntica desde el punto de vista terico es un poco artificial, tiene enorme trascendencia prctica, especialmente en el diseo de compiladores.
Eslabones importantes
Mquinas Abstractas y Lenguajes Formales: Ambas disciplinas
poseen una relacin muy estrecha, ya que los mismos fenmenos aparecen independientemente en ambas y es posible establecer correspondencia entre ellas (isomorfismo). Hechos importantes:
Noam Chomsky, clasific las gramticas y lenguajes formales de acuerdo con una jerarqua de cuatro grados. Paralelo a esto existe una jerarqua de maquinas abstractas equivalentes para cada nivel de la clasificacin de Chomsky.
Debido a estos descubrimientos, surgi una nueva rama de estudios: La informtica terica.
La informtica terica
Informtica terica: Rama de rama de las matemticas que hace
uso de lo anteriormente expuesto, pero con un objetivo muy concreto: conseguir mejores sistemas de computacin y clasificar los problemas de acuerdo con su dificultad al ser computados por diferentes modelos. Hechos importantes:
Nace a partir de problemas que se planteaban en la lgica matemtica hacia principios de siglo.
Tradicionalmente, Se distinguen dos grandes campos: la teora de lenguajes formales y las teoras de la calculabilidad y de la complejidad.
Pero el concepto de programa an no exista, siendo estas computadoras, si podan nombrarse as, imposibles de programar mediante el uso de un lenguaje, y su programacin consista en modificar su hardware de alguna forma para que cumpliesen con la tarea requerida, lo cual era propenso a muchos errores.
(continuacin)
John von Neumann fue un matemtico hngaroestadounidense, de ascendencia juda, que realiz contribuciones importantes en fsica cuntica, anlisis funcional, teora de conjuntos, informtica, economa, anlisis numrico, hidrodinmica (de explosiones), estadstica y muchos otros campos de la matemtica. Recibi su doctorado en matemticas de la Universidad de Budapest a los 23 aos. Fue pionero de la computadora digital moderna publicando un artculo acerca del almacenamiento de programas.
Fuente: wikipedia
El concepto de programa almacenado permiti la lectura de un programa dentro de la memoria de la computadora, y despus la ejecucin de las instrucciones del mismo sin tener que volverlas a escribir.
(continuacin)
Debido a al trabajo de John von Neumann ahora se tiene la idea de un computador que ejecute un conjunto mnimo de instrucciones bsicas para realizar todas sus operaciones en lugar de cambiar su arquitectura de hardware para llevar a cabo la misma labor.
Debido a esto ahora surge el concepto de lenguaje de maquina, el cual expresa a nivel de este conjunto de instrucciones bsicas expresadas en binario, el programa que resolva la tarea requerida por el operador de la computadora.
(continuacin)
Ahora los programas podan ser planteados con este lenguaje de maquina en la memoria de la maquina, como por ejemplo el siguiente programa realizado para la arquitectura LC-3
En este programa una lnea de 16 bits representa un valor simple o una instruccin de maquina, comenzando su ejecucin en la primera lnea, al tomarla de la memoria decodificarla (interpretarla) y ejecutarla, entonces el control pasa a la siguiente lnea y el proceso es repetido hasta que no existan instrucciones o se consiga una instruccin de fin de ejecucin (halt).
(continuacin)
Debido a los programas almacenados se hizo necesario escribir estas secuencias de cdigos o programas que permitiran que los computadores realizaran los clculos deseados. En un principio se uso el lenguaje de Maquina como se mostro anteriormente, que son cdigos numricos que representan las operaciones reales de la maquina que iban a efectuarse, por ejemplo:
C7 06 0000 0002
Representa la instruccin para mover el nmero 2 a la ubicacin 0000 (hexadecimal) en un procesador Intel 80x86.
La escritura de estos cdigos es tediosa y consume mucho tiempo, por lo que se debi buscar una solucin a este problema.
(continuacin)
Debido a esto surgi el lenguaje ensamblador, en el cual las instrucciones y las localidades de memoria son formas simblicas dadas, por ejemplo la instruccin anterior seria:
Suponiendo claro que la localidad de memoria 0000 es X. El trabajo es traducir los cdigos simblicos y las localidades de memoria del lenguaje ensamblador a los cdigos numricos correspondientes del lenguaje de mquina.
(continuacin)
Esto mejoro la velocidad con la que se podan escribir los programas, sin embargo su principal defecto es que no es fcil de escribir y es difcil de leer y comprender, adems de ser dependiente de la plataforma para la cual se creo.
(continuacin)
Por lo que el siguiente paso fue escribir las operaciones de un programa de una manera concisa que se pareciera a la notacin matemtica o el lenguaje natural. Esto implica que sea independiente de cualquier maquina en particular y se pudiese traducir mediante un programa en cdigo ejecutable, por ejemplo la instruccin anterior se podra plasmar como:
X=2
En un principio se tema que esto no fuese posible y que si lo fuera, el cdigo objeto sera tan poco eficiente que resultara intil.
El lenguaje FORTRAN, creado por John Backus, demostr que estos temores eran infundados.
(continuacin)
Lo que comenz a hacer evidente la importancia de los lenguajes de alto nivel, por ejemplo a continuacin se compara un programa en ensamblador contra uno equivalente en C++, el objetivo del mismo es llevar a cabo una suma de los elementos presentes en un vector.
(continuacin)
No obstante el trabajo realizado hasta el momento no era bien comprendido. Noam Chomsky comenz con su estudios del lenguaje natural por ese mismo momento lo cual junto con las maquinas abstractas permitieron sentar las bases de los compiladores modernos. A medida que el problema del lxico, sintaxis y semntica se comprenda mejor gracias a los avances en estas reas, se empezaron a realizar programas que automatizaran esta parte del desarrollo de un compilador, llamndose a estos programas compiladores de compilador. Ejemplo para el anlisis lxico: Jflex o lex. Ejemplo para el anlisis sintctico: Yacc o CUP.
(continuacin)
La arquitectura de Von Neumann marca el punto de partida de la informtica moderna. Si se escriban los programas utilizando claves mnemotcnicas (abreviaciones de los cdigos de operacin, ms fciles de recordar que los nmeros), los programas eran ms sencillos de escribir: Lenguaje Ensamblador. En esta dcada de los cincuenta, la investigacin se orient hacia la creacin de un lenguaje en el que las acciones fueran expresadas de la manera ms natural posible por el programador y que fuese lo ms independiente posible de la mquina, por lo tanto aparecen: Los lenguajes de alto nivel. En caso de que el lenguaje fuente que hay que traducir sea de alto nivel y el lenguaje obtenido, de bajo nivel, se utiliza el trmino compilador.
(fuente:www.complang.tuwien.ac.at/anton/comp.lang-statistics/)
Paradigmas computacionales
Los lenguajes de programacin se iniciaron imitando y abstrayendo las instrucciones existentes de forma predeterminada en las computadoras. No es entonces ninguna sorpresa que todos se asemejen al modelo propuesto por von Neumman ya que todos los computadores modernos se basan en el mismo: las variables representan localidades de memoria y la asignacin le permite al programa operar sobre estas localidades, etc. Por lo que se puede decir que los primeros lenguajes fueron imperativos debido a que su caracterstica principal es ser semejantes a la arquitectura de von Neumman representando una secuencia de sentencias que representaban comandos o imperativos.
Paradigmas computacionales
Con el paso del tiempo surgieron dos paradigmas o patrones de tipos de lenguajes de lenguajes de programacin, proviniendo ambos de las matemticas. El paradigma funcional, que esta basado en la nocin abstracta del calculo de una funcin como se estudia en el clculo lambda. El paradigma lgico, que se encuentra basado en la lgica simblica.
Paradigmas computacionales
Posteriormente, surgi un cuarto paradigma, el orientado a objetos, el cual es una extensin al paradigma imperativo con la diferencia de que permite obtener programas compuestos de muy pequeas piezas que interactan de una manera muy cuidadosamente controlada y cuya interaccin y por lo tanto su resultado final, puede ser cambiado fcilmente. Pero sin importar cual paradigma sea el escogido, todos los lenguajes de programacin comparten algunos conceptos en comn y estos son los que estudiaremos a continuacin.
Conceptos Importantes
Traductor:
Transforma un cdigo escrito en un lenguaje fuente a un cdigo equivalente escrito en un lenguaje objeto. como funcin importante, el traductor informa de la presencia de errores en el programa fuente.
Conceptos Importantes
Compilador:
Traductor de un lenguaje de alto nivel a uno de bajo nivel. Esto se cumple en el caso de que el lenguaje fuente sea un lenguaje de alto nivel, como por ejemplo Cobol, Pascal o C, y el lenguaje objeto sea un lenguaje de bajo nivel, como por ejemplo el lenguaje mquina o el de ensamblador.
Conceptos Importantes
Ensamblador:
Traductor de lenguaje de ensamblador a lenguaje mquina. Por ejemplo cuando el lenguaje fuente sea un lenguaje de ensamblador y el lenguaje objeto, un lenguaje mquina.
Conceptos Importantes
Vida de un programa: Desde que se escribe hasta que se ejecuta en una plataforma, se pueden distinguir dos periodos de tiempo:
El tiempo de compilacin. Periodo en el que el programa fuente se traduce al programa objeto equivalente. El tiempo de ejecucin. Cuando el programa objeto se ejecuta sobre una plataforma.
Conceptos Importantes
Interprete:
Compila y ejecuta cada sentencia del programa. No genera cdigo objeto equivalente al cdigo fuente, sino que compila paso a paso ejecutando al mismo tiempo:
1) 2) 3) 4) Toma una sentencia del programa fuente. La traduce a su equivalente en el lenguaje objeto. La ejecuta sobre la plataforma. Repite el proceso con la sentencia siguiente del cdigo fuente.
Conceptos Importantes
Intrprete precompilado o compilador interpretativo:
Hace una primera compilacin para obtener un cdigo intermedio libre de error que despus se ejecuta por interpretacin.
Conceptos Importantes
Preprocesador:
Lee el programa fuente y en cierta manera lo modifica antes de la compilacin, procesndolo segn unas directivas de precompilacin y las opciones del entorno de programacin. As pues, segn el lenguaje, el preprocesador se ocupa de incluir archivos, eliminar comentarios, expandir macros, activar directivas de compilacin, etc.
Conceptos Importantes
Enlazador (linker) Muchas veces el programa fuente remite a bibliotecas de programas que ya existen (reaprovechamiento de cdigo). El enlazador es el encargado de construir el archivo ejecutable aadiendo al archivo objeto generado por compilador las cabeceras necesarias y las bibliotecas utilizadas por el programa fuente.
Conceptos Importantes
Depurador (debugger)
Si el compilador ha generado correctamente el programa objeto, el depurador permite hacer un seguimiento de la ejecucin del mismo paso a paso, muestra el contenido de las variables en tiempo de ejecucin, permite introducir puntos de detencin y ayuda a buscar errores de funcionamiento del programa.
Conceptos Importantes
Visin superficial del proceso de compilacin mediante sus principales actores:
Determina el tipo de los resultados intermedios de las operaciones. Comprueba que los operandos de un operador pertenezcan al conjunto de los tipos posibles para el operador y si son compatibles entre s.
Se asigna espacio de memoria para cada nombre del programa fuente (variables, tipos, constantes, etc.).
Se traduce cada una de las instrucciones en cdigo intermedio a una secuencia de instrucciones en cdigo objeto que ejecuten la misma tarea.
En resumen
Al hablar de un compilador, hay que especificar como mnimo los tipos de lenguajes siguientes:
El lenguaje fuente. El lenguaje objeto y la plataforma de ejecucin. El lenguaje en el que est escrito el propio compilador, denominado lenguaje de implementacin. Ejemplo
En un compilador de Fortran a cdigo mquina del PC que se ejecuta sobre un PC: El lenguaje fuente sera el Fortran. El lenguaje objeto sera el cdigo mquina del PC. El lenguaje en el que est escrito tambin sera cdigo mquina del PC.
En resumen
Normalmente el lenguaje fuente se especifica generalmente en tres partes: Especificacin lxica. Especificacin sintctica . Especificacin semntica .
Construccin de Compiladores
Especificacin lxica.
Se hace con expresiones regulares que definen los componentes lxicos del lenguaje (testigos). Utilizando estas definiciones se puede crear automticamente un analizador lxico del lenguaje.
Construccin de Compiladores
Especificacin sintctica.
Se utiliza una gramtica libre de contexto, escrita generalmente en notacin BNF, para detallar la estructura sintctica del lenguaje. A partir de esta gramtica, y junto con el analizador lxico obtenido en la parte anterior, se puede generar, tambin automticamente, un analizador sintctico del lenguaje.
Construccin de Compiladores
Especificacin semntica. Se describe el significado de cada instruccin sintctica y las reglas semnticas que se deben cumplir. Hay notaciones formales para especificar la semntica de un lenguaje, pero no se utilizan demasiado. La semntica suele ser especificada con palabras (lenguaje natural) y se programa manualmente.
Lectura Complementaria
Leer en el libro:
http://homepages.mty.itesm.mx/rbrena/AyL.html
http://homepages.mty.itesm.mx/rbrena/AyL.pdf
Desde el inicio hasta la pgina 29 (omita la parte de pruebas por induccin), es decir los preliminares realizando al final los ejercicios que considere acordes con lo ledo.
Importante!!!!: aunque esto no es obligatorio, es deseable que Ud. lo haga para poder comprender posteriormente de manera ms intuitiva (sin traumas) algunos conceptos ms avanzados de la teora de lenguajes formales que aplicaremos durante el transcurso de esta materia y por lo tanto es importante si Ud. tiene aspiraciones de aprobar la misma.