Introducción: Fundamentos, historia
Introducción
¡Hola!
¡Qué alegría saber que vas a comenzar un proceso educativo! Me satisface encontrar a personas dedicadas y motivadas en aprender cosas nuevas, así es que no te vas a arrepentir, tus esfuerzos serán recompensados. Con mucho ánimo te doy la bienvenida a esta Unidad de Aprendizaje preparada para ti, espero sea de tu agrado.
Este curso se denomina Compiladores y en él aprenderemos conceptos, técnicas, herramientas y métodos de diseño e implementación de compiladores.
Los lenguajes de programación permiten a los programadores escribir programas de computadora. La mayoría de los programas que se ejecutan en las computadoras fueron escritos en algún lenguaje de programación, de hecho, muy pocos programas aún son escritos en lenguaje ensamblador.
Para un ingeniero de sistemas computacionales es importante saber cómo desarrollar un compilador para una nueva plataforma en la cual no exista un compilador. Además, el diseño de compiladores utiliza técnicas que también son aplicables a otros dominios de ciencias computacionales como: lenguajes de programación, arquitectura de computadoras, teoría de los lenguajes, algoritmos, e ingeniería de software.
Para comprender cómo funciona un compilador es necesario conocer sus fases. La razón por la cual el procesamiento del código fuente se divide en análisis léxico y sintáctico es que de esta manera el procesamiento es más simple. El análisis sintáctico directo del código fuente se volvería muy complicado debido a las variaciones que puede presentar el mismo.
Los compiladores para los lenguajes de programación son aplicaciones muy complejas, que pueden comprender más de un millón de líneas de código y su desarrollo puede tomar bastante tiempo. Por lo tanto, el desarrollo de un compilador requiere el uso de herramientas.
Para comprender cómo funciona la herramienta Lex/flex, es necesario entender lo que son las expresiones regulares. También, es conveniente conocer cómo se implementa un analizador léxico para casos en los cuales no exista esa herramienta.
En esta primera sesión veremos los conceptos básicos de los compiladores, las razones que condujeron a su desarrollo, y su historia. Enseguida, veremos cuáles son las diferencias, ventajas y desventajas entre compiladores e intérpretes. Luego veremos qué otras herramientas están relacionadas con los compiladores.
¡Empecemos y buena vibra!
Desarrollo del tema
¿Qué es un compilador?
Los lenguajes de programación permiten a los programadores escribir programas de computadora. La mayoría de los programas que ejecutan las computadoras de hoy fueron escritos en algún lenguaje de programación.
Para poder ejecutar un programa, éste debe ser traducido a una forma adecuada para su ejecución por la computadora (lenguaje de máquina), Las aplicaciones llamadas compiladores son capaces de efectuar esa traducción.
El compilador, junto con el intérprete, y el ensamblador forman parte de los procesadores de lenguaje. El compilador es un programa que puede leer un programa escrito en un lenguaje fuente y traducirlo a un programa equivalente en un lenguaje objetivo.
El intérprete también puede traducir un programa escrito en un lenguaje fuente pero en vez de generar un programa objeto, lo ejecuta inmediatamente.
¿Por qué los compiladores? Breve historia.
Con el desarrollo de la primera computadora de programa almacenado en 1948 surgió la necesidad de escribir secuencias de códigos o programas. Esos primeros programas eran escritos en lenguaje de máquina: códigos numéricos representando operaciones de la computadora. La escritura de programas en lenguaje de máquina era muy tediosa y se llevaba bastante tiempo. Por esas razones, tiempo después los programas empezaron a escribirse en lenguaje ensamblador.
Un ensamblador es un programa que traduce un código en lenguaje ensamblador a código de lenguaje de máquina. El lenguaje ensamblador reduce el tiempo para escribir programas, pero aun así es difícil de escribir y de entender. Por esa razón, el siguiente paso fueron los lenguajes de programación de alto nivel. El primer lenguaje de programación de alto nivel, Short code, fue creado por Mauchly en 1949, y su intérprete fue creado por Schmitt en 1950.
Los programas interpretados eran mucho más lentos que en lenguaje de máquina. El primer compilador, A0, fue creado por Hopper en 1952. El primer compilador de uso amplio, Fortran, fue creado por Backus en 1954. Los programas compilados eran más rápidos que los interpretados. El sistema operativo UNIX era escrito en ensamblador y era muy pesado reescribirlo para otra computadora. Entonces, el compilador de C fue creado por Ritchie en 1972 para reescribir el UNIX.
Compilador contra intérprete:
Los programas compilados son más rápidos que los programas interpretados. Esto es debido a que el programa compilado no se vuelve a traducir mientras que el programa interpretado tiene que volverse a traducir para ejecutar el programa. Los programas interpretados son más fáciles de depurar y pueden ser corregidos sobre la marcha. En cambio, los programas compilados primero deben ser escritos para generar el programa como archivo ejecutable y enseguida poder ejecutarlo.
Fases de la compilación:
Herramientas relacionadas:
Conclusión
Para poder ejecutar un programa de computadora, éste debe ser traducido a una forma adecuada para su ejecución por la computadora (lenguaje de máquina), Las aplicaciones llamadas compiladores son capaces de efectuar esa traducción.
El compilador es una herramienta indispensable para el desarrollo de software, sin esta herramienta la programación es muy difícil, laboriosa, lenta y propensa a errores (bugs).
El compilador e intérprete son procesadores de lenguaje y por lo tanto comparten muchas de sus operaciones. Las fases de la compilación son: análisis léxico, análisis sintáctico, análisis semántico, generación de código intermedio, optimización de código y generación de código. Durante el análisis léxico, el programa fuente es dividido en una secuencia de unidades llamadas tokens. Durante el análisis sintáctico, los tokens son agrupados para formar unidades sintácticas. El análisis semántico verifica que el árbol sintáctico cumpla con las reglas del lenguaje.
Los programas compilados son más rápidos que los programas interpretados. Esto es debido a que el programa compilado no se tiene que volver a traducir. En cambio, el programa interpretado tiene que volverse a traducir línea por línea cada vez que se necesite ejecutar el programa.
Los programas interpretados son más fáciles de depurar y pueden ser corregidos sobre la marcha. En cambio, los programas compilados primero deben ser escritos y luego traducidos para poderse ejecutar y depurar.
En una plataforma dada, los compiladores se utilizan junto con otras herramientas como son: editores de código, preprocesadores, ensambladores, enlazadores y depuradores. Existen entornos de desarrollo de software que incluyen todas esas herramientas.
Con esto llegamos al final de la sesión, ¿Qué te pareció? Espero que muy bien pues de aquí partimos para entender lo siguiente. Para concluir adecuadamente la clase, se debe cumplir con las tareas propuestas para demostrar tu aprendizaje y seguir avanzando en tu curso. Te espero en la segunda sesión, hasta pronto.
Fuentes de información
- The First Programming Languages: Crash Course Computer Science #11 (2:25-10:30):
URL: https://www.youtube.com/watch?v=RU1u-js7db8 - P. A. Villalta (Pavillalta). Compiladores e intérpretes (Principal) – Blog de Tecnología (CC BY-NC-ND 3.0)
URL:https://www.postecnologia.com/2013/11/compiladores-e-interpretes-principal.html