Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Flexybison 160621204415
Flexybison 160621204415
Visualizador de árboles sintácticos partiendo de los ficheros con la gramática y el parse pedidos en
VASt exe
la Práctica [versión 2.0, Windows]
Visualizador de árboles sintácticos partiendo de los ficheros con la gramática y el parse pedidos en
VASt C++
la Práctica [versión 1.0, Linux]
• SQL: son las siglas de Structured Query Language (Lenguaje Estructurado de Consulta). Su función
principal es actuar sobre una base de datos y extraer su contenido para almacenar, introducir,
actualizar, eliminar y consultar información. Suele ser usado en la construcción de páginas web y
aplicaciones de escritorio.
• PHP: es un acrónimo recursivo que significa PHP Hypertext Pre-processor. Es utilizado para el
desarrollo de sitios online, ya que es posible combinarlo con HTML. Es un lenguaje de lado del servidor,
es decir, que primero se ejecuta en éste y posteriormente regeresa al navegador del usuario como
resultado una página web.
• C: lenguaje orientado principalmente a los sistemas operativos. Se puede crear un software para
sistemas operativos como Windows o Linux, también es muy usado en robótica para crear simuladores o
para experimentos informáticos, físicos, matemáticos, etc.
• Java: es uno de los lenguajes favoritos ya que permite construir programas que gestionan la memoria
del dispositivo donde reside la aplicación, como por ejemplo herramientas, juegos y apps. Es utilizado en
dispositivos móviles, aparatos de televisión y computadores personales. Suele ser asociado a Java Script,
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
que es otro tipo de lenguaje para crear pequeños programas encargados de realizar acciones dentro de
páginas webs, como por ejemplo crear efectos especiales o para definir la interactividad con los
usuarios.
Reseña Histórica
Los primeros lenguajes de programación surgieron de la idea de Charles Babagge, la cual se le ocurrió a
este hombre a mediados del siglo XIX. Era un profesor matemático de la universidad de Cambridge e
inventor inglés, que al principio del siglo XIX predijo muchas de las teorías en que se basan los actuales
ordenadores. Consistía en lo que él denominaba la maquina analítica, pero que por motivos técnicos no
pudo construirse hasta mediados del siglo XX. Con él colaboro Ada Lovedby, la cual es considerada como
la primera programadora de la historia, pues realizo programas para aquélla supuesta máquina de
Babagge, en tarjetas perforadas. Como la maquina no llego nunca a construirse, los programas de Ada,
lógicamente, tampoco llegaron a ejecutarse, pero si suponen un punto de partida de la programación,
sobre todo si observamos que en cuanto se empezó a programar, los programadores utilizaron
las técnicas diseñadas por Charles Babagge, y Ada, que consistían entre otras, en la programación
mediante tarjetas perforadas. A pesar de ello, Ada ha permanecido como la primera programadora de la
historia. Se dice por tanto que estos dos genios de antaño, se adelantaron un siglo a su época, lo cual
describe la inteligencia de la que se hallaban dotados.
En 1823 el gobierno Británico lo apoyo para crear el proyecto de una máquina de diferencias, un
dispositivo mecánico para efectuar sumas repetidas. Pero Babagge se dedicó al proyecto de la máquina
analítica, abandonando la máquina de diferencias, que se pudiera programar con tarjetas perforadas,
gracias a la creación de Charles Jacquard (francés). Este hombre era un fabricante de tejidos y había
creado un telar que podía reproducir automáticamente patrones de tejidos, leyendo
la información codificada en patrones de agujeros perforados en tarjetas de papel rígido. Entonces
Babagge intento crear la máquina que se pudiera programar con tarjetas perforadas para efectuar
cualquier cálculo con una precisión de 20 dígitos. Pero la tecnología de la época no bastaba para hacer
realidad sus ideas. Si bien las ideas de Babagge no llegaron a materializarse de forma definitiva, su
contribución es decisiva, ya que los ordenadores actuales responden a un esquema análogo al de la
máquina analítica. En su diseño, la máquina constaba de cinco unidades básicas:
Charles Babbage, conocido como el "padre de la informática" no pudo completar en aquella época
la construcción del computador que había soñado, dado que faltaba algo fundamental: la electrónica. El
camino señalado de Babbage, no fue nunca abandonado y siguiéndolo, se construyeron los primeros
computadores.
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
Cuando surgió el primer ordenador, el famoso ENIAC (Electronic Numerical Integrator And Calculator),
su programación se basaba en componentes físicos, o sea, que se programaba, cambiando directamente
el Hardware de la máquina, exactamente lo que sé hacia era cambiar cables de sitio para conseguir así la
programación de la máquina. La entrada y salida de datos se realizaba mediante tarjetas perforadas.
Cualquier programa escrito en un lenguaje de programación de alto nivel debe ser traducido a
código objeto antes de que pueda ser ejecutado, para que todos los programadores que usen tal
lenguaje usen un compilador o un intérprete. Por esto, los compiladores son muy importantes para
los programadores. Cualquier mejora hecha a un compilador lleva a un gran número de programas
mejorados.
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 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. Es compatible al 100% con Yacc, 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. Todas la gramáticas escritas apropiadamente para Yacc deberían funcionar con Bison sin
ningún cambio. Usándolo junto a Flex esta herramienta permite construir compiladores de lenguajes.
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
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
DIGITO [0-9]
NUMERO {DIGITO}+("."{DIGITO}+)?
%%
/***************
Reglas
*****************/
%%
int main(int argc,char *argv[])
{
if ((yyin = fopen(argv[1], "rt")) == NULL)
{
printf("\nNo se puede abrir el archivo: %s\n", argv[1]);
}
else
{
//yylex();
yyparse();
}
fclose(yyin);
return 0;
}
Lo único diferente con respecto al ejemplo que mostré en el post de configuración de flex es que
ahora no invocaremos a la función yylex() sino que ahora se invocará a la función yyparse().
Adicionalmente vemos que en la cabecera se invoca a la librería "parser.h" la cuál debe contener las
deficiones para cada toquen de nuestra gramática.
Arhcivo parser.h
#ifndef YYSTYPE
#define YYSTYPE int
#endif
#define PRENTERO 257
#define PRREAL 258
#define PRBOOLEANO 259
#define PRCARACTER 260
#define PRSI 261
#define PRSINO 262
#define PRSINOSI 263
#define PRENTONCES 264
#define PRFINSI 265
#define PRPARA 266
#define PRFINPARA 267
#define PRMIENTRAS 268
#define PRHACER 269
#define PRFINMIENTRAS 270
#define PRFINHACERMIENTRAS 271
#define PRFUNCION 272
#define PRFINFUNCION 273
#define PRRETORNA 274
#define PRSINVALOR 275
#define PRESTRUCTURA 276
#define MAS 277
#define MENOS 278
#define POR 279
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
%%
inicio : funcion
| constante
| estructura
;
funcion : PRFUNCION j
j : PRENTERO k
| PRREAL k
| PRBOOLEANO k
| PRCARACTER k
| PRSINVALOR k
k : IDENT PARIZ l
l : kl
kl : declaracion l
| ll
ll : PARDE sentencia m
m : PRRETORNA IDENT p
| p
p : PRFINFUNCION funcion
| PRFINFUNCION
;
| REAL
| ENTERO
| BOOLEANO
;
declaracion : PRENTERO c
| PRREAL c
| PRBOOLEANO c
| PRCARACTER c
c : IDENT PCOMA
;
si : PRSI PARIZ sh
sh : comparacion shh
| oplogica shh
shh : PARDE PRENTONCES sentencia h
h : PRFINSI
| PRSINOSI PARIZ comparacion PARDE PRENTONCES sentencia i
i : h
| z
z : PRSINO PRENTONCES sentencia PRFINSI
;
| declaracion
| asignacion sentencia
| asignacion
| mientras sentencia
| mientras
| hacermientras sentencia
| hacermientras
| para sentencia
| para
| si sentencia
| si
| entrada sentencia
| entrada
| salida sentencia
| salida
;
uu : tt
|
rr : comparacion
;
Con esos tres archivos ya casi estamos listos. También dentro del directorio donde están trabajando
(Directorio en donde se encuentra el archivo de flex y bison) deben crear el siguiente archivo:
Archivo error.c
void yyerror(char * msg)
{
printf ("%s\n", msg);
}
Ahora solo nos queda compilar los scripts de flex y bison del siguiente modo:
Ahora si usan DevC++ solo deben crear un proyecto y añadir todos los archivos ahí presentes.
Observen además que para correr el programa no se nos pedirá que ingresemos el nombre de del
archivo sino que lo debemos mandar como parámetro, en otras palabras el archivo generado no se
debe ejecutar con doble clic sino por medio de la consola del windows. Creo que una imágen vale
más que mil palabras:
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA