Documentos de Académico
Documentos de Profesional
Documentos de Cultura
FACULTAD DE INGENIERÍA
ESCUELA PROFESIONAL DE INGENIERÍA EN INFORMÁTICA Y SISTEMAS
Practica N° 07
TACNA – PERÚ
2018
BISON CON FLEX
I. CONTENIDO
En la presente practica se revisará un ejemplo combinado Bison y Flex
III. OBJETIVOS
Verificar el entendimiento de expresiones gramaticales
Comprender el uso de Bison
IV. FUNDAMENTO TEORICO
Presentaremos un ejemplo del uso de Bison y Flex.
El primero archivo es léxico.l
%{
#include <stdio.h>
#include <stdlib.h>
#include "sintactico.tab.h"
int linea=0;
%}
DIGITO [0-9]
NUMERO {DIGITO}+("."{DIGITO}+)?
%%
{NUMERO} {yylval.real=atof(yytext); return(NUMERO);}
"(" {return(PARA);}
")" {return(PARC);}
"," {return(COMA);}
"=" {return(IGUAL);}
">" {return(MAYOR);}
"[" {return(CORCHA);}
"]" {return(CORCHC);}
";" {return(PUNTOCOMA);}
"\n" {linea++;}
[\t\r\f] {}
"" {}
. {printf("Error lexico en la linea %d",linea);}
%%
El otro archivo es sintáctico.y
%{
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "string.h"
extern int yylex(void);
extern char *yytext;
extern int linea;
extern FILE *yyin;
void yyerror(char *s);
%}
%union
{
float real;
int numero;
char* texto;
}
%start lista_i;
%token <real> NUMERO
%token PARA
%token PARC
%token COMA
%token IGUAL
%token MAYOR
%token CORCHA
%token CORCHC
%token PUNTOCOMA
%type <texto> celda
%type <real> valor
%%
lista_i: lista_i i;
|i
;
i: instruccion PUNTOCOMA
;
instruccion: celda IGUAL MAYOR valor{printf(" otra vez valor = %1.0f\n",$4);}
;
celda: PARA NUMERO COMA NUMERO PARC{printf (" celda %1.0f,%1.0f",$2,$4);};
;
valor: CORCHA NUMERO CORCHC{printf(" valor=%1.0f\n",$2);
$$=$2;
}
;
%%
5. ¿Las reglas gramaticales que lenguaje nos permite revisar? Mencione un ejemplo
Las reglas gramaticales están en la fase de análisis sintáctico. La utilizamos para
poder revisar si los simboles usados son correctos
6. ¿Cómo manejar los errores que se muestran de test (para cualquier error debe usted
modificar el archivo sintáctico.y para que indique la pantalla el error que se cometió,
como cualquier compilador lo hace)? Implemente su respuesta en el archivo
sintactico2.y (adjúntelo con el informe, para probarlo)
Agregar un atributo en la función yyerror.
VI. ANEXO
1. Archivo de texto “semántico2.txt”