Este documento discute los lenguajes de programación, sus aplicaciones comunes como C++ y Java, y su uso en dispositivos electrónicos. También describe brevemente la historia de los lenguajes de programación desde Charles Babbage y Ada Lovelace en el siglo XIX hasta el desarrollo de la máquina analítica. Finalmente, explica qué son las herramientas Flex y Bison, desarrolladas por el proyecto GNU para generar analizadores léxicos y sintácticos.
1. EDISON CAICEDO
Herramientas para la construcción de procesadores de lenguaje.
Aplicación de los lenguajes
Los lenguajes de programación hoy en día tienen una infinidad de aplicaciones, básicamente
cualquier objeto electrónico tiene cierto grado de programación. Algunos de los más comunes son
C++ y JAVA, también existe HTML, HTTP, XML, XAML y C#, este ultimo actualmente es el más
utilizado en todos los dispositivos y redes basados en MICROSOFT (Xbox 350, Windows Mobile,
Windows Phone, Windows Cloud, Zune, etc.). Ya que los lenguajes de programación son
informáticamente un puente entre el Hardware y el Software estos permiten que las computadoras
puedan establecer conexión con un celular, una cámara o una consola portátil de videojuego. Otra
de las aplicaciones de los lenguajes de programación son las matemáticas como las calculadoras,
cajas registradoras, cajeros automáticos, por solo mencionar algunos ejemplos sencillos. Existen
también niveles de programación mucho más complejos como los videojuegos o los pilotos
automáticos de los aviones comerciales o las máquinas de juego de los casinos que siguen un
patrón de probabilidad a partir de un arreglo de números al azar establecido por una programación
numérica. La robótica es la combinación de mecánica, electrónica y programación, la cual en base
a sensores y mecanismos sigue una serie de instrucciones algorítmicas las cuales le permiten por
2. ejemplo a un brazo robótico montar una rueda, ajustar un tornillo o cortar un rectángulo de 3 cm
cuadrados en una placa de acero. Con el avance de la tecnología los límites de la programación se
vuelven cada vez más distante
HISTORIA
Los primeros lenguajes de programación surgieron de la idea de Charles Babagge, la cual se le
ocurrió a este hombre a mediados del siglo XIX. Era un profesor matemático de la universidad de
Cambridge e inventor inglés, que al principio del siglo XIX predijo muchas de las teorías en que se
basan los actuales ordenadores. Consistía en lo que él denominaba la maquina analítica, pero que
por motivos técnicos no pudo construirse hasta mediados del siglo XX. Con él colaboro Ada
Lovedby, la cual es considerada como la primera programadora de la historia, pues realizo
programas para aquélla supuesta máquina de Babagge, en tarjetas perforadas. Como la maquina
no llego nunca a construirse, los programas de Ada, lógicamente, tampoco llegaron a ejecutarse,
pero si suponen un punto de partida de la programación, sobre todo si observamos que en cuanto
se empezó a programar, los programadores utilizaron las técnicas diseñadas por Charles Babagge,
y Ada, que consistían entre otras, en la programación mediante tarjetas perforadas. A pesar de
ello, Ada ha permanecido como la primera programadora de la historia. Se dice por tanto que
estos dos genios de antaño, se adelantaron un siglo a su época, lo cual describe la inteligencia de
la que se hallaban dotados.
En 1823 el gobierno Británico lo apoyo para crear el proyecto de una máquina de diferencias, un
dispositivo mecánico para efectuar sumas repetidas. Pero Babagge se dedicó al proyecto de la
máquina analítica, abandonando la máquina de diferencias, que se pudiera programar con tarjetas
perforadas, gracias a la creación de Charles Jacquard (francés). Este hombre era un fabricante de
tejidos y había creado un telar que podía reproducir automáticamente patrones de tejidos,
leyendo la información codificada en patrones de agujeros perforados en tarjetas de papel rígido.
Entonces Babagge intento crear la máquina que se pudiera programar con tarjetas perforadas
para efectuar cualquier cálculo con una precisión de 20 dígitos. Pero la tecnología de la época no
bastaba para hacer realidad sus ideas. Si bien las ideas de Babagge no llegaron a materializarse de
forma definitiva, su contribución es decisiva, ya que los ordenadores actuales responden a un
esquema análogo al de la máquina analítica. En su diseño, la máquina constaba de cinco unidades
básicas:
Unidad de entrada, para introducir datos e instrucciones.
Memoria, donde se almacenaban datos y resultados intermedios.
Unidad de control, para regular la secuencia de ejecución de las operaciones.
Unidad Aritmético-Lógica, que efectúa las operaciones.
Unidad de salida, encargada de comunicar al exterior los resultados.
4. Las herramientas Flex y Bison
Son las herramientas desarrolladas en el proyecto GNU (Free Software Foundation) equivalentes a
lex y yacc en el sistema operativo UNIX®. Están asociadas al lenguaje C, aunque flex puede
también generar su salida en el lenguaje C++. Las referencias que creo oficiales (al menos en
cuanto a documentación) son las siguientes (aunque también podrás conseguir estos documentos
a través de los enlaces que aparecen posteriormente):
Vern Paxson [1995] Flex, version
Charles Donnelly, Richard Stallman [1999] Bison. The YACC-compatible Parser Generator. (Asigno
la autoría a Donnelly y Stallman porque así lo ponía en la versión 1.28, aunque no aparece
mención alguna en la última, 1.35. Por cierto, este Stallman es el mítico Stallman, por supuesto,
para que veas cuáles son sus intereses particulares. Su sitio es espectacular.)
Si usas GNU/Linux, es casi seguro que ya tengas instalados estos programas; si no los tienes,
búscalos en tu distribución, porque están seguro. Para usarlos, solo tienes que leer la
documentación, y listo.
Que es Flex y Bison
¿Qué es Bison?
GNU bison es un programa generador de analizadores sintácticos de propósito general
perteneciente al proyecto GNU disponible para prácticamente todos los sistemas operativos, se
usa normalmente acompañado de flex aunque los analizadores léxicos se pueden también obtener
de otras formas.
Bison convierte la descripción formal de un lenguaje, escrita como una gramática libre de contexto
LALR, en un programa en C, C++, o Java que realiza análisis sintáctico. Es utilizado para crear
analizadores para muchos lenguajes, desde simples calculadoras hasta lenguajes complejos. Para
utilizar Bison, es necesaria experiencia con el la sintaxis usada para describir gramáticas.
5. GNU bison tiene compatibilidad con Yacc, todas las gramáticas bien escritas para Yacc, funcionan
en Bison sin necesidad de ser modificadas. Cualquier persona que esté familiarizada con Yacc
podría utilizar Bison sin problemas.
Bison fue escrito en un principio por Robert Corbett; Richard Stallman lo hizo compatible con Yacc
y Wilfred Hansen de la Carnegie Mellon University añadió soporte para literales multicaracter y
otras características.
Flex:
El Flex define las reglas de reconocimiento de símbolos (Tokens) a partir de expresiones regulares.
Cuando un Token es reconocido por uno de estos patrones de agrupamiento se le define una
acción, por lo general esta acción es devolver el Tipo y el valor (lexema).
El Flex cuando se utiliza combinado con el Bison, utiliza las definiciones de los Tokens realizadas en
el Bison para la comunicación entre ellos,
Los ficheros del Flex para C++ utilizan por convenio la extensión ‘.ll’. La sintaxis de un fichero en
flex es la siguiente:
... definiciones ...
%%
... reglas...
%%
... subrutinas ...