SlideShare a Scribd company logo
1 of 13
Download to read offline
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
Compiladores
Nombre: Guido Espinosa de los Monteros
 Herramientas para la construcción de procesadores de lenguaje.
Herramienta Lenguaje Descripción
Bison C Generador de Analizadores Sintácticos Ascendentes tipo YACC
COCO/R C/C++ Generador de Analizadores Léxicos y Sintácticos
Descendentes Recursivos
Flex C Generador de Analizadores Léxicos tipo Lex
Lex C Generador de Analizadores Léxicos
SDGLL1 exe Sistema Detector de Gramáticas LL(1) y generador de la
tabla
TS 2006 C/C++ Tipo abstracto de datos Tabla de Símbolos de uso sencillo
TS C Tipo abstracto de datos Tabla de Símbolos
TS-OO C++ Tipo abstracto de datos orientado a objetos Tabla de
Símbolos
VASt exe Visualizador de árboles sintácticos partiendo de los ficheros
con la gramática y el parse pedidos en la Práctica [versión
2.0, Windows]
VASt C++ Visualizador de árboles sintácticos partiendo de los ficheros
con la gramática y el parse pedidos en la Práctica [versión
1.0, Linux]
YACC C Generador de Analizadores Sintácticos Ascendentes LR(1)
 Reseña Histórica Diseño y construcción de un compilador.
El software para los primeros computadores estaba primariamente escrito en lenguaje
ensamblador. Normalmente para un programador es más productivo usar un lenguaje
de alto nivel, y los programas escritos en lenguajes de alto nivel pueden ser reutilizados
en distintos tipos de computadores. Aún teniendo en cuenta esto, pasó un tiempo hasta
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
que los compiladores se establecieran, porque generaban código que no tenía tan buen
rendimiento como los ensambladores escritos a mano, eran enormes proyectos de
desarrollo por sí mismos, y la limitadísima capacidad de memoria de los primeros
computadores creó muchos problemas técnicos para las implementaciones prácticas de
los compiladores.
El primer compilador fue escrito por Grace Hopper, en 1952, para el lenguaje Sistema
A-0. El término compilador fue acuñado por Hopper.1 El equipo FORTRAN dirigido por
John W. Backus de IBM está generalmente acreditado por haber presentado el primer
compilador completo, en 1957. El primer compilador FORTRAN necesitó de 18 años-
persona para su creación.2
En 1960, un compilador FORTRAN extendido, ALTAC, estaba también disponible en el
Philco 2000, por lo que es probable que un programa FORTRAN fuera compilado para
ambas arquitecturas de computadores a mediados de los años 60.3 El primer lenguaje
de alto nivel multiplataforma demostrado fue COBOL. En una demostración en
diciembre de 1960, un programa COBOL fue compilado y ejecutado en el UNIVAC II y el
RCA 501.1
El compilador COBOL para el UNIVAC II fue probablemente el primero en ser escrito en
un lenguaje de alto nivel, llamado FLOW-MATIC, por un equipo dirigido por Grace
Hopper.
Las herramientas Flex y Bison.
 Que es Flex y Bison
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.
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.
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
 Como se instala Flex y Bison
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
 Como se compila con Flex y Bison
 2 Ejemplos de la creación de un compilador utilizando Flex y Bison.
realizar un ejemplo de una calculadora sencilla que reconocerá las principales operaciones
aritmética (+,-,* y /).
Abrimos un editor de texto y pegamos el siguiente código que será nuestro scanner
/*****************
Definiciones
Se colocan las cabeceras, variables y expresiones regulares
********************/
%{
#include <stdio.h>
#include <stdlib.h>
#include "sintactico.tab.h"
int linea=0;
%}
/*
Creamos todas las expresiones regulares
Creamos la definición llamada DIGITO, podemos acceder esta definición
usando {DIGITO}*/
DIGITO [0-9]
NUMERO {DIGITO}+("."{DIGITO}+)?
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
%%
/***************
Reglas
*****************/
/* Creamos las reglas que reconocerán las cadenas que acepte
Nuestro scanner y retornaremos el token a bison con la
funcion return. */
{NUMERO} {yylval.real=atof(yytext); return(NUMERO);}
"=" {return(IGUAL);}
"+" {return(MAS);}
"-" {return(MENOS);}
";" {return(PTOCOMA);}
"*" {return(POR);}
"/" {return(DIV);}
"(" {return(PAA);}
")" {return(PAC);}
"n" {linea++;}
[trf] {}
" " {}
/* Si en nuestra entrada tiene algún caracter que no pertenece a
las reglas anteriores, se genera un error léxico */
. {printf("Error lexico en linea %d",linea);}
%%
/*
Código de Usuario
Aquí podemos realizar otras funciones, como por ejemplo ingresar
símbolos a nuestra tabal de símbolos o cualquier otra accione
del usuario.
Todo lo que el usuario coloque en esta sección se copiara al
archvi lex.yy.c tal y como esta.
*/
Guardamos el archivo como lexico.l. Luego creamos un nuevo archivo y colocamos el
siguiente código.
%{
/********************
Declaraciones en C
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
**********************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
extern int yylex(void);
extern char *yytext;
extern int linea;
extern FILE *yyin;
void yyerror(char *s);
%}
/************************
Declaraciones de Bison
*************************/
/* Especifica la coleccion completa de tipos de datos para poder usar
varios tipos de datos en los terminales y no terminales*/
%union
{
float real;
}
/* Indica la produccion con la que inicia nuestra gramatica*/
%start Exp_l
/* Especificacion de termines, podemos especificar tambien su tipo */
%token <real> NUMERO
%token MAS
%token MENOS
%token IGUAL
%token PTOCOMA
%token POR
%token DIV
%token PAA
%token PAC
/* No Terminales, que tambien podemos especificar su tipo */
%type <real> Exp
%type <real> Calc
%type <real> Exp_l
/* Definimos las precedencias de menor a mayor */
%left MAS MENOS
%left POR DIV
%%
/**********************
Reglas Gramaticales
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
***********************/
Exp_l: Exp_l Calc
|Calc
;
Calc : Exp PTOCOMA {printf ("%4.1fn",$1)}
;
/* con el símbolo de $$ asignamos el valor semántico de toda
la acción de la derecha y se la asignamos al no terminal de
la izquierda, en la siguiente regla, se la asigna a Exp.
Para poder acceder al valor de los terminales y no terminales del lado
derecho usamos el símbolo $ y le concatenamos un numero que representa
la posición en la que se encuentra es decir si tenemos
A --> B NUMERO C
Si queremos usar le valor que tiene el no terminal B usamos $1, si queremos
usar el valor que tiene NUMERO usamos $2 y así sucesivamente.
*/
Exp : NUMERO {$$=$1;}
|Exp MAS Exp {$$=$1+$3;}
|Exp MENOS Exp {$$=$1-$3;}
|Exp POR Exp {$$=$1*$3;}
|Exp DIV Exp {$$=$1/$3;}
|PAA Exp PAC {$$=$2;}
;
%%
/********************
Codigo C Adicional
**********************/
void yyerror(char *s)
{
printf("Error sintactico %s",s);
}
int main(int argc,char **argv)
{
if (argc>1)
yyin=fopen(argv[1],"rt");
else
yyin=stdin;
yyparse();
return 0;
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
}
Guardamos este archivo con el nombre sintáctico.y y con eso ya tenemos nuestro scanner y
nuestro parser terminado. Para compilar estos archivos usamos los comandos
Compilando sintactico.y
~> bison -d sintactico.y
El parámetro –d, crea el fichero t.tab.h, que contiene los identificadores de los tokens de bison
usados por flex
Compilando lexico.l
~> flex lexico.l
Compilando arhivos generados y crear ejecutable
~> cc lex.yy.c sintactico.tab.c -o analizador -lfl -lm
Esto nos genera un ejecutable llamado analizador.
Muchas veces necesitamos modificar nuestro archivo sintáctico.y o lexico.l y tenemos que
compilar todo cada vez que hacemos un cambio, para no estar escribiendo los comandos cada
vez que realizamos un cambio, crearemos un script, que al ejecutarlo realizara todos los
comandos de compilación. Para eso creamos un nuevo archivo en blanco y escribimos
#!/bin/bash
bison -d sintactico.y
flex lexico.l
cc lex.yy.c sintactico.tab.c -o analizador -lfl –lm
Guardamos este archivo con cualquier nombre, por ejemplo compilar.sh. Ahora cambiaremos
las propiedades de este archivo para poder ejecutar. Le damos clic derecho sobre este archivo
y en la pestaña permisos elegimos la opción de “Permitir ejecutar el archivo como un
programa”, cerramos esa ventana.
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
Para poder compilar, desde consola nos ubicamos donde se encuentra este archivo .sh y
escribimos
./compilar.sh
Esto nos genera nuestro ejecutable que podemos correr para poder probar nuestra
calculadora. Para ejecutar este ejemplo usamos el comando
./analizador
Ingresamos algunas expresiones y el resultado que obtenemos es:
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
%option c++
%option noyywrap
%{
#include <sstream>
#include <cstdlib>
#include "parser.h"
using namespace std;
%}
DIGIT [0-9]
DIGIT1 [1-9]
%%
{DIGIT1}{DIGIT}* {
cout << "Lexer: " << yytext << endl;
return Parser::NUMBER;
}
. {
return Parser::UNKNOWN;
}
<<EOF>> {
yyterminate();
}
%%
%name Parser
%define LSP_NEEDED
%define MEMBERS 
virtual ~Parser() {} 
private: 
yyFlexLexer lexer;
%define LEX_BODY {return lexer.yylex();}
%define ERROR_BODY {cerr << "error encountered at line:
"<<lexer.lineno()<<" last word parsed:"<<lexer.YYText()<<"n";}
%header{
#include < ostream >
#include < fstream >
#include < FlexLexer.h >
using namespace std;
%}
Pontificia Universidad Católica del Ecuador
Sede Ibarra
Escuela de Ingeniería
%union {
int i_type;
}
%token UNKNOWN
%token < i_type > NUMBER
%type < i_type > number
%start number
%%
number
: NUMBER { $$ = atoi(lexer.YYText()); cout << "Parser value " << $$ <<
endl;}
;
%%
#include "parser.h"
#include < iostream >
using namespace std;
int main(int argc, char ** argv)
{
Parser parser;
parser.yyparse();
return 0;
}
all: test
parser.cc: parser.y
bison++ -d -hparser.h -o $@ $<
scanner.cc: scanner.l
flex++ -d -o$@ $<
test: parser.o scanner.o test.o
g++ -o $@ test.o parser.o scanner.o
clean:
$(RM) *~ *# test *.o *.h
$(RM) parser.cc scanner.cc

More Related Content

What's hot

Programacion iv sesion11 php
Programacion iv sesion11 phpProgramacion iv sesion11 php
Programacion iv sesion11 phpRoberto Garcia
 
Librerias Básicas y sus Funciones Lenguaje de Programación C
Librerias Básicas y sus Funciones Lenguaje de Programación CLibrerias Básicas y sus Funciones Lenguaje de Programación C
Librerias Básicas y sus Funciones Lenguaje de Programación CCristian Maza
 
Mis preguntas del blog y las ultimas .l.
Mis preguntas del blog y las ultimas .l.Mis preguntas del blog y las ultimas .l.
Mis preguntas del blog y las ultimas .l.Mauricio Velasquez
 
Bibliotecas en c
Bibliotecas en cBibliotecas en c
Bibliotecas en cdemata
 
Conceptos Básicos acerca de Procesadores de Lenguajes
Conceptos Básicos acerca de Procesadores de LenguajesConceptos Básicos acerca de Procesadores de Lenguajes
Conceptos Básicos acerca de Procesadores de LenguajesGrace Laguna
 
Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Oziel Solis Juarez
 
Programación C++
Programación C++Programación C++
Programación C++Juan Islas
 
Librerias en-lenguaje-c
Librerias en-lenguaje-cLibrerias en-lenguaje-c
Librerias en-lenguaje-cKevin2811
 
Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostreamTensor
 
Corrección del examen de primer quimestre de computació1
Corrección del examen de primer quimestre de computació1Corrección del examen de primer quimestre de computació1
Corrección del examen de primer quimestre de computació1morapaul
 

What's hot (20)

Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Flex bison
Flex bisonFlex bison
Flex bison
 
Programacion iv sesion11 php
Programacion iv sesion11 phpProgramacion iv sesion11 php
Programacion iv sesion11 php
 
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
 
Libreria c++
Libreria c++Libreria c++
Libreria c++
 
Programazion
ProgramazionProgramazion
Programazion
 
Librerias Básicas y sus Funciones Lenguaje de Programación C
Librerias Básicas y sus Funciones Lenguaje de Programación CLibrerias Básicas y sus Funciones Lenguaje de Programación C
Librerias Básicas y sus Funciones Lenguaje de Programación C
 
Fyb
FybFyb
Fyb
 
Mis preguntas del blog y las ultimas .l.
Mis preguntas del blog y las ultimas .l.Mis preguntas del blog y las ultimas .l.
Mis preguntas del blog y las ultimas .l.
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
 
Librerias ansi c
Librerias ansi cLibrerias ansi c
Librerias ansi c
 
Bibliotecas en c
Bibliotecas en cBibliotecas en c
Bibliotecas en c
 
Conceptos Básicos acerca de Procesadores de Lenguajes
Conceptos Básicos acerca de Procesadores de LenguajesConceptos Básicos acerca de Procesadores de Lenguajes
Conceptos Básicos acerca de Procesadores de Lenguajes
 
Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_Bibliotecas o librerias_para_c_
Bibliotecas o librerias_para_c_
 
Programación C++
Programación C++Programación C++
Programación C++
 
Librerias en-lenguaje-c
Librerias en-lenguaje-cLibrerias en-lenguaje-c
Librerias en-lenguaje-c
 
Bibliotecas de c_
Bibliotecas de c_Bibliotecas de c_
Bibliotecas de c_
 
Uso de las clases iostream
Uso de las clases iostreamUso de las clases iostream
Uso de las clases iostream
 
Corrección del examen de primer quimestre de computació1
Corrección del examen de primer quimestre de computació1Corrección del examen de primer quimestre de computació1
Corrección del examen de primer quimestre de computació1
 

Similar to Flex y Bison

Similar to Flex y Bison (20)

Investigacion Flex Y Bison
Investigacion Flex Y BisonInvestigacion Flex Y Bison
Investigacion Flex Y Bison
 
Pontificia universidad católica del ecuador flex y bison
Pontificia universidad católica del ecuador flex y bisonPontificia universidad católica del ecuador flex y bison
Pontificia universidad católica del ecuador flex y bison
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Compiladores - Flex y Bison
Compiladores - Flex y BisonCompiladores - Flex y Bison
Compiladores - Flex y Bison
 
Flex bison
Flex bisonFlex bison
Flex bison
 
INTRODUCCION A FLEX Y BISON
INTRODUCCION A FLEX Y BISONINTRODUCCION A FLEX Y BISON
INTRODUCCION A FLEX Y BISON
 
Taller de flex y bison
Taller de flex y bisonTaller de flex y bison
Taller de flex y bison
 
Taller compiladores conceptos
Taller compiladores conceptosTaller compiladores conceptos
Taller compiladores conceptos
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Taller
TallerTaller
Taller
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Generalidades de la programacion
Generalidades de la programacionGeneralidades de la programacion
Generalidades de la programacion
 
Compilador Convertidor de Divisas
Compilador Convertidor de DivisasCompilador Convertidor de Divisas
Compilador Convertidor de Divisas
 
Trabajo compiladores ivan bolaños
Trabajo compiladores ivan bolañosTrabajo compiladores ivan bolaños
Trabajo compiladores ivan bolaños
 
COMPILADORES
COMPILADORESCOMPILADORES
COMPILADORES
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
FLEX Y BISON
FLEX Y BISONFLEX Y BISON
FLEX Y BISON
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Curso prog sist
Curso prog sistCurso prog sist
Curso prog sist
 

More from Guiru Xd

Construcciones Simples, Individuales y/o Personales
Construcciones Simples, Individuales y/o PersonalesConstrucciones Simples, Individuales y/o Personales
Construcciones Simples, Individuales y/o PersonalesGuiru Xd
 
Los Miembros de la Manada
Los Miembros de la ManadaLos Miembros de la Manada
Los Miembros de la ManadaGuiru Xd
 
Tip Scout - Cancionero de Bolsillo
Tip Scout - Cancionero de BolsilloTip Scout - Cancionero de Bolsillo
Tip Scout - Cancionero de BolsilloGuiru Xd
 
Promesa y Ley del Clan
Promesa y Ley del ClanPromesa y Ley del Clan
Promesa y Ley del ClanGuiru Xd
 
Flor de lis
Flor de lisFlor de lis
Flor de lisGuiru Xd
 
Bordón Scout - Tip Scout
Bordón Scout - Tip ScoutBordón Scout - Tip Scout
Bordón Scout - Tip ScoutGuiru Xd
 
Hacha y Cuchillo
Hacha y CuchilloHacha y Cuchillo
Hacha y CuchilloGuiru Xd
 
50 Juegos de Orientación y Topografía por Juan Manuel Lourenço
50 Juegos de Orientación y Topografía por Juan Manuel Lourenço50 Juegos de Orientación y Topografía por Juan Manuel Lourenço
50 Juegos de Orientación y Topografía por Juan Manuel LourençoGuiru Xd
 
Los Roles de la Patrulla Scout
Los Roles de la Patrulla ScoutLos Roles de la Patrulla Scout
Los Roles de la Patrulla ScoutGuiru Xd
 
Guia para dirigentes de la rama caminantes 02
Guia para dirigentes de la rama caminantes 02Guia para dirigentes de la rama caminantes 02
Guia para dirigentes de la rama caminantes 02Guiru Xd
 
Formaciones Scouts
Formaciones ScoutsFormaciones Scouts
Formaciones ScoutsGuiru Xd
 
Guia para dirigentes de la rama caminantes 01
Guia para dirigentes de la rama caminantes 01Guia para dirigentes de la rama caminantes 01
Guia para dirigentes de la rama caminantes 01Guiru Xd
 
Como Dirigr Una Patrulla - Gilcraft
Como Dirigr Una Patrulla - GilcraftComo Dirigr Una Patrulla - Gilcraft
Como Dirigr Una Patrulla - GilcraftGuiru Xd
 
COMO CONSTRUIR UN SILBATO SCOUT POR ALEJANDRO ECHAVARRIA
COMO CONSTRUIR UN SILBATO SCOUT POR ALEJANDRO ECHAVARRIACOMO CONSTRUIR UN SILBATO SCOUT POR ALEJANDRO ECHAVARRIA
COMO CONSTRUIR UN SILBATO SCOUT POR ALEJANDRO ECHAVARRIAGuiru Xd
 
El Código de Gilwell - John Thurman
El Código de Gilwell - John ThurmanEl Código de Gilwell - John Thurman
El Código de Gilwell - John ThurmanGuiru Xd
 
Instalación de AutoCAD
Instalación de AutoCADInstalación de AutoCAD
Instalación de AutoCADGuiru Xd
 
Definiciones elementales o previas
Definiciones elementales o previasDefiniciones elementales o previas
Definiciones elementales o previasGuiru Xd
 
Ejercicios en Python
Ejercicios en PythonEjercicios en Python
Ejercicios en PythonGuiru Xd
 
Análisis Sintáctico Ascendente - Descendente
Análisis Sintáctico Ascendente - DescendenteAnálisis Sintáctico Ascendente - Descendente
Análisis Sintáctico Ascendente - DescendenteGuiru Xd
 

More from Guiru Xd (20)

Construcciones Simples, Individuales y/o Personales
Construcciones Simples, Individuales y/o PersonalesConstrucciones Simples, Individuales y/o Personales
Construcciones Simples, Individuales y/o Personales
 
Los Miembros de la Manada
Los Miembros de la ManadaLos Miembros de la Manada
Los Miembros de la Manada
 
Tip Scout - Cancionero de Bolsillo
Tip Scout - Cancionero de BolsilloTip Scout - Cancionero de Bolsillo
Tip Scout - Cancionero de Bolsillo
 
Promesa y Ley del Clan
Promesa y Ley del ClanPromesa y Ley del Clan
Promesa y Ley del Clan
 
Flor de lis
Flor de lisFlor de lis
Flor de lis
 
Bordón Scout - Tip Scout
Bordón Scout - Tip ScoutBordón Scout - Tip Scout
Bordón Scout - Tip Scout
 
Hacha y Cuchillo
Hacha y CuchilloHacha y Cuchillo
Hacha y Cuchillo
 
J code
J codeJ code
J code
 
50 Juegos de Orientación y Topografía por Juan Manuel Lourenço
50 Juegos de Orientación y Topografía por Juan Manuel Lourenço50 Juegos de Orientación y Topografía por Juan Manuel Lourenço
50 Juegos de Orientación y Topografía por Juan Manuel Lourenço
 
Los Roles de la Patrulla Scout
Los Roles de la Patrulla ScoutLos Roles de la Patrulla Scout
Los Roles de la Patrulla Scout
 
Guia para dirigentes de la rama caminantes 02
Guia para dirigentes de la rama caminantes 02Guia para dirigentes de la rama caminantes 02
Guia para dirigentes de la rama caminantes 02
 
Formaciones Scouts
Formaciones ScoutsFormaciones Scouts
Formaciones Scouts
 
Guia para dirigentes de la rama caminantes 01
Guia para dirigentes de la rama caminantes 01Guia para dirigentes de la rama caminantes 01
Guia para dirigentes de la rama caminantes 01
 
Como Dirigr Una Patrulla - Gilcraft
Como Dirigr Una Patrulla - GilcraftComo Dirigr Una Patrulla - Gilcraft
Como Dirigr Una Patrulla - Gilcraft
 
COMO CONSTRUIR UN SILBATO SCOUT POR ALEJANDRO ECHAVARRIA
COMO CONSTRUIR UN SILBATO SCOUT POR ALEJANDRO ECHAVARRIACOMO CONSTRUIR UN SILBATO SCOUT POR ALEJANDRO ECHAVARRIA
COMO CONSTRUIR UN SILBATO SCOUT POR ALEJANDRO ECHAVARRIA
 
El Código de Gilwell - John Thurman
El Código de Gilwell - John ThurmanEl Código de Gilwell - John Thurman
El Código de Gilwell - John Thurman
 
Instalación de AutoCAD
Instalación de AutoCADInstalación de AutoCAD
Instalación de AutoCAD
 
Definiciones elementales o previas
Definiciones elementales o previasDefiniciones elementales o previas
Definiciones elementales o previas
 
Ejercicios en Python
Ejercicios en PythonEjercicios en Python
Ejercicios en Python
 
Análisis Sintáctico Ascendente - Descendente
Análisis Sintáctico Ascendente - DescendenteAnálisis Sintáctico Ascendente - Descendente
Análisis Sintáctico Ascendente - Descendente
 

Recently uploaded

FUNCION DE ESTADO EN LA TERMODINAMICA.pdf
FUNCION DE ESTADO EN LA TERMODINAMICA.pdfFUNCION DE ESTADO EN LA TERMODINAMICA.pdf
FUNCION DE ESTADO EN LA TERMODINAMICA.pdfalfredoivan1
 
metodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantasmetodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantasGraciaMatute1
 
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALSESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALEdwinC23
 
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfCONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfwduranteg
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)Ricardo705519
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTElisaLen4
 
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTOPRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTOwillanpedrazaperez
 
TAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientosTAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientoscuentaparainvestigac
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.pptjacnuevarisaralda22
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDEdith Puclla
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEduardoBriones22
 
SESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdf
SESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdfSESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdf
SESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdfJorgeFuertes8
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Dr. Edwin Hernandez
 
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptxEFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptxfranklingerardoloma
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosandersonsubero28
 
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATevercoyla
 
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der RoheAportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der RoheElisaLen4
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptNombre Apellidos
 
Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internamengual57
 

Recently uploaded (20)

FUNCION DE ESTADO EN LA TERMODINAMICA.pdf
FUNCION DE ESTADO EN LA TERMODINAMICA.pdfFUNCION DE ESTADO EN LA TERMODINAMICA.pdf
FUNCION DE ESTADO EN LA TERMODINAMICA.pdf
 
metodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantasmetodos de fitomejoramiento en la aolicacion de plantas
metodos de fitomejoramiento en la aolicacion de plantas
 
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONALSESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
SESION 11 SUPERVISOR SSOMA SEGURIDAD Y SALUD OCUPACIONAL
 
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdfCONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
CONEXIONES SERIE, PERALELO EN MÓDULOS FOTOVOLTAICOS.pdf
 
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
analisis tecnologico( diagnostico tecnologico, herramienta de toma de deciones)
 
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHTAPORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
APORTES A LA ARQUITECTURA DE WALTER GROPIUS Y FRANK LLOYD WRIGHT
 
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTOPRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
PRESENTACION DE LAS PLAGAS Y ENFERMEDADES DEL PALTO
 
TAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientosTAIICHI OHNO, historia, obras, reconocimientos
TAIICHI OHNO, historia, obras, reconocimientos
 
27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt27311861-Cuencas-sedimentarias-en-Colombia.ppt
27311861-Cuencas-sedimentarias-en-Colombia.ppt
 
PostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCDPostgreSQL on Kubernetes Using GitOps and ArgoCD
PostgreSQL on Kubernetes Using GitOps and ArgoCD
 
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico EcuatorianoEstadística Anual y Multianual del Sector Eléctrico Ecuatoriano
Estadística Anual y Multianual del Sector Eléctrico Ecuatoriano
 
422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx422382393-Curso-de-Tableros-Electricos.pptx
422382393-Curso-de-Tableros-Electricos.pptx
 
SESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdf
SESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdfSESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdf
SESION 02-DENSIDAD DE POBLACION Y DEMANDA DE AGUA (19-03-2024).pdf
 
Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...Propuesta para la creación de un Centro de Innovación para la Refundación ...
Propuesta para la creación de un Centro de Innovación para la Refundación ...
 
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptxEFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
EFICIENCIA ENERGETICA-ISO50001_INTEC_2.pptx
 
Tipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplosTipos de suelo y su clasificación y ejemplos
Tipos de suelo y su clasificación y ejemplos
 
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNATINSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
INSUMOS QUIMICOS Y BIENES FISCALIZADOS POR LA SUNAT
 
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der RoheAportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
Aportes a la Arquitectura de Le Corbusier y Mies Van der Rohe
 
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.pptTippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
Tippens fisica 7eDIAPOSITIVAS TIPENS Tippens_fisica_7e_diapositivas_33.ppt
 
Sistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión internaSistema de lubricación para motores de combustión interna
Sistema de lubricación para motores de combustión interna
 

Flex y Bison

  • 1. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería Compiladores Nombre: Guido Espinosa de los Monteros  Herramientas para la construcción de procesadores de lenguaje. Herramienta Lenguaje Descripción Bison C Generador de Analizadores Sintácticos Ascendentes tipo YACC COCO/R C/C++ Generador de Analizadores Léxicos y Sintácticos Descendentes Recursivos Flex C Generador de Analizadores Léxicos tipo Lex Lex C Generador de Analizadores Léxicos SDGLL1 exe Sistema Detector de Gramáticas LL(1) y generador de la tabla TS 2006 C/C++ Tipo abstracto de datos Tabla de Símbolos de uso sencillo TS C Tipo abstracto de datos Tabla de Símbolos TS-OO C++ Tipo abstracto de datos orientado a objetos Tabla de Símbolos VASt exe Visualizador de árboles sintácticos partiendo de los ficheros con la gramática y el parse pedidos en la Práctica [versión 2.0, Windows] VASt C++ Visualizador de árboles sintácticos partiendo de los ficheros con la gramática y el parse pedidos en la Práctica [versión 1.0, Linux] YACC C Generador de Analizadores Sintácticos Ascendentes LR(1)  Reseña Histórica Diseño y construcción de un compilador. El software para los primeros computadores estaba primariamente escrito en lenguaje ensamblador. Normalmente para un programador es más productivo usar un lenguaje de alto nivel, y los programas escritos en lenguajes de alto nivel pueden ser reutilizados en distintos tipos de computadores. Aún teniendo en cuenta esto, pasó un tiempo hasta
  • 2. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería que los compiladores se establecieran, porque generaban código que no tenía tan buen rendimiento como los ensambladores escritos a mano, eran enormes proyectos de desarrollo por sí mismos, y la limitadísima capacidad de memoria de los primeros computadores creó muchos problemas técnicos para las implementaciones prácticas de los compiladores. El primer compilador fue escrito por Grace Hopper, en 1952, para el lenguaje Sistema A-0. El término compilador fue acuñado por Hopper.1 El equipo FORTRAN dirigido por John W. Backus de IBM está generalmente acreditado por haber presentado el primer compilador completo, en 1957. El primer compilador FORTRAN necesitó de 18 años- persona para su creación.2 En 1960, un compilador FORTRAN extendido, ALTAC, estaba también disponible en el Philco 2000, por lo que es probable que un programa FORTRAN fuera compilado para ambas arquitecturas de computadores a mediados de los años 60.3 El primer lenguaje de alto nivel multiplataforma demostrado fue COBOL. En una demostración en diciembre de 1960, un programa COBOL fue compilado y ejecutado en el UNIVAC II y el RCA 501.1 El compilador COBOL para el UNIVAC II fue probablemente el primero en ser escrito en un lenguaje de alto nivel, llamado FLOW-MATIC, por un equipo dirigido por Grace Hopper. Las herramientas Flex y Bison.  Que es Flex y Bison 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. 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.
  • 3. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería  Como se instala Flex y Bison
  • 4. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería
  • 5. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería
  • 6. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería  Como se compila con Flex y Bison  2 Ejemplos de la creación de un compilador utilizando Flex y Bison. realizar un ejemplo de una calculadora sencilla que reconocerá las principales operaciones aritmética (+,-,* y /). Abrimos un editor de texto y pegamos el siguiente código que será nuestro scanner /***************** Definiciones Se colocan las cabeceras, variables y expresiones regulares ********************/ %{ #include <stdio.h> #include <stdlib.h> #include "sintactico.tab.h" int linea=0; %} /* Creamos todas las expresiones regulares Creamos la definición llamada DIGITO, podemos acceder esta definición usando {DIGITO}*/ DIGITO [0-9] NUMERO {DIGITO}+("."{DIGITO}+)?
  • 7. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería %% /*************** Reglas *****************/ /* Creamos las reglas que reconocerán las cadenas que acepte Nuestro scanner y retornaremos el token a bison con la funcion return. */ {NUMERO} {yylval.real=atof(yytext); return(NUMERO);} "=" {return(IGUAL);} "+" {return(MAS);} "-" {return(MENOS);} ";" {return(PTOCOMA);} "*" {return(POR);} "/" {return(DIV);} "(" {return(PAA);} ")" {return(PAC);} "n" {linea++;} [trf] {} " " {} /* Si en nuestra entrada tiene algún caracter que no pertenece a las reglas anteriores, se genera un error léxico */ . {printf("Error lexico en linea %d",linea);} %% /* Código de Usuario Aquí podemos realizar otras funciones, como por ejemplo ingresar símbolos a nuestra tabal de símbolos o cualquier otra accione del usuario. Todo lo que el usuario coloque en esta sección se copiara al archvi lex.yy.c tal y como esta. */ Guardamos el archivo como lexico.l. Luego creamos un nuevo archivo y colocamos el siguiente código. %{ /******************** Declaraciones en C
  • 8. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería **********************/ #include <stdio.h> #include <stdlib.h> #include <math.h> extern int yylex(void); extern char *yytext; extern int linea; extern FILE *yyin; void yyerror(char *s); %} /************************ Declaraciones de Bison *************************/ /* Especifica la coleccion completa de tipos de datos para poder usar varios tipos de datos en los terminales y no terminales*/ %union { float real; } /* Indica la produccion con la que inicia nuestra gramatica*/ %start Exp_l /* Especificacion de termines, podemos especificar tambien su tipo */ %token <real> NUMERO %token MAS %token MENOS %token IGUAL %token PTOCOMA %token POR %token DIV %token PAA %token PAC /* No Terminales, que tambien podemos especificar su tipo */ %type <real> Exp %type <real> Calc %type <real> Exp_l /* Definimos las precedencias de menor a mayor */ %left MAS MENOS %left POR DIV %% /********************** Reglas Gramaticales
  • 9. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería ***********************/ Exp_l: Exp_l Calc |Calc ; Calc : Exp PTOCOMA {printf ("%4.1fn",$1)} ; /* con el símbolo de $$ asignamos el valor semántico de toda la acción de la derecha y se la asignamos al no terminal de la izquierda, en la siguiente regla, se la asigna a Exp. Para poder acceder al valor de los terminales y no terminales del lado derecho usamos el símbolo $ y le concatenamos un numero que representa la posición en la que se encuentra es decir si tenemos A --> B NUMERO C Si queremos usar le valor que tiene el no terminal B usamos $1, si queremos usar el valor que tiene NUMERO usamos $2 y así sucesivamente. */ Exp : NUMERO {$$=$1;} |Exp MAS Exp {$$=$1+$3;} |Exp MENOS Exp {$$=$1-$3;} |Exp POR Exp {$$=$1*$3;} |Exp DIV Exp {$$=$1/$3;} |PAA Exp PAC {$$=$2;} ; %% /******************** Codigo C Adicional **********************/ void yyerror(char *s) { printf("Error sintactico %s",s); } int main(int argc,char **argv) { if (argc>1) yyin=fopen(argv[1],"rt"); else yyin=stdin; yyparse(); return 0;
  • 10. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería } Guardamos este archivo con el nombre sintáctico.y y con eso ya tenemos nuestro scanner y nuestro parser terminado. Para compilar estos archivos usamos los comandos Compilando sintactico.y ~> bison -d sintactico.y El parámetro –d, crea el fichero t.tab.h, que contiene los identificadores de los tokens de bison usados por flex Compilando lexico.l ~> flex lexico.l Compilando arhivos generados y crear ejecutable ~> cc lex.yy.c sintactico.tab.c -o analizador -lfl -lm Esto nos genera un ejecutable llamado analizador. Muchas veces necesitamos modificar nuestro archivo sintáctico.y o lexico.l y tenemos que compilar todo cada vez que hacemos un cambio, para no estar escribiendo los comandos cada vez que realizamos un cambio, crearemos un script, que al ejecutarlo realizara todos los comandos de compilación. Para eso creamos un nuevo archivo en blanco y escribimos #!/bin/bash bison -d sintactico.y flex lexico.l cc lex.yy.c sintactico.tab.c -o analizador -lfl –lm Guardamos este archivo con cualquier nombre, por ejemplo compilar.sh. Ahora cambiaremos las propiedades de este archivo para poder ejecutar. Le damos clic derecho sobre este archivo y en la pestaña permisos elegimos la opción de “Permitir ejecutar el archivo como un programa”, cerramos esa ventana.
  • 11. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería Para poder compilar, desde consola nos ubicamos donde se encuentra este archivo .sh y escribimos ./compilar.sh Esto nos genera nuestro ejecutable que podemos correr para poder probar nuestra calculadora. Para ejecutar este ejemplo usamos el comando ./analizador Ingresamos algunas expresiones y el resultado que obtenemos es:
  • 12. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería %option c++ %option noyywrap %{ #include <sstream> #include <cstdlib> #include "parser.h" using namespace std; %} DIGIT [0-9] DIGIT1 [1-9] %% {DIGIT1}{DIGIT}* { cout << "Lexer: " << yytext << endl; return Parser::NUMBER; } . { return Parser::UNKNOWN; } <<EOF>> { yyterminate(); } %% %name Parser %define LSP_NEEDED %define MEMBERS virtual ~Parser() {} private: yyFlexLexer lexer; %define LEX_BODY {return lexer.yylex();} %define ERROR_BODY {cerr << "error encountered at line: "<<lexer.lineno()<<" last word parsed:"<<lexer.YYText()<<"n";} %header{ #include < ostream > #include < fstream > #include < FlexLexer.h > using namespace std; %}
  • 13. Pontificia Universidad Católica del Ecuador Sede Ibarra Escuela de Ingeniería %union { int i_type; } %token UNKNOWN %token < i_type > NUMBER %type < i_type > number %start number %% number : NUMBER { $$ = atoi(lexer.YYText()); cout << "Parser value " << $$ << endl;} ; %% #include "parser.h" #include < iostream > using namespace std; int main(int argc, char ** argv) { Parser parser; parser.yyparse(); return 0; } all: test parser.cc: parser.y bison++ -d -hparser.h -o $@ $< scanner.cc: scanner.l flex++ -d -o$@ $< test: parser.o scanner.o test.o g++ -o $@ test.o parser.o scanner.o clean: $(RM) *~ *# test *.o *.h $(RM) parser.cc scanner.cc