SlideShare una empresa de Scribd logo
1 de 5
Análisis Léxico: Esta fase se encarga de verificar si todas las cadenas pertenecen o no al lenguaje. Es
decir realiza un análisis símbolo por símbolo indicando el token por cada uno de los elementos
reconocidos o el error en caso de no reconocer. Este análisis no logra detectarmuchos errores por su
característica.
Análisis Sintáctico: En esta fase se analiza la estructura de las expresiones en base a gramáticas. Aquí
ya se puede determinar si una estructura por ejemplo una expresión matemática mal formada. El
análisis que se realiza es jerarquico es decir en base a arboles de derivación que se obtienen de las
mismas gramáticas.
Análisis Semántico: Este análisis es más difícil de formalizar, determina el tipo de los resultados
intermedios, comprobar que los argumentos que tienen un operador pertenecen al conjunto de
operadores posible, y si son compatibles entre si.
Configurando Bison en Windows
Como podemos leer en la wikipedia, 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 lexicos se pueden también obtener de
otras formas. En un post anterior mencioné la forma en que uno podía configurar
Flex para realizar analizadores léxicos. Bueno, en esta oportunidad vamos a
desarrollar una sencilla calculadora con Bison y Flex. Los pasos para configurar el
flex, nos dejan configurado al bison, listo para ser usado en nuestra calculadora.
Ahora, voy a pasar a explicar la forma que deben tener los scripts que ingresaremos
tanto a flex como a bison.
Para flex el script debe tener la siguiente estructura:
?
1
%{
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include "y.tab.h"
%}
%option noyywrap
%option yylineno
DIGITO [0-9]
ID [a-zA-Z][a-zA-Z0-9_]*
%%
{DIGITO}+("."{DIGITO}+)? {yylval.real=atof(yytext); return(TKN_NUM);}
"=" {return(TKN_ASIGN);}
";" {return(TKN_PTOCOMA);}
"*" {return(TKN_MULT);}
"/" {return(TKN_DIV);}
"+" {return(TKN_MAS);}
"-" {return(TKN_MENOS);}
{ID} {return(TKN_ID);}
%%
Como nos podemos dar cuenta, en este fichero declaramos los símbolos y las
expresiones que forman a los token numero (TKN_NUM). Asumo que ya tienen
conocimiento de cada una de las partes de un archivo de flex, así que ahora paso
a mostrar la forma que debe tener el archivo que le ingresaremos a Bison:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
%{
#include <stdio.h>
#include <math.h>
extern int yylex(void);
extern char *yytext;
void yyerror (char *s);
%}
%union
{
float real;
}
%start Calculadora
%token <real> TKN_NUM
%token TKN_ASIGN
%token TKN_PTOCOMA
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
%token TKN_MULT
%token TKN_DIV
%token TKN_MAS
%token TKN_MENOS
%token <real> TKN_ID
%type <real> Expresion
%left TKN_MAS TKN_MENOS
%left TKN_MULT TKN_DIV
%%
Calculadora: TKN_ID {printf("El valor de %s es:", yytext);}
TKN_ASIGN Expresion TKN_PTOCOMA{printf("%5.2f", $4);};
Expresion : TKN_NUM{$$=$1;}|
Expresion Expresion TKN_MAS {$$=$1+$2;}|
Expresion Expresion TKN_MENOS {$$=$1-$2;}|
Expresion Expresion TKN_MULT {$$=$1*$2;}|
Expresion Expresion TKN_DIV {$$=$1/$2;};
%%
void yyerror(char *s)
{
printf("Error %s", s);
}
int main()
{
yyparse();
return 0;
}
Tampoco voy a explicar la estructura de este fichero puesto que la documentación
en internet es muy variada. Lo que si voy a detallar es la forma de obtener los
ficheros *.c y *.h, puesto que, a mi parecer, es lo más confuso y poco explicado.
Como mencioné anteriormente, al configurar el flex siguiendo los pasos que
expliqué en el post anterior el Bison quedará configurado también. Así que solo hay
que realizar los siguientes comandos por consola y tendremos todo listo para
integrarlo a nuestro proyecto de Dev-C++.
Situamos ambos ficheros en el directorio D:calculadora(Si no existe, tenemos que
crearlo, lógicamente) y luego abrimos una consola de Windows, hacemos lo mismo
que hicimos con el Flex, estableciendo las variables de entorno, como muestro en
la siguiente imagen:
Y con esos comandos se nos generará unos ficheros, los cuales automáticamente
podemos integrarlo a un proyecto de Dev-C++ por ejemplo o agregarle más
funciones.
Ahora ya tenemos lista nuestra sencilla calculadora escrita con ayuda de Bison y
Flex. Solo debemos ejecutar Calculadora.exe e ir introduciendo algunas
expresiones (En notación polaca claro)
?
1
2
3
a=4 5+;
hola=8 12*;
g=12 6/;
Aquí les dejo la carpeta del proyecto con los archivos tanto de flex como de bison.
También les muestro la forma de correr el programa de la calculadora en la siguiente
imagen:
Análisis léxico

Más contenido relacionado

La actualidad más candente

Agregación Composición
Agregación ComposiciónAgregación Composición
Agregación ComposiciónFernando Solis
 
For shell script
For    shell scriptFor    shell script
For shell scriptPablo Macon
 
Python básico
Python básicoPython básico
Python básicoCodeSyntax
 
Arrays csharp visto_desde_c
Arrays csharp visto_desde_cArrays csharp visto_desde_c
Arrays csharp visto_desde_cPamela Calavetta
 
Estructuras de control 1
Estructuras de control 1Estructuras de control 1
Estructuras de control 1Pablo Macon
 
Actividad 3 . funciones en php
Actividad 3 . funciones en phpActividad 3 . funciones en php
Actividad 3 . funciones en phpLeonardoPuerta2
 
Trabajo digital.
Trabajo digital.Trabajo digital.
Trabajo digital.edwin-c
 
While Shell Script
While  Shell ScriptWhile  Shell Script
While Shell ScriptPablo Macon
 
Primeros Programas Shell Script
Primeros Programas Shell ScriptPrimeros Programas Shell Script
Primeros Programas Shell ScriptPablo Macon
 
Operaciones basico php everardo
Operaciones basico php everardoOperaciones basico php everardo
Operaciones basico php everardoEverardoMadrigal1
 
Parámetros en shell script
Parámetros en shell scriptParámetros en shell script
Parámetros en shell scriptPablo Macon
 
Tic funciones conceptos
Tic funciones   conceptosTic funciones   conceptos
Tic funciones conceptosmyaarg2
 
Quasi - Comandos básicos para UNIX
Quasi - Comandos básicos para UNIXQuasi - Comandos básicos para UNIX
Quasi - Comandos básicos para UNIXdegarden
 

La actualidad más candente (20)

Práctica web de la sesión 3
Práctica web de la sesión 3Práctica web de la sesión 3
Práctica web de la sesión 3
 
Agregación Composición
Agregación ComposiciónAgregación Composición
Agregación Composición
 
Guía de trabajo
Guía de trabajoGuía de trabajo
Guía de trabajo
 
For shell script
For    shell scriptFor    shell script
For shell script
 
Constructores
ConstructoresConstructores
Constructores
 
Ejercicios resueltos con Python
Ejercicios resueltos con PythonEjercicios resueltos con Python
Ejercicios resueltos con Python
 
Python básico
Python básicoPython básico
Python básico
 
Arrays csharp visto_desde_c
Arrays csharp visto_desde_cArrays csharp visto_desde_c
Arrays csharp visto_desde_c
 
Estructuras de control 1
Estructuras de control 1Estructuras de control 1
Estructuras de control 1
 
Actividad 3 . funciones en php
Actividad 3 . funciones en phpActividad 3 . funciones en php
Actividad 3 . funciones en php
 
Trabajo digital.
Trabajo digital.Trabajo digital.
Trabajo digital.
 
While Shell Script
While  Shell ScriptWhile  Shell Script
While Shell Script
 
Tarea seccio 3_antonio
Tarea seccio 3_antonioTarea seccio 3_antonio
Tarea seccio 3_antonio
 
Primeros Programas Shell Script
Primeros Programas Shell ScriptPrimeros Programas Shell Script
Primeros Programas Shell Script
 
Operaciones basico php everardo
Operaciones basico php everardoOperaciones basico php everardo
Operaciones basico php everardo
 
Parámetros en shell script
Parámetros en shell scriptParámetros en shell script
Parámetros en shell script
 
Python05
Python05Python05
Python05
 
Python04
Python04Python04
Python04
 
Tic funciones conceptos
Tic funciones   conceptosTic funciones   conceptos
Tic funciones conceptos
 
Quasi - Comandos básicos para UNIX
Quasi - Comandos básicos para UNIXQuasi - Comandos básicos para UNIX
Quasi - Comandos básicos para UNIX
 

Similar a Análisis léxico

Similar a Análisis léxico (20)

Compiladores - Flex y Bison
Compiladores - Flex y BisonCompiladores - Flex y Bison
Compiladores - Flex y Bison
 
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
 
TALLER FLEX Y BISON
TALLER FLEX Y BISONTALLER FLEX Y BISON
TALLER 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 bison
Flex bisonFlex bison
Flex bison
 
COMPILADORES
COMPILADORESCOMPILADORES
COMPILADORES
 
Flex y Bison
Flex y BisonFlex y Bison
Flex y Bison
 
Trabajo compiladores ivan bolaños
Trabajo compiladores ivan bolañosTrabajo compiladores ivan bolaños
Trabajo compiladores ivan bolaños
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Flex y bison
Flex y  bisonFlex y  bison
Flex y bison
 
Taller de actividades de compiladores, Flex y Bison
Taller de actividades de compiladores, Flex y BisonTaller de actividades de compiladores, Flex y Bison
Taller de actividades de compiladores, Flex y Bison
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Flex bison
Flex bisonFlex bison
Flex bison
 
Taller compiladores conceptos
Taller compiladores conceptosTaller compiladores conceptos
Taller compiladores conceptos
 
Taller de flex y bison
Taller de flex y bisonTaller de flex y bison
Taller de 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
 
Flex y-bison
Flex y-bisonFlex y-bison
Flex y-bison
 

Último

clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinosDayanaCarolinaAP
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfdanielJAlejosC
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxMarcelaArancibiaRojo
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)ssuser563c56
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOLUISDAVIDVIZARRETARA
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCarlosGabriel96
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaXimenaFallaLecca1
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMONICADELROCIOMUNZON1
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesCarlosMeraz16
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesMIGUELANGEL2658
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.pptoscarvielma45
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023RonaldoPaucarMontes
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfalexquispenieto2
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfKEVINYOICIAQUINOSORI
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOFritz Rebaza Latoche
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfmatepura
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfXimenaFallaLecca1
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxClaudiaPerez86192
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónXimenaFallaLecca1
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptMarianoSanchez70
 

Último (20)

clases de porcinos generales de porcinos
clases de porcinos generales de porcinosclases de porcinos generales de porcinos
clases de porcinos generales de porcinos
 
Maquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdfMaquinaria Agricola utilizada en la produccion de Piña.pdf
Maquinaria Agricola utilizada en la produccion de Piña.pdf
 
hitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docxhitos del desarrollo psicomotor en niños.docx
hitos del desarrollo psicomotor en niños.docx
 
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)Voladura Controlada  Sobrexcavación (como se lleva a cabo una voladura)
Voladura Controlada Sobrexcavación (como se lleva a cabo una voladura)
 
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESOCAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
CAPITULO 4 ANODIZADO DE ALUMINIO ,OBTENCION Y PROCESO
 
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptxCALCULO DE ENGRANAJES RECTOS SB-2024.pptx
CALCULO DE ENGRANAJES RECTOS SB-2024.pptx
 
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO CersaSesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
Sesión 02 TIPOS DE VALORIZACIONES CURSO Cersa
 
Mapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptxMapas y cartas topográficas y de suelos.pptx
Mapas y cartas topográficas y de suelos.pptx
 
nomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestacionesnomenclatura de equipo electrico en subestaciones
nomenclatura de equipo electrico en subestaciones
 
clasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias localesclasificasion de vias arteriales , vias locales
clasificasion de vias arteriales , vias locales
 
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
01 MATERIALES AERONAUTICOS VARIOS clase 1.ppt
 
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
COMPEDIOS ESTADISTICOS DE PERU EN EL 2023
 
PPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdfPPT ELABORARACION DE ADOBES 2023 (1).pdf
PPT ELABORARACION DE ADOBES 2023 (1).pdf
 
Elaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdfElaboración de la estructura del ADN y ARN en papel.pdf
Elaboración de la estructura del ADN y ARN en papel.pdf
 
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADOPERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
PERFORACIÓN Y VOLADURA EN MINERÍA APLICADO
 
ECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdfECONOMIA APLICADA SEMANA 555555555544.pdf
ECONOMIA APLICADA SEMANA 555555555544.pdf
 
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdfTEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
TEXTO UNICO DE LA LEY-DE-CONTRATACIONES-ESTADO.pdf
 
Comite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptxComite Operativo Ciberseguridad 012020.pptx
Comite Operativo Ciberseguridad 012020.pptx
 
Obras paralizadas en el sector construcción
Obras paralizadas en el sector construcciónObras paralizadas en el sector construcción
Obras paralizadas en el sector construcción
 
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.pptARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
ARBOL DE CAUSAS ANA INVESTIGACION DE ACC.ppt
 

Análisis léxico

  • 1. Análisis Léxico: Esta fase se encarga de verificar si todas las cadenas pertenecen o no al lenguaje. Es decir realiza un análisis símbolo por símbolo indicando el token por cada uno de los elementos reconocidos o el error en caso de no reconocer. Este análisis no logra detectarmuchos errores por su característica. Análisis Sintáctico: En esta fase se analiza la estructura de las expresiones en base a gramáticas. Aquí ya se puede determinar si una estructura por ejemplo una expresión matemática mal formada. El análisis que se realiza es jerarquico es decir en base a arboles de derivación que se obtienen de las mismas gramáticas. Análisis Semántico: Este análisis es más difícil de formalizar, determina el tipo de los resultados intermedios, comprobar que los argumentos que tienen un operador pertenecen al conjunto de operadores posible, y si son compatibles entre si. Configurando Bison en Windows Como podemos leer en la wikipedia, 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 lexicos se pueden también obtener de otras formas. En un post anterior mencioné la forma en que uno podía configurar Flex para realizar analizadores léxicos. Bueno, en esta oportunidad vamos a desarrollar una sencilla calculadora con Bison y Flex. Los pasos para configurar el flex, nos dejan configurado al bison, listo para ser usado en nuestra calculadora. Ahora, voy a pasar a explicar la forma que deben tener los scripts que ingresaremos tanto a flex como a bison. Para flex el script debe tener la siguiente estructura: ? 1 %{
  • 2. 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 #include <stdio.h> #include "y.tab.h" %} %option noyywrap %option yylineno DIGITO [0-9] ID [a-zA-Z][a-zA-Z0-9_]* %% {DIGITO}+("."{DIGITO}+)? {yylval.real=atof(yytext); return(TKN_NUM);} "=" {return(TKN_ASIGN);} ";" {return(TKN_PTOCOMA);} "*" {return(TKN_MULT);} "/" {return(TKN_DIV);} "+" {return(TKN_MAS);} "-" {return(TKN_MENOS);} {ID} {return(TKN_ID);} %% Como nos podemos dar cuenta, en este fichero declaramos los símbolos y las expresiones que forman a los token numero (TKN_NUM). Asumo que ya tienen conocimiento de cada una de las partes de un archivo de flex, así que ahora paso a mostrar la forma que debe tener el archivo que le ingresaremos a Bison: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 %{ #include <stdio.h> #include <math.h> extern int yylex(void); extern char *yytext; void yyerror (char *s); %} %union { float real; } %start Calculadora %token <real> TKN_NUM %token TKN_ASIGN %token TKN_PTOCOMA
  • 3. 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 %token TKN_MULT %token TKN_DIV %token TKN_MAS %token TKN_MENOS %token <real> TKN_ID %type <real> Expresion %left TKN_MAS TKN_MENOS %left TKN_MULT TKN_DIV %% Calculadora: TKN_ID {printf("El valor de %s es:", yytext);} TKN_ASIGN Expresion TKN_PTOCOMA{printf("%5.2f", $4);}; Expresion : TKN_NUM{$$=$1;}| Expresion Expresion TKN_MAS {$$=$1+$2;}| Expresion Expresion TKN_MENOS {$$=$1-$2;}| Expresion Expresion TKN_MULT {$$=$1*$2;}| Expresion Expresion TKN_DIV {$$=$1/$2;}; %% void yyerror(char *s) { printf("Error %s", s); } int main() { yyparse(); return 0; } Tampoco voy a explicar la estructura de este fichero puesto que la documentación en internet es muy variada. Lo que si voy a detallar es la forma de obtener los ficheros *.c y *.h, puesto que, a mi parecer, es lo más confuso y poco explicado. Como mencioné anteriormente, al configurar el flex siguiendo los pasos que expliqué en el post anterior el Bison quedará configurado también. Así que solo hay que realizar los siguientes comandos por consola y tendremos todo listo para integrarlo a nuestro proyecto de Dev-C++.
  • 4. Situamos ambos ficheros en el directorio D:calculadora(Si no existe, tenemos que crearlo, lógicamente) y luego abrimos una consola de Windows, hacemos lo mismo que hicimos con el Flex, estableciendo las variables de entorno, como muestro en la siguiente imagen: Y con esos comandos se nos generará unos ficheros, los cuales automáticamente podemos integrarlo a un proyecto de Dev-C++ por ejemplo o agregarle más funciones. Ahora ya tenemos lista nuestra sencilla calculadora escrita con ayuda de Bison y Flex. Solo debemos ejecutar Calculadora.exe e ir introduciendo algunas expresiones (En notación polaca claro) ? 1 2 3 a=4 5+; hola=8 12*; g=12 6/; Aquí les dejo la carpeta del proyecto con los archivos tanto de flex como de bison. También les muestro la forma de correr el programa de la calculadora en la siguiente imagen: