SlideShare una empresa de Scribd logo
PONTIFICIA UNIVERSIDAD CATOLICA DE L ECUADOR
SEDE IBARRA
NOMBRE: EDISON MALES
TEMA: COMPILADORES
Utilidades y Generadores de Procesadores de Lenguajes
A continuación se muestran algunas de las herramientas disponibles que pueden utilizarse
para la realización de la Práctica de Procesadores de Lenguajes. Todas estas herramientas
funcionan bajo Windows, aunque se puede utilizar, si se desea, cualquier otra herramienta.
Historia y aplicación de los lenguajes algorítmicos.
Al igual que los idiomas sirven de vehículo de comunicación entre los seres humanos,
existen lenguajes que realizan la comunicación entre los seres humanos y las
computadoras. Estos lenguajes permiten expresar los programas o el conjunto de
instrucciones que el operador humano desea que la computadora ejecute.
Los lenguajes de computadoras toman diferentes formas; los de las primeras computadoras,
como la ENIAC y la EDSAC, se componían en el lenguaje real de las máquinas mismas. La
dificultad de programar las máquinas de esta manera limitaba drásticamente su utilidad y
proporcionaba un fuerte incentivo para que se desarrollaran lenguajes de programación más
orientados hacia la expresión de soluciones con la notación de los problemas mismos.
Diseño y Construcción de un compilador.
Este apasionante libro combina un estudio detallado de las teorías modernas de diseño de
compiladores con una descripción completa (con código fuente) de un compilador
funcionando para un lenguaje pequeño. El libro refleja la convicción del autor de que los
aspectos prácticos del diseño de compiladores no pueden entenderse sin una comprensión
de la teoría, y que los estudiantes universitarios no pueden comprender verdaderamente la
teoría sin verla actuar en la práctica real. Para unificar la exposición de los conceptos del
texto se tiene un compilador completamente funcional escrito en C y desarrollado con las
técnicas comentadas en cada capítulo. Al final de cada capítulo se presentan abundantes
ejercicios que enfocan la atención del estudiante en problemas específicos de
programación. Características * Una detallada presentación (capítulos 4 y 5) de los
algoritmos de análisis sintáctico descendentes que cubren los métodos de análisis sintáctico
descendente recursivo y LL(1), análisis sintáctico ascendente, tablas de análisis sintáctico
LALR(1) y el uso de la herramienta generadora de analizador sintáctico Yacc. * Una
exposición completa (capítulo 7) de formas comunes de ambientes de ejecución que
abarcan desde el ambiente completamente estático de FORTRAN, pasando por las diversas
variedades de ambientes basados en pilas, hasta los ambientes completamente dinámicos
de los lenguajes tipo LISP. * Cobertura de la generación de código (capítulo 8) con un
generador de código completo para el lenguaje de muestra proporcionando junto con una
introducción para técnicas de optimización de código.
HERRAMIENTA FLEX Y BISON
INTRODUCCION:
Con esta práctica se pretende introducir el uso de la herramienta bison. Esta
herramienta se usa en consonancia con la herramienta flex y sirve para especificar
analizadores sintácticos. De la misma forma que flex tiene como base las expresiones
regulares, la herramienta bison también se basa en otro formalismo para describir lenguajes,
en este caso serán las gramáticas independientes del contexto las que constituirán el núcleo
de las especificaciones que procesará bison.
Herramienta Flex:
Que es y para qué sirve la herramienta 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.
Los ficheros de entrada de Flex (normalmente con la extensión .l) siguen el siguiente
esquema:
%%
patrón1 {acción1}
patrón2 {acción2}
...
donde:
patrón: expresión regular
acción: código C con las acciones a ejecutar cuando se encuentre concordancia del patrón
con el texto de entrada-
Ejemplo:
Flex recorre la entrada hasta que encuentra una concordancia y ejecuta el código asociado.
El texto que no concuerda con ningún patrón lo copia tal cual a la salida. Por ejemplo:
%%
a*b {printf(“X”);};
re ;
El ejecutable correspondiente transforma el texto:
abre la puertaab
en
X la puertX
pues ha escrito X cada vez que ha encontrado ab o aab y nada cuando ha encontrado re.
Flex lee los ficheros de entrada dados, o la entrada estándar si no se le ha indicado ningún
nombre de fichero, con la descripción de un escáner a generar. La descripción se encuentra
en forma de parejas de expresiones regulares y código C, denominadas reglas. Flex genera
como salida un fichero fuente en C, „lex.yy.c‟, que define una función „yylex()‟. Este fichero
se compila y se enlaza con la librería de Flex para producir un ejecutable.
La sección de definiciones contiene declaraciones de definiciones de nombres sencillas para
simplificar la especificación del escáner, y declaraciones de condiciones de arranque, que
se explicarán en una sección posterior. Las definiciones de nombre tienen la forma:
nombre definición
El "nombre" es una palabra que comienza con una letra o un subrayado („_‟) seguido por
cero o más letras, dígitos, „_‟, o „-‟ (guión). La definición se considera que comienza en el
primer carácter que no sea un espacio en
blanco siguiendo al nombre y continuando hasta el final de la línea. Posteriormente se
puede hacer referencia a la definición utilizando "{nombre}", que se expandirá a
"(definición)".
Por ejemplo,
DIGITO [0-9]
ID [a-z][a-z0-9]*
define "DIGITO" como una expresión regular que empareja un dígito sencillo, e "ID" como
una expresión regular que empareja una letra seguida por cero o más letras o dígitos. Una
referencia posterior a
{DIGITO}+"."{DIGITO}*
es idéntica a
([0-9])+"."([0-9])*
y empareja uno o más dígitos seguido por un „.‟ seguido por cero o más dígitos.
La sección de reglas en la entrada de Flex contiene una serie de reglas de la forma:
patrón acción
donde el patrón debe estar sin sangrar y la acción debe comenzar en la misma línea.
Finalmente, la sección de código de usuario simplemente se copia a „lex.yy.c‟ literalmente.
Esta sección se utiliza para rutinas de complemento que llaman al escáner o son llamadas
por este. La presencia de esta sección es opcional; Si se omite, el segundo „%%‟ en el
fichero de entrada se podría omitir también.
El fichero de entrada de Flex está compuesto de tres secciones, separadas por una línea
donde aparece únicamente un „%%‟ en esta:
definiciones
%%
reglas
%%
código de usuario
Herramienta 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.
Usándolo junto a Flex esta herramienta permite construir compiladores de lenguajes.
Un fuente de Bison (normalmente un fichero con extensión .y) describe una gramática. El
ejecutable que se genera indica si un fichero de entrada dado pertenece o no al lenguaje
generado por esa gramática. La forma general de una gramática de Bison es la siguiente:
%{
declaraciones en C
%}
Declaraciones de Bison
%%
Reglas gramaticales
%%
Código C adicional
Los „%%‟, „%{„ y „%}‟ son signos de puntuación que aparecen en todo archivo de gramática
de Bison para separar las secciones.
Las declaraciones de Bison declaran los nombres de los símbolos terminales y no
terminales, y también podrían describir la precedencia de operadores y los tipos de datos de
los valores semánticos de varios símbolos.
Las reglas gramaticales son las producciones de la gramática, que además pueden llevar
asociadas acciones, código en C, que se ejecutan cuando el analizador encuentra las reglas
correspondientes.
CREAR COMPILADORES EN FLEX Y BISON
COMO SE INSTALA FLEX Y BISON
1. Descarga el software disponible en el sitio de la cátedra.
2. Instalar el software en la unidad C: (para explicar a partir del punto 4 se tendrá como
hipótesis de que flex y bison han sido instalados en la ruta: C:GnuWin32 donde contiene
una subcarpeta
llamada bin donde se encuentran los programas respectivos)
3. Flex y bison son aplicaciones de consola, por lo que se deberá entrar al Símbolo del
sistema y tipear líneas de comando para ejecutar Flex. Una alternativa es crear un archivo
de proceso por lotes (*.bat) que contenga las líneas de comando para la ejecución de Flex y
Bison y/o la compilación del archivo generado.
4. Si deseas que flex y bison se integren al conjunto de variables del entorno (esto te va a
permitir llamar a flex/bison desde cualquier ubicación en la línea de comandos) debes hacer
lo siguiente:
• Clic derecho en “Mi PC”.
• Selecciona “Propiedades”
• Clic en la pestaña “Opciones Avanzadas”
• Presiona el botón “Variables de entorno”
• En la ventana de variables de entorno, ubicarse en la sección “Variables del sistema” luego
haz clic en PATH y luego en el botón “Modificar” (si no está hacer clic en “Nueva” y agregar
PATH)
COMO SE COMPILA CON FLEX Y BISON
2 EJEMPLOS DE LA CREACIÓN DE UN COMPILADOR UTILIZANDO FLEX Y BISON.
Codigo01.txt
? 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Definir Constante Entero numero
:= 145 ;
Definir Booleano nume := 1 ;
Funcion Entero ( Entero num;
Real fre; Booleano boll;)
Mientras ( )
Booleano ghjfg;
bocfgh:=1;
Mientras ( a>=4 )
Car:=Carro;
Entero bandera;
Booleano boole;
boole:=1;
Si ( a==4 )
Bool:=1;
Booleano boolean;
SinoSi (a==5) Entonces
Bool:=2;
Sino Entonces
Bool:=3;
16
17
18
19
20
21
22
23
FinSi
FinMientra
s
FinMientra
s
Retorna
Carro
FinFuncion
• En la nueva ventana, escribir la ruta completa al directorio “bin” de la aplicación
flex/bison. Si existe otro valor, separarlos con comas
• Aceptar los cambios y luego reiniciar el sistema operativo.
5. Si deseas instalar un compilador de C como MinGwin, deberás integrar la ruta de
acceso al compilador a las variables de entorno para facilitar la llamada al programa.
Por ejemplo si se instaló MingWin en “C:Mingw” y dentro de la carpeta “bin” se encuentra
“gcc.exe” que es el ejecutable, entonces de deberá agregar (análogo a los pasos
anteriores) lo siguiente:
6. Cuando tengas listo podrás llamar a flex/bison desde el símbolo del sistema sin
necesidad de ubicarte en la carpeta donde ha sido instalado flex/bison.
COMO SE COMPILA CON FLEX Y BISON
2 EJEMPLOS DE LA CREACIÓN DE UN COMPILADOR UTILIZANDO FLEX Y BISON.
Codigo01.txt
? 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Definir Constante Entero
numero := 145 ;
Definir Booleano nume := 1
;
Funcion Entero ( Entero
num; Real fre; Booleano
boll;)
Mientras ( )
Booleano ghjfg;
bocfgh:=1;
Mientras ( a>=4 )
Car:=Carro;
Entero bandera;
Booleano boole;
boole:=1;
Si ( a==4 )
Bool:=1;
Booleano boolean;
SinoSi (a==5) Entonces
Bool:=2;
Sino Entonces
Bool:=3;

Más contenido relacionado

La actualidad más candente

Clase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosClase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptos
Infomania pro
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2perlallamas
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivasstarduslex
 
DiseñO De Compilador
DiseñO De CompiladorDiseñO De Compilador
DiseñO De CompiladorBigbossH
 
Lenguaje c 1
Lenguaje c   1Lenguaje c   1
Lenguaje c 1
Denisse C
 
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONLENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
Sol López
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
Sheyli Patiño
 
Tutorial C
Tutorial CTutorial C
Tutorial C
Idalia Tristan
 
Clase6 ejemplo analisis lexico dev cpp
Clase6 ejemplo analisis lexico dev cppClase6 ejemplo analisis lexico dev cpp
Clase6 ejemplo analisis lexico dev cpp
Infomania pro
 
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguajeLenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguajeDunkherz
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico maryr_
 
Introducción a Compiladores
Introducción a  CompiladoresIntroducción a  Compiladores
Introducción a CompiladoresLeopoldo Capa
 
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo MinilenguajeCompiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
Pedro Antonio Villalta (Pavillalta)
 
Taller de Compiladores flx y bsn
Taller de Compiladores flx y bsnTaller de Compiladores flx y bsn
Taller de Compiladores flx y bsn
DanielRosero23
 
Arreglos Turbo C
Arreglos Turbo CArreglos Turbo C
Arreglos Turbo Ctacubomx
 
Introduccion al lenguaje c
Introduccion al lenguaje cIntroduccion al lenguaje c
Introduccion al lenguaje cvictdiazm
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladores
CJAO
 

La actualidad más candente (20)

Clase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptosClase3 guia1-introduccion-compiladores-conceptos
Clase3 guia1-introduccion-compiladores-conceptos
 
Estructura de un compilador 2
Estructura de un compilador 2Estructura de un compilador 2
Estructura de un compilador 2
 
Lenguajes diapositivas
Lenguajes diapositivasLenguajes diapositivas
Lenguajes diapositivas
 
Compilador
CompiladorCompilador
Compilador
 
DiseñO De Compilador
DiseñO De CompiladorDiseñO De Compilador
DiseñO De Compilador
 
Lenguaje c 1
Lenguaje c   1Lenguaje c   1
Lenguaje c 1
 
Turbo c
Turbo cTurbo c
Turbo c
 
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCIONLENGUAJE DE PROGRAMACION C++ INTRODUCCION
LENGUAJE DE PROGRAMACION C++ INTRODUCCION
 
Ejercicio compiladores
Ejercicio compiladoresEjercicio compiladores
Ejercicio compiladores
 
Tutorial C
Tutorial CTutorial C
Tutorial C
 
Clase6 ejemplo analisis lexico dev cpp
Clase6 ejemplo analisis lexico dev cppClase6 ejemplo analisis lexico dev cpp
Clase6 ejemplo analisis lexico dev cpp
 
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguajeLenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
Lenguaje de programacion c++ basico 1ra parte elementos basicos del lenguaje
 
Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico Actividad 2 Analizador léxico, sintáctico y semántico
Actividad 2 Analizador léxico, sintáctico y semántico
 
Introducción a Compiladores
Introducción a  CompiladoresIntroducción a  Compiladores
Introducción a Compiladores
 
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo MinilenguajeCompiladores, Analisis Lexico, Ejemplo Minilenguaje
Compiladores, Analisis Lexico, Ejemplo Minilenguaje
 
Taller de Compiladores flx y bsn
Taller de Compiladores flx y bsnTaller de Compiladores flx y bsn
Taller de Compiladores flx y bsn
 
Arreglos Turbo C
Arreglos Turbo CArreglos Turbo C
Arreglos Turbo C
 
Introduccion al lenguaje c
Introduccion al lenguaje cIntroduccion al lenguaje c
Introduccion al lenguaje c
 
Cap4 compiladores
Cap4 compiladoresCap4 compiladores
Cap4 compiladores
 
Examen de compiladores i parcial
Examen de compiladores i parcialExamen de compiladores i parcial
Examen de compiladores i parcial
 

Destacado

19 10 2016
19 10 201619 10 2016
19 10 2016
Javier Rojas
 
Expresiones Regulares
Expresiones RegularesExpresiones Regulares
Expresiones Regulares
Kar Juan
 
Automatas y compiladores clase2
Automatas y compiladores clase2Automatas y compiladores clase2
Automatas y compiladores clase2Germania Rodriguez
 
Comando grep y expresiones regulares
Comando grep y expresiones regularesComando grep y expresiones regulares
Comando grep y expresiones regulares
Madelón García
 
Expresiones regulares y gramáticas
Expresiones regulares y gramáticasExpresiones regulares y gramáticas
Expresiones regulares y gramáticasSantiago Ramirez
 
Evaluación de expresiones - Método divide y vencerás
Evaluación de expresiones - Método divide y vencerás Evaluación de expresiones - Método divide y vencerás
Evaluación de expresiones - Método divide y vencerás
lensen
 
Maria reyes
Maria reyesMaria reyes
Maria reyes
Maria Reyes
 
Autómatas finitos no deterministas
Autómatas finitos no deterministasAutómatas finitos no deterministas
Autómatas finitos no deterministas
Omega Tech
 
Expresiones regulares y gramáticas
Expresiones regulares y gramáticasExpresiones regulares y gramáticas
Expresiones regulares y gramáticasJuanchi Novas
 
Introducción a las Expresiones Regulares
Introducción a las Expresiones RegularesIntroducción a las Expresiones Regulares
Introducción a las Expresiones Regulares
Jose Luis Martínez
 
Expresiones regulares
Expresiones regularesExpresiones regulares
Expresiones regulares
Jordan-P
 

Destacado (11)

19 10 2016
19 10 201619 10 2016
19 10 2016
 
Expresiones Regulares
Expresiones RegularesExpresiones Regulares
Expresiones Regulares
 
Automatas y compiladores clase2
Automatas y compiladores clase2Automatas y compiladores clase2
Automatas y compiladores clase2
 
Comando grep y expresiones regulares
Comando grep y expresiones regularesComando grep y expresiones regulares
Comando grep y expresiones regulares
 
Expresiones regulares y gramáticas
Expresiones regulares y gramáticasExpresiones regulares y gramáticas
Expresiones regulares y gramáticas
 
Evaluación de expresiones - Método divide y vencerás
Evaluación de expresiones - Método divide y vencerás Evaluación de expresiones - Método divide y vencerás
Evaluación de expresiones - Método divide y vencerás
 
Maria reyes
Maria reyesMaria reyes
Maria reyes
 
Autómatas finitos no deterministas
Autómatas finitos no deterministasAutómatas finitos no deterministas
Autómatas finitos no deterministas
 
Expresiones regulares y gramáticas
Expresiones regulares y gramáticasExpresiones regulares y gramáticas
Expresiones regulares y gramáticas
 
Introducción a las Expresiones Regulares
Introducción a las Expresiones RegularesIntroducción a las Expresiones Regulares
Introducción a las Expresiones Regulares
 
Expresiones regulares
Expresiones regularesExpresiones regulares
Expresiones regulares
 

Similar a Compiladores

FLEX Y BISON
FLEX Y BISONFLEX Y BISON
FLEX Y BISON
Anthony Benalcazar
 
Taller de flex y bison
Taller de flex y bisonTaller de flex y bison
Taller de flex y bison
Fabricio Galárraga
 
Compiladores - Flex y Bison
Compiladores - Flex y BisonCompiladores - Flex y Bison
Compiladores - Flex y Bison
Steven Tabango
 
Trabajo compiladores ivan bolaños
Trabajo compiladores ivan bolañosTrabajo compiladores ivan bolaños
Trabajo compiladores ivan bolañosIván Bolaños
 
Taller 21 de junio
Taller 21 de junioTaller 21 de junio
Taller 21 de junio
Alex Ortiz
 
Flex y bison
Flex y  bisonFlex y  bison
Flex y bison
Lenin Andrango
 
Taller flex y bison
Taller flex y bisonTaller flex y bison
Taller flex y bison
danilopuente
 
Flex ybison
Flex ybisonFlex ybison
Flex ybison
Carlos Brusil
 
Flex bison
Flex bisonFlex bison
Flex bison
Carlos Brusil
 
Herramientas flex y bison
Herramientas flex y bisonHerramientas flex y bison
Herramientas flex y bisonalexisdario
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
Alvaro Cedeño
 
Investigacion Flex Y Bison
Investigacion Flex Y BisonInvestigacion Flex Y Bison
Investigacion Flex Y Bison
Alexander Campues
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
Zulay Limaico
 
COMPILADORES
COMPILADORESCOMPILADORES
COMPILADORES
marcos ruales
 
Lenguaje de programación
Lenguaje de programaciónLenguaje de programación
Lenguaje de programación
David Chambi Carrillo
 

Similar a Compiladores (20)

FLEX Y BISON
FLEX Y BISONFLEX Y BISON
FLEX Y BISON
 
Taller de flex y bison
Taller de flex y bisonTaller de flex y bison
Taller de flex y bison
 
Compiladores - Flex y Bison
Compiladores - Flex y BisonCompiladores - Flex y Bison
Compiladores - Flex y Bison
 
Taller
TallerTaller
Taller
 
Trabajo compiladores ivan bolaños
Trabajo compiladores ivan bolañosTrabajo compiladores ivan bolaños
Trabajo compiladores ivan bolaños
 
Taller 21 de junio
Taller 21 de junioTaller 21 de junio
Taller 21 de junio
 
Flex y bison
Flex y  bisonFlex y  bison
Flex y bison
 
Taller flex y bison
Taller flex y bisonTaller flex y bison
Taller flex y bison
 
Flex ybison
Flex ybisonFlex ybison
Flex ybison
 
Flex bison
Flex bisonFlex bison
Flex bison
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Herramientas flex y bison
Herramientas flex y bisonHerramientas flex y bison
Herramientas flex y bison
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Investigacion Flex Y Bison
Investigacion Flex Y BisonInvestigacion Flex Y Bison
Investigacion Flex Y Bison
 
Lex
LexLex
Lex
 
Lex
LexLex
Lex
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
COMPILADORES
COMPILADORESCOMPILADORES
COMPILADORES
 
Flex y Byson
Flex y BysonFlex y Byson
Flex y Byson
 
Lenguaje de programación
Lenguaje de programaciónLenguaje de programación
Lenguaje de programación
 

Compiladores

  • 1. PONTIFICIA UNIVERSIDAD CATOLICA DE L ECUADOR SEDE IBARRA NOMBRE: EDISON MALES TEMA: COMPILADORES Utilidades y Generadores de Procesadores de Lenguajes A continuación se muestran algunas de las herramientas disponibles que pueden utilizarse para la realización de la Práctica de Procesadores de Lenguajes. Todas estas herramientas funcionan bajo Windows, aunque se puede utilizar, si se desea, cualquier otra herramienta. Historia y aplicación de los lenguajes algorítmicos. Al igual que los idiomas sirven de vehículo de comunicación entre los seres humanos, existen lenguajes que realizan la comunicación entre los seres humanos y las
  • 2. computadoras. Estos lenguajes permiten expresar los programas o el conjunto de instrucciones que el operador humano desea que la computadora ejecute. Los lenguajes de computadoras toman diferentes formas; los de las primeras computadoras, como la ENIAC y la EDSAC, se componían en el lenguaje real de las máquinas mismas. La dificultad de programar las máquinas de esta manera limitaba drásticamente su utilidad y proporcionaba un fuerte incentivo para que se desarrollaran lenguajes de programación más orientados hacia la expresión de soluciones con la notación de los problemas mismos. Diseño y Construcción de un compilador. Este apasionante libro combina un estudio detallado de las teorías modernas de diseño de compiladores con una descripción completa (con código fuente) de un compilador funcionando para un lenguaje pequeño. El libro refleja la convicción del autor de que los aspectos prácticos del diseño de compiladores no pueden entenderse sin una comprensión de la teoría, y que los estudiantes universitarios no pueden comprender verdaderamente la teoría sin verla actuar en la práctica real. Para unificar la exposición de los conceptos del texto se tiene un compilador completamente funcional escrito en C y desarrollado con las técnicas comentadas en cada capítulo. Al final de cada capítulo se presentan abundantes ejercicios que enfocan la atención del estudiante en problemas específicos de programación. Características * Una detallada presentación (capítulos 4 y 5) de los algoritmos de análisis sintáctico descendentes que cubren los métodos de análisis sintáctico descendente recursivo y LL(1), análisis sintáctico ascendente, tablas de análisis sintáctico LALR(1) y el uso de la herramienta generadora de analizador sintáctico Yacc. * Una exposición completa (capítulo 7) de formas comunes de ambientes de ejecución que abarcan desde el ambiente completamente estático de FORTRAN, pasando por las diversas variedades de ambientes basados en pilas, hasta los ambientes completamente dinámicos de los lenguajes tipo LISP. * Cobertura de la generación de código (capítulo 8) con un generador de código completo para el lenguaje de muestra proporcionando junto con una introducción para técnicas de optimización de código.
  • 3. HERRAMIENTA FLEX Y BISON INTRODUCCION: Con esta práctica se pretende introducir el uso de la herramienta bison. Esta herramienta se usa en consonancia con la herramienta flex y sirve para especificar analizadores sintácticos. De la misma forma que flex tiene como base las expresiones regulares, la herramienta bison también se basa en otro formalismo para describir lenguajes, en este caso serán las gramáticas independientes del contexto las que constituirán el núcleo de las especificaciones que procesará bison. Herramienta Flex: Que es y para qué sirve la herramienta 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. Los ficheros de entrada de Flex (normalmente con la extensión .l) siguen el siguiente esquema: %% patrón1 {acción1} patrón2 {acción2} ... donde: patrón: expresión regular acción: código C con las acciones a ejecutar cuando se encuentre concordancia del patrón con el texto de entrada- Ejemplo:
  • 4. Flex recorre la entrada hasta que encuentra una concordancia y ejecuta el código asociado. El texto que no concuerda con ningún patrón lo copia tal cual a la salida. Por ejemplo: %% a*b {printf(“X”);}; re ; El ejecutable correspondiente transforma el texto: abre la puertaab en X la puertX pues ha escrito X cada vez que ha encontrado ab o aab y nada cuando ha encontrado re. Flex lee los ficheros de entrada dados, o la entrada estándar si no se le ha indicado ningún nombre de fichero, con la descripción de un escáner a generar. La descripción se encuentra en forma de parejas de expresiones regulares y código C, denominadas reglas. Flex genera como salida un fichero fuente en C, „lex.yy.c‟, que define una función „yylex()‟. Este fichero se compila y se enlaza con la librería de Flex para producir un ejecutable. La sección de definiciones contiene declaraciones de definiciones de nombres sencillas para simplificar la especificación del escáner, y declaraciones de condiciones de arranque, que se explicarán en una sección posterior. Las definiciones de nombre tienen la forma: nombre definición El "nombre" es una palabra que comienza con una letra o un subrayado („_‟) seguido por cero o más letras, dígitos, „_‟, o „-‟ (guión). La definición se considera que comienza en el primer carácter que no sea un espacio en blanco siguiendo al nombre y continuando hasta el final de la línea. Posteriormente se puede hacer referencia a la definición utilizando "{nombre}", que se expandirá a "(definición)". Por ejemplo, DIGITO [0-9] ID [a-z][a-z0-9]* define "DIGITO" como una expresión regular que empareja un dígito sencillo, e "ID" como una expresión regular que empareja una letra seguida por cero o más letras o dígitos. Una
  • 5. referencia posterior a {DIGITO}+"."{DIGITO}* es idéntica a ([0-9])+"."([0-9])* y empareja uno o más dígitos seguido por un „.‟ seguido por cero o más dígitos. La sección de reglas en la entrada de Flex contiene una serie de reglas de la forma: patrón acción donde el patrón debe estar sin sangrar y la acción debe comenzar en la misma línea. Finalmente, la sección de código de usuario simplemente se copia a „lex.yy.c‟ literalmente. Esta sección se utiliza para rutinas de complemento que llaman al escáner o son llamadas por este. La presencia de esta sección es opcional; Si se omite, el segundo „%%‟ en el fichero de entrada se podría omitir también. El fichero de entrada de Flex está compuesto de tres secciones, separadas por una línea donde aparece únicamente un „%%‟ en esta: definiciones %% reglas %% código de usuario Herramienta 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. Usándolo junto a Flex esta herramienta permite construir compiladores de lenguajes. Un fuente de Bison (normalmente un fichero con extensión .y) describe una gramática. El ejecutable que se genera indica si un fichero de entrada dado pertenece o no al lenguaje generado por esa gramática. La forma general de una gramática de Bison es la siguiente: %{ declaraciones en C %} Declaraciones de Bison
  • 6. %% Reglas gramaticales %% Código C adicional Los „%%‟, „%{„ y „%}‟ son signos de puntuación que aparecen en todo archivo de gramática de Bison para separar las secciones. Las declaraciones de Bison declaran los nombres de los símbolos terminales y no terminales, y también podrían describir la precedencia de operadores y los tipos de datos de los valores semánticos de varios símbolos. Las reglas gramaticales son las producciones de la gramática, que además pueden llevar asociadas acciones, código en C, que se ejecutan cuando el analizador encuentra las reglas correspondientes. CREAR COMPILADORES EN FLEX Y BISON COMO SE INSTALA FLEX Y BISON 1. Descarga el software disponible en el sitio de la cátedra. 2. Instalar el software en la unidad C: (para explicar a partir del punto 4 se tendrá como hipótesis de que flex y bison han sido instalados en la ruta: C:GnuWin32 donde contiene una subcarpeta llamada bin donde se encuentran los programas respectivos)
  • 7. 3. Flex y bison son aplicaciones de consola, por lo que se deberá entrar al Símbolo del sistema y tipear líneas de comando para ejecutar Flex. Una alternativa es crear un archivo de proceso por lotes (*.bat) que contenga las líneas de comando para la ejecución de Flex y Bison y/o la compilación del archivo generado.
  • 8. 4. Si deseas que flex y bison se integren al conjunto de variables del entorno (esto te va a permitir llamar a flex/bison desde cualquier ubicación en la línea de comandos) debes hacer lo siguiente:
  • 9.
  • 10. • Clic derecho en “Mi PC”. • Selecciona “Propiedades” • Clic en la pestaña “Opciones Avanzadas” • Presiona el botón “Variables de entorno” • En la ventana de variables de entorno, ubicarse en la sección “Variables del sistema” luego haz clic en PATH y luego en el botón “Modificar” (si no está hacer clic en “Nueva” y agregar PATH) COMO SE COMPILA CON FLEX Y BISON 2 EJEMPLOS DE LA CREACIÓN DE UN COMPILADOR UTILIZANDO FLEX Y BISON. Codigo01.txt
  • 11. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Definir Constante Entero numero := 145 ; Definir Booleano nume := 1 ; Funcion Entero ( Entero num; Real fre; Booleano boll;) Mientras ( ) Booleano ghjfg; bocfgh:=1; Mientras ( a>=4 ) Car:=Carro; Entero bandera; Booleano boole; boole:=1; Si ( a==4 ) Bool:=1; Booleano boolean; SinoSi (a==5) Entonces Bool:=2; Sino Entonces Bool:=3; 16 17 18 19 20 21 22 23 FinSi FinMientra s FinMientra s Retorna Carro FinFuncion
  • 12. • En la nueva ventana, escribir la ruta completa al directorio “bin” de la aplicación flex/bison. Si existe otro valor, separarlos con comas • Aceptar los cambios y luego reiniciar el sistema operativo. 5. Si deseas instalar un compilador de C como MinGwin, deberás integrar la ruta de acceso al compilador a las variables de entorno para facilitar la llamada al programa. Por ejemplo si se instaló MingWin en “C:Mingw” y dentro de la carpeta “bin” se encuentra “gcc.exe” que es el ejecutable, entonces de deberá agregar (análogo a los pasos anteriores) lo siguiente: 6. Cuando tengas listo podrás llamar a flex/bison desde el símbolo del sistema sin necesidad de ubicarte en la carpeta donde ha sido instalado flex/bison.
  • 13. COMO SE COMPILA CON FLEX Y BISON 2 EJEMPLOS DE LA CREACIÓN DE UN COMPILADOR UTILIZANDO FLEX Y BISON. Codigo01.txt ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 Definir Constante Entero numero := 145 ; Definir Booleano nume := 1 ; Funcion Entero ( Entero num; Real fre; Booleano boll;) Mientras ( ) Booleano ghjfg; bocfgh:=1; Mientras ( a>=4 ) Car:=Carro; Entero bandera; Booleano boole; boole:=1; Si ( a==4 ) Bool:=1; Booleano boolean; SinoSi (a==5) Entonces Bool:=2; Sino Entonces Bool:=3;