SlideShare una empresa de Scribd logo
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR
SEDE IBARRA
ALBERTO JACOME
HERRAMIENTAS PARA LA CONSTRUCCION DE PROCESADORES DE LENGUAJE
La construcción de un procesador de lenguaje es una tarea compleja, y suelen usarse herramientas
de desarrollo de software convencionales (control de la traza, puntos de ruptura, depuradores o
debuggers, etc...). Sin embargo en el caso concreto de los procesadores de lenguaje se pueden
añadir a estas herramientas otras más especializadas, que se han denominado con distintos
nombres: compilador de compiladores (compiler-compilers), generadores de compiladores
(compilers-generators), o sistemas de escritura de traductores (translator-writing systems). A
continuación se muestra una lista de herramientas de este último tipo:
• Generadores de analizadores léxicos (scanner generators): Construyen automáticamente el
código fuente para el análisis léxico a partir de una especificación de los tokens del lenguaje. Esta
especificación está basada en el uso de expresiones regulares, mientras que la organización del
operativos, así por ejemplo para el sistema operativo MS-
ha desarrollado GALEX [MART93].
• Generadores de analizadores sintácticos (parser generators): Construyen el código fuente del
analizador a partir de la especificación de la gramática del lenguaje fuente. Las gramáticas deben
incorporada con el sistema operativo UNIX. Existen versiones comerciales para otros sistemas
operativos, así por ejemplo para el sistema operativo MS-DOS, se puede encontrar PCYACC
(Abraxas Software Inc.) o como software de dominio público BISON. En la Universidad de Oviedo
se ha desarrollado YACCOV [CABA91]. También se están desarrollando nuevas herramientas: JACK
[JACKi], ANTLR [ANTLi], JavaCC, VisualParse++, LL(1) Tools, Yacc++, JavaCUP, etc.
• Analizadores de gramáticas: Dada una gramática especificada formalmente, verifican si es de un
determinado tipo o no. Normalmente se utilizan para verificar las gramáticas LL(k) y LR(k). En la
Universidad de Oviedo se ha desarrollado un analizador de gramáticas LL(1).
• Máquinas de traducción dirigida por sintáxis (syntax-directed translation engines): Producen un
conjunto de rutinas que recorren el árbol sintáctico y generan código intermedio. Se basan en
asociar una o más traducciones a cada nodo del árbol sintáctico.
• Generadores automáticos de código (automatic code generators): Estas herramientas trabajan
con un conjunto de reglas que permiten la tradución del código en lenguaje intermedio al lenguaje
objeto. Las reglas suelen ser reemplazar instrucciones de código intermedio por patrones que
contienen las instrucciones equivalentes de la máquina objeto [MAUR90, LEWI90].
• Analizadores de flujo (data-flow engines): Estas herramientas suministran la información
necesaria para realizar la optimización de código. La reunión de todas estas herramientas
constituyen los denominados compilador de compiladores, que a partir de unas especificaciones
del lenguaje fuente a compilar y del lenguaje objeto, se genera automáticamente el código fuente
del traductor.
APLICACIONES DE LOS PROCESADORES DE LENGUAJE
Las técnicas empleadas en la construcción de traductores, compiladores e intérpretes pueden
aplicarse en la construcción de otras herramientas algunas de las cuales se presentan a
continuación:
• Editoressensibles al contexto: Los editores permiten crear y modificar programas fuente, sin
embargo los editores sensibles al contexto avisan al programador de posibles errores sintácticos
cuando está escribiendo un programa fuente en un determinado lenguaje de programación.
Actualmente la mayor parte de los compiladores incluyen un entorno de programación con un
editor con sintaxis resaltada por colores.
• Conversores de formatos: Utilizan la tecnología de los traductores para convertir una descripción
de ficheros en otra.
• Preprocesadores: Toman como entrada un conjunto de instrucciones y generan código en un
lenguaje de alto o medio nivel.
• Formateadores de código fuente: Tienen como entrada un código fuente, y obtienen como
salida el mismo código fuente mostrado de forma que se puede seguir perfectamente la
estructura del programa.
• Generadores de código: Permiten desarrollar aplicaciones a partir de unas especificaciones muy
compactas, que pueden ser tratadas como un lenguaje de aplicación [LEWI90].
• Generadores de pantallas: Son un caso particular de los generadores de código.
• Verificación estática de programas: Leen el programa fuente y lo analizan para descubrir errores
potenciales, sin ejecutar dicho programa. Ejemplo lint (incorporado de forma estándar por UNIX) y
PC-
• Formateadores de texto: Reciben como entrada un texto con indicaciones de como se desea la
salida y generan dicho texto formateado en un fichero, o para una determinada impresora.
Pueden estar especializados en fórmulas matemáticas, químicas, escritura de música, etc...
Ejemplos TROFF, EQN, etc...
• Intérpretes de comandos de un sistema operativo: Reciben las órdenes del sistema operativo, las
analizan y las ejecutan. Ejemplo COMMAND.COM de MS-DOS.
• Construcción de entornos operativos: Es un caso particular del anterior en el cual las órdenes
suelen recibirse en forma gráfica. Ejemplos WINDOWS, GEM, Macintosh, etc...
• Intérpretes para consultar bases de datos: Reciben las consultas de la base de datos, las analizan
y las ejecutan. Ejemplos SQL, DBASE, etc...
• Compiladores de silicio (silicon compilers): Utilizan las mismas técnicas de construcción de
traductores, compiladores e intérpretes pero implementadas en hardware [BROD92].
• Procesamiento de lenguajes naturales: Aplican las técnicas de construcción de traductores a los
lenguajes naturales (Inglés, Castellano, etc...) permitiendo el análisis, comprensión y traducción.
• Reconocimiento del habla: Se realiza un análisis de los sonidos para construir las palabras.
• Desarrollo de pequeños lenguajes: Suelen ser pequeños lenguajes específicos para el problema
que resuelve la aplicación informática dentro de la cual se desarrollan [FRAN91]
RESEÑA HISTORICA
Los primeros algoritmos conocidos fueron desarrollados en Mesopotamia (región de Irak) entre los
años 3000 y 1500 a.C., cerca de la ciudad de Babilonia. Estos algoritmos eran secuencias de
instrucciones, no tenían estructuras de control alternativas (escribían el algoritmo de diversas
formas) ni repetitivas (escribian las instrucciones tantas veces como fuera necesario). Un estudio
sobre estos algoritmos puede consultarse en el artículo Ancient babylonian algorithms [KNUT72].
El matemático griego Euclides en el siglo IV a.C. construyó un algoritmo para el cálculo del máximo
común divisor de dos números naturales. Este algoritmo ya incluía estructuras de control
iterativas. Charles Babbage construyo entre los años 1820 y 1850 dos máquinas de computar,
ninguna de las cuales fue terminada. De las dos, la máquina analítica fue la que más se parecía a
los ordenadores digitales modernos. Los programas estaban escritos en lenguaje máquina y
utilizaban ciertas tarjetas de operación y de variables (no había memoria). Junto a Babbage trabajó
Ada Augusta, condesa de Lovelace, hija del poeta Lord Byron, que es reconocida por algunos como
la primera programadora (en su honor se llamó Ada al lenguaje desarrollado bajo los auspicios del
Ministerio de Defensa de los Estados Unidos).
Las herramientas Flex y Bison.
Son generadores de analizadores sintácticos
Introducción a Flex
Flex es un una herramienta que permite generar analizadores léxicos. A partir de un conjunto de
expresiones regulares, Flex busca concordancias en un fichero de entrada y ejecuta acciones
asociadas a estas expresiones. Es compatible casi al 100% con Lex, una herramienta clásica de Unix
para la generación de analizadores léxicos, pero es un desarrollo diferente realizado por GNU bajo
licencia GPL.
Introducción a Bison
Bison es un generador de analizadores sintácticos de propósito general que convierte una
descripción para una gramática independiente del contexto (en realidad de una subclase de éstas,
las LALR) en un programa en C que analiza esa gramática. Es compatible al 100% con Yacc, una
herramienta clásica de Unix para la generación de analizadores léxicos, pero es un desarrollo
diferente realizado por GNU bajo licencia GPL. Todas la gramáticas escritas apropiadamente para
Yacc deberían funcionar con Bison sin ningún cambio.
Diseño y construcción de un compilador
Flexybison
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.
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 ...
Como se instala Flex y Bison
Flexybison
Flexybison

Más contenido relacionado

DOCX
PDF
Flexybison
PPTX
Compiladores unidad1
PDF
Trabajo flex byson
PDF
Bison y flex
DOCX
C:\documents and settings\clientea\mis documentos\compiladores
PPT
Cap1 compiladores
Flexybison
Compiladores unidad1
Trabajo flex byson
Bison y flex
C:\documents and settings\clientea\mis documentos\compiladores
Cap1 compiladores

La actualidad más candente (16)

PDF
Compilador Funcionamiento
DOCX
C:\fakepath\el software libre
DOCX
C:\fakepath\compilador
PDF
Flex ybison
PPTX
Compiladores
PPTX
Los compiladores erika y carolina
PPTX
Grupo 1 proceso de lenguajes i
DOCX
C:\fakepath\compiladores
PPTX
Cap2
PPTX
Compiladores diapositivas
PPT
Compiladores
PPT
Cap2 compiladores
DOCX
Tarea de compiladores carmen vargas_metacompiladordescompilador
PPT
Tema 1 introducción compilador
PPT
Compilador
PPTX
Especialidad
Compilador Funcionamiento
C:\fakepath\el software libre
C:\fakepath\compilador
Flex ybison
Compiladores
Los compiladores erika y carolina
Grupo 1 proceso de lenguajes i
C:\fakepath\compiladores
Cap2
Compiladores diapositivas
Compiladores
Cap2 compiladores
Tarea de compiladores carmen vargas_metacompiladordescompilador
Tema 1 introducción compilador
Compilador
Especialidad
Publicidad

Destacado (20)

DOCX
ejercicio 4
DOCX
Dieu Tri Thap Khop
PPTX
Computacion basica ro
PDF
resume 2014
PDF
FHQ Social Media
PDF
Managing Effective Teams Seminar
DOCX
Thoai Hoa Khop Xuong
PPT
Angle2011
PDF
Peek-Howe Website Design
PPT
Animatii lectura in cdi
PPTX
Ligament and Joint Regeneration and Neuvo-generation of the Knee
PPTX
50 Lispenard by Michel Abboud
DOCX
Practica 7
PPT
Pinterest spam followers
PPTX
Working near our loads
PDF
P6-8_CH323_Entrevista
PDF
Obtenga Finest Terrenos Ofertas en Londres desde Expertos en Propiedad Recono...
PDF
Metallica
PDF
Access Energetics Keys ( nicht Bars !)
PDF
Fantastic Recommendations For Getting The Best Insurance For Your Requirements
ejercicio 4
Dieu Tri Thap Khop
Computacion basica ro
resume 2014
FHQ Social Media
Managing Effective Teams Seminar
Thoai Hoa Khop Xuong
Angle2011
Peek-Howe Website Design
Animatii lectura in cdi
Ligament and Joint Regeneration and Neuvo-generation of the Knee
50 Lispenard by Michel Abboud
Practica 7
Pinterest spam followers
Working near our loads
P6-8_CH323_Entrevista
Obtenga Finest Terrenos Ofertas en Londres desde Expertos en Propiedad Recono...
Metallica
Access Energetics Keys ( nicht Bars !)
Fantastic Recommendations For Getting The Best Insurance For Your Requirements
Publicidad

Similar a Flexybison (20)

PDF
Flex y bison
PDF
Flex y bison
PDF
Tutorial Flex y Bison
PDF
Flex bison
PDF
Materia unidad compiladores
PDF
Flex y bison héctor espinosa
PDF
El estudio de los lenguajes de programacion
PDF
COMPILADORES
PPTX
Especialidad
PDF
Flex y bison
PPTX
1.5 GENERADORES DE CODIGO PARA COMPILADORES (COMPILADOR DE COMPILADORES)
PPTX
Repuesto de expo de programacion
PDF
Taller Flex Bison
PPT
El software de base. Sistemas operativos y lenguajes
PDF
Flex y bison
PPTX
Resolución de problemas de algoritmo.
PDF
Flex y bison
PDF
ingenieria de software
DOCX
C:\fakepath\el software libre
DOCX
C:\fakepath\el software libre
Flex y bison
Flex y bison
Tutorial Flex y Bison
Flex bison
Materia unidad compiladores
Flex y bison héctor espinosa
El estudio de los lenguajes de programacion
COMPILADORES
Especialidad
Flex y bison
1.5 GENERADORES DE CODIGO PARA COMPILADORES (COMPILADOR DE COMPILADORES)
Repuesto de expo de programacion
Taller Flex Bison
El software de base. Sistemas operativos y lenguajes
Flex y bison
Resolución de problemas de algoritmo.
Flex y bison
ingenieria de software
C:\fakepath\el software libre
C:\fakepath\el software libre

Último (20)

DOCX
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
PDF
informe_fichas1y2_corregido.docx (2) (1).pdf
PPTX
Propuesta BKP servidores con Acronis1.pptx
PPTX
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
PDF
MANUAL de recursos humanos para ODOO.pdf
PPTX
historia_web de la creacion de un navegador_presentacion.pptx
PDF
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
PPTX
Historia Inteligencia Artificial Ana Romero.pptx
PDF
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
PPT
Protocolos de seguridad y mecanismos encriptación
PPTX
la-historia-de-la-medicina Edna Silva.pptx
PDF
CyberOps Associate - Cisco Networking Academy
PDF
Estrategia de Apoyo de Daylin Castaño (5).pdf
PPTX
modulo seguimiento 1 para iniciantes del
PPTX
Curso de generación de energía mediante sistemas solares
PDF
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
PDF
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
PDF
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
DOCX
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
DOCX
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk
TRABAJO GRUPAL (5) (1).docxsjsjskskksksksks
informe_fichas1y2_corregido.docx (2) (1).pdf
Propuesta BKP servidores con Acronis1.pptx
Diapositivas Borrador Rocha Jauregui David Paolo (3).pptx
MANUAL de recursos humanos para ODOO.pdf
historia_web de la creacion de un navegador_presentacion.pptx
PRESENTACIÓN GENERAL MIPIG - MODELO INTEGRADO DE PLANEACIÓN
Historia Inteligencia Artificial Ana Romero.pptx
ADMINISTRACIÓN DE ARCHIVOS - TICS (SENA).pdf
Protocolos de seguridad y mecanismos encriptación
la-historia-de-la-medicina Edna Silva.pptx
CyberOps Associate - Cisco Networking Academy
Estrategia de Apoyo de Daylin Castaño (5).pdf
modulo seguimiento 1 para iniciantes del
Curso de generación de energía mediante sistemas solares
0007_PPT_DefinicionesDeDataMining_201_v1-0.pdf
MANUAL TECNOLOGÍA SER MINISTERIO EDUCACIÓN
Tips de Seguridad para evitar clonar sus claves del portal bancario.pdf
TRABAJO GRUPAL (5) (1).docxjesjssjsjjskss
TRABAJO GRUPAL (5) (1).docxsjjsjsksksksksk

Flexybison

  • 1. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA ALBERTO JACOME HERRAMIENTAS PARA LA CONSTRUCCION DE PROCESADORES DE LENGUAJE La construcción de un procesador de lenguaje es una tarea compleja, y suelen usarse herramientas de desarrollo de software convencionales (control de la traza, puntos de ruptura, depuradores o debuggers, etc...). Sin embargo en el caso concreto de los procesadores de lenguaje se pueden añadir a estas herramientas otras más especializadas, que se han denominado con distintos nombres: compilador de compiladores (compiler-compilers), generadores de compiladores (compilers-generators), o sistemas de escritura de traductores (translator-writing systems). A continuación se muestra una lista de herramientas de este último tipo: • Generadores de analizadores léxicos (scanner generators): Construyen automáticamente el código fuente para el análisis léxico a partir de una especificación de los tokens del lenguaje. Esta especificación está basada en el uso de expresiones regulares, mientras que la organización del operativos, así por ejemplo para el sistema operativo MS- ha desarrollado GALEX [MART93]. • Generadores de analizadores sintácticos (parser generators): Construyen el código fuente del analizador a partir de la especificación de la gramática del lenguaje fuente. Las gramáticas deben incorporada con el sistema operativo UNIX. Existen versiones comerciales para otros sistemas operativos, así por ejemplo para el sistema operativo MS-DOS, se puede encontrar PCYACC (Abraxas Software Inc.) o como software de dominio público BISON. En la Universidad de Oviedo se ha desarrollado YACCOV [CABA91]. También se están desarrollando nuevas herramientas: JACK [JACKi], ANTLR [ANTLi], JavaCC, VisualParse++, LL(1) Tools, Yacc++, JavaCUP, etc. • Analizadores de gramáticas: Dada una gramática especificada formalmente, verifican si es de un determinado tipo o no. Normalmente se utilizan para verificar las gramáticas LL(k) y LR(k). En la Universidad de Oviedo se ha desarrollado un analizador de gramáticas LL(1). • Máquinas de traducción dirigida por sintáxis (syntax-directed translation engines): Producen un conjunto de rutinas que recorren el árbol sintáctico y generan código intermedio. Se basan en asociar una o más traducciones a cada nodo del árbol sintáctico. • Generadores automáticos de código (automatic code generators): Estas herramientas trabajan con un conjunto de reglas que permiten la tradución del código en lenguaje intermedio al lenguaje
  • 2. objeto. Las reglas suelen ser reemplazar instrucciones de código intermedio por patrones que contienen las instrucciones equivalentes de la máquina objeto [MAUR90, LEWI90]. • Analizadores de flujo (data-flow engines): Estas herramientas suministran la información necesaria para realizar la optimización de código. La reunión de todas estas herramientas constituyen los denominados compilador de compiladores, que a partir de unas especificaciones del lenguaje fuente a compilar y del lenguaje objeto, se genera automáticamente el código fuente del traductor. APLICACIONES DE LOS PROCESADORES DE LENGUAJE Las técnicas empleadas en la construcción de traductores, compiladores e intérpretes pueden aplicarse en la construcción de otras herramientas algunas de las cuales se presentan a continuación: • Editoressensibles al contexto: Los editores permiten crear y modificar programas fuente, sin embargo los editores sensibles al contexto avisan al programador de posibles errores sintácticos cuando está escribiendo un programa fuente en un determinado lenguaje de programación. Actualmente la mayor parte de los compiladores incluyen un entorno de programación con un editor con sintaxis resaltada por colores. • Conversores de formatos: Utilizan la tecnología de los traductores para convertir una descripción de ficheros en otra. • Preprocesadores: Toman como entrada un conjunto de instrucciones y generan código en un lenguaje de alto o medio nivel. • Formateadores de código fuente: Tienen como entrada un código fuente, y obtienen como salida el mismo código fuente mostrado de forma que se puede seguir perfectamente la estructura del programa. • Generadores de código: Permiten desarrollar aplicaciones a partir de unas especificaciones muy compactas, que pueden ser tratadas como un lenguaje de aplicación [LEWI90]. • Generadores de pantallas: Son un caso particular de los generadores de código. • Verificación estática de programas: Leen el programa fuente y lo analizan para descubrir errores potenciales, sin ejecutar dicho programa. Ejemplo lint (incorporado de forma estándar por UNIX) y PC- • Formateadores de texto: Reciben como entrada un texto con indicaciones de como se desea la salida y generan dicho texto formateado en un fichero, o para una determinada impresora. Pueden estar especializados en fórmulas matemáticas, químicas, escritura de música, etc... Ejemplos TROFF, EQN, etc...
  • 3. • Intérpretes de comandos de un sistema operativo: Reciben las órdenes del sistema operativo, las analizan y las ejecutan. Ejemplo COMMAND.COM de MS-DOS. • Construcción de entornos operativos: Es un caso particular del anterior en el cual las órdenes suelen recibirse en forma gráfica. Ejemplos WINDOWS, GEM, Macintosh, etc... • Intérpretes para consultar bases de datos: Reciben las consultas de la base de datos, las analizan y las ejecutan. Ejemplos SQL, DBASE, etc... • Compiladores de silicio (silicon compilers): Utilizan las mismas técnicas de construcción de traductores, compiladores e intérpretes pero implementadas en hardware [BROD92]. • Procesamiento de lenguajes naturales: Aplican las técnicas de construcción de traductores a los lenguajes naturales (Inglés, Castellano, etc...) permitiendo el análisis, comprensión y traducción. • Reconocimiento del habla: Se realiza un análisis de los sonidos para construir las palabras. • Desarrollo de pequeños lenguajes: Suelen ser pequeños lenguajes específicos para el problema que resuelve la aplicación informática dentro de la cual se desarrollan [FRAN91] RESEÑA HISTORICA Los primeros algoritmos conocidos fueron desarrollados en Mesopotamia (región de Irak) entre los años 3000 y 1500 a.C., cerca de la ciudad de Babilonia. Estos algoritmos eran secuencias de instrucciones, no tenían estructuras de control alternativas (escribían el algoritmo de diversas formas) ni repetitivas (escribian las instrucciones tantas veces como fuera necesario). Un estudio sobre estos algoritmos puede consultarse en el artículo Ancient babylonian algorithms [KNUT72]. El matemático griego Euclides en el siglo IV a.C. construyó un algoritmo para el cálculo del máximo común divisor de dos números naturales. Este algoritmo ya incluía estructuras de control iterativas. Charles Babbage construyo entre los años 1820 y 1850 dos máquinas de computar, ninguna de las cuales fue terminada. De las dos, la máquina analítica fue la que más se parecía a los ordenadores digitales modernos. Los programas estaban escritos en lenguaje máquina y utilizaban ciertas tarjetas de operación y de variables (no había memoria). Junto a Babbage trabajó Ada Augusta, condesa de Lovelace, hija del poeta Lord Byron, que es reconocida por algunos como la primera programadora (en su honor se llamó Ada al lenguaje desarrollado bajo los auspicios del Ministerio de Defensa de los Estados Unidos). Las herramientas Flex y Bison. Son generadores de analizadores sintácticos
  • 4. Introducción a Flex Flex es un una herramienta que permite generar analizadores léxicos. A partir de un conjunto de expresiones regulares, Flex busca concordancias en un fichero de entrada y ejecuta acciones asociadas a estas expresiones. Es compatible casi al 100% con Lex, una herramienta clásica de Unix para la generación de analizadores léxicos, pero es un desarrollo diferente realizado por GNU bajo licencia GPL. Introducción a Bison Bison es un generador de analizadores sintácticos de propósito general que convierte una descripción para una gramática independiente del contexto (en realidad de una subclase de éstas, las LALR) en un programa en C que analiza esa gramática. Es compatible al 100% con Yacc, una herramienta clásica de Unix para la generación de analizadores léxicos, pero es un desarrollo diferente realizado por GNU bajo licencia GPL. Todas la gramáticas escritas apropiadamente para Yacc deberían funcionar con Bison sin ningún cambio. Diseño y construcción de un compilador
  • 6. 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. 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 ...
  • 7. Como se instala Flex y Bison