Sie sind auf Seite 1von 5

UNIVERSIDAD NACIONAL JORGE BASADRE GROHMANN

FACULTAD DE INGENIERÍA
ESCUELA PROFESIONAL DE INGENIERÍA EN INFORMÁTICA Y SISTEMAS

Practica N° 07

BISON con FLEX

Curso : Compiladores y Teoria de Lenguajes

Ciclo de Estudios : 6to ciclo

Grupo de Laboratorio : Laboratorio B

Estudiante : Juan Pablo Apaza Atencio 2015-119015

TACNA – PERÚ
2018
BISON CON FLEX
I. CONTENIDO
En la presente practica se revisará un ejemplo combinado Bison y Flex

II. MATERIALES Y EQUIPO


 Lenguaje de Programación C
 Flex
 Bison
 Ubuntu 16
 Archivo entrada.txt

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;
}
;
%%

void yyerror(char *s)


{
printf("error sintactico %s \n",s);
}

int main(int argc, char **argv)


{
if(argc>1)
yyin=fopen(argv[1],"rt");
else
yyin=fopen("entrada.txt","rt");
yyparse();
return 0;
}
Para ejecutar ambos códigos, primero tenemos que tener en un sola carpeta el archivo
léxico.l, el archivo sintáctico.y, el archivo entrada.txt (Se encuentra en el aula virtual) .
Ahora procederemos a jecutar en forma secuencial:
 bison –d sintáctico.y
 flex léxico.l
 gcc léxico.yy.c sintáctico.tab.c –o test –lfl –lm
Este código no genera un ejecutable llamado test, si no es así tuvo un error en los pasos
anteriores. Si todo salió bien, solo falta ejecutar el archivo test generado, es ese caso sería:
 ./test
Se mostrará el resultado en la pantalla. Es todo.
V. ACTIVIDADES PROPUESTAS
Se van a responder las siguientes preguntas que se harán al ejecutar el código.
1. ¿Qué muestra como resultado al ejecutar todos los comandos mencionados?
Al ejecutar todos los comandos se crear un archivo TEST, y al ejecutar ese archivo
nos retorna un error sintáctico en la celda 1

2. ¿Qué significa las instrucciones token?


Los tokens son símbolos léxico que nos servirán para la etapa de traducción en un
compilador

3. ¿Qué significa las instrucciones type?


Las instrucciones type especifica el tipo de dato que tiene una variable
4. ¿Qué se debe corregir para que se ejecute sin errores en el archivo entrada.txt?
Se debe corregir un error sintáctico, en la primera linea y en la línea 4, está un
paréntesis “)”. Se debe de reemplazar el paréntesis “)” por un corchete cerrado “]”.

CON ERROR SIN ERROR


(1,1)=>[5); (1,1)=>[5];
(1,2)=>[2]; (1,2)=>[2];
(1,3)=>[0]; (1,3)=>[0];
(2,2)=>(2]; (2,2)=>[2];
(4,4)=>[4]; (4,4)=>[4];

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”

Das könnte Ihnen auch gefallen