SlideShare una empresa de Scribd logo
1 de 17
Descargar para leer sin conexión
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
Nombre: Cristian Cuaspa
Curso: 5to nivel
Fecha:21 de junio de 2016
Herramientas para la construcción de procesadores de lenguaje.
Herramientas para la construcción de Procesadores de LenguajesMás información:
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)
Aplicación de los lenguajes:
• 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:
Unidad de entrada, para introducir datos e instrucciones.
Memoria, donde se almacenaban datos y resultados intermedios.
Unidad de control, para regular la secuencia de ejecución de las operaciones.
Unidad Aritmético-Lógica, que efectúa las operaciones.
Unidad de salida, encargada de comunicar al exterior los resultados.
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.
Diseño y construcción de un compilador.
En informática, un compilador es un programa informático que transforma código fuente escrito en
un lenguaje de programación o lenguaje informático (el lenguaje fuente), en otro lenguaje
informático (el lenguaje objetivo, estando a menudo en formato binario conocido como código
objeto). La razón más común para querer transformar código fuente es crear un
programa ejecutable.
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.
Los compiladores son programas grandes y complejos, pero el análisis sistemático y la
investigación de los científicos informáticos ha llevado a un entendimiento más claro de la
construcción de los compiladores y una gran cantidad de teoría ha sido desarrollada sobre ellos. La
investigación en la construcción de compiladores ha conducido a herramientas que hacen mucho
más fácil crear compiladores, de modo que los estudiantes de informática de hoy en día pueden
crear sus propios lenguajes pequeños y desarrollar un compilador simple en pocas semanas.
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
Ejemplo Flex y Bison
Vamos a 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}*/
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
DIGITO [0-9]
NUMERO {DIGITO}+("."{DIGITO}+)?
%%
/***************
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);}
%%
/*
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
Ejemplos Flex y Bison
Archivo para FLEX
%{
#include <stdio.h>
#include <conio.h>
#include "parser.h"
%}
%option noyywrap
%option yylineno
letra [a-zA-Z]
digito [0-9]
binario [0-1]
ignora " "|t|n
operarit *|+|-|/
operlog &|$
comparador <|>|<=|>=|==|!=
%%
{ignora}+ {;}
"Entero" {printf("Palabra reservada para tipo de dato
enteron");return PRENTERO;}
"Real" {printf("Palabra reservada para tipo de dato
realn");return PRREAL;}
"Booleano" {printf("Palabra reservada para tipo de dato
booleanon");return PRBOOLEANO;}
"Caracter" {printf("Palabra reservada para tipo de dato
caractern");return PRCARACTER;}
"Si" {printf("Palabra reservada para condicionaln");return
PRSI;}
"Sino" {printf("Palabra reservada para otro
condicionaln");return PRSINO;}
"SinoSi" {printf("Palabra reservada para definir condicionales
secundariasn");return PRSINOSI;}
"Entonces" {printf("Palabra reservada para definir accion a
realizarn");return PRENTONCES;}
"FinSi" {printf("Palabra reservada finalizar
condicionaln");return PRFINSI;}
"Para" {printf("Palabra reservada para bucle de tipo
Paran");return PRPARA;}
"FinPara" {printf("Palabra reservada para fin de bucle de
tipo Paran");return PRFINPARA;}
"Mientras" {printf("Palabra reservada para bucle de tipo
Mientrasn");return PRMIENTRAS;}
"Hacer" {printf("Palabra reservada para indicar que se
empieza algon");return PRHACER;}
"FinMientras" {printf("Palabra reservada fin de bucle de tipo
Mientrasn");return PRFINMIENTRAS;}
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
"FinHacerMientras" {printf("Palabra reservada para indicar fin de
bucle Hacer-Mientrasn");return PRFINHACERMIENTRAS;}
"Funcion" {printf("Palabra reservada para declaracion de
funcionesn");return PRFUNCION;}
"Estructura" {printf("Palabra reservada para declaracion de
estructurasn");return PRESTRUCTURA;}
"FinFuncion" {printf("Palabra reservada para finalizar
funcionn");return PRFINFUNCION;}
"Retorna" {printf("Palabra reservada para retorno de
funcionn");return PRRETORNA;}
"SinValor" {printf("Palabra reservada para funcion sin valor
de retornon");return PRSINVALOR;}
"Definir" {printf("Palabra reservada para definir
funcionesn");return PRDEFINIR;}
"Constante" {printf("Palabra reservada para definir
constantesn");return PRCONSTANTE;}
"Entrada" {printf("Palabra reservada para definir
entradasn");return PRENTRADA;}
"Salida" {printf("Palabra reservada para definir
salidasn");return PRSALIDA;}
{letra}({letra}|{digito})* {printf("Identificadorn");return IDENT;}
{letra}+ {printf("Caractern");return CARACTER;}
{binario}+ {printf("Binarion");return BOOLEANO;}
{digito}+ {printf("Enteron");return ENTERO;}
{digito}+"."{digito}+ {printf("Realn");return REAL;}
{comparador} {printf("Comparadorn");return COMPARADOR;}
":=" {printf("Asignadorn");return ASIG;}
";" {printf("Fin sentencian");return PCOMA;}
"!=" {printf("Diferenten");return DIF;}
"," {printf("Coman");return COMA;}
"==" {printf("Igualn");return IGUAL;}
"." {printf("Punton");return PTO;}
">=" {printf("Signo mayor-igualn");return MAIGU;}
"<=" {printf("Signo menor-igualn");return MEIGU;}
"(" {printf("(n");return PARIZ;}
")" {printf(")n");return PARDE;}
">" {printf(">n");return MAYOR;}
"<" {printf("<n");return MENOR;}
"{" {printf("{n");return LLIZ;}
"}" {printf("}n");return LLDE;}
"+" {printf("+n");return MAS;}
"-" {printf("-n");return MENOS;}
"*" {printf("*n");return POR;}
"/" {printf("/n");return ENTRE;}
"&" {printf("&n");return YLOG;}
"$" {printf("Operador Logicon");return OLOG;}
. {printf("ERROR LEXICO EN LINEA %d n",yylineno);}
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
%%
int main(int argc,char *argv[])
{
if ((yyin = fopen(argv[1], "rt")) == NULL)
{
printf("nNo se puede abrir el archivo: %sn", 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
#define ENTRE 280
#define OLOG 281
#define YLOG 282
#define PRDEFINIR 283
#define PRCONSTANTE 284
#define IDENT 285
#define ENTERO 286
#define REAL 287
#define BOOLEANO 288
#define CARACTER 289
#define COMPARADOR 290
#define ASIG 291
#define PCOMA 292
#define DIF 293
#define COMA 294
#define IGUAL 295
#define PTO 296
#define MAIGU 297
#define MEIGU 298
#define PARIZ 299
#define PARDE 300
#define MAYOR 301
#define MENOR 302
#define LLIZ 303
#define LLDE 304
#define PRSALIDA 305
#define PRENTRADA 306
extern YYSTYPE yylval;
Cone esto ahora debemos definir el archivo para bison.
Archivo para Bison:
%{
int yystopparser=0;
%}
%token PRENTERO PRREAL PRBOOLEANO PRCARACTER PRSI PRSINO PRSINOSI PRENTONCES
PRFINSI PRPARA
PRFINPARA PRMIENTRAS PRHACER PRFINMIENTRAS PRFINHACERMIENTRAS PRFUNCION
PRFINFUNCION PRRETORNA PRSINVALOR PRESTRUCTURA MAS MENOS POR ENTRE OLOG YLOG
PRDEFINIR PRCONSTANTE IDENT ENTERO REAL BOOLEANO CARACTER COMPARADOR ASIG PCOMA
DIF COMA IGUAL PTO
MAIGU MEIGU PARIZ PARDE MAYOR MENOR LLIZ LLDE PRSALIDA PRENTRADA
%start inicio
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
%%
inicio : funcion
| constante
| estructura
;
estructura : PRESTRUCTURA IDENT LLIZ n
n : declaracion n
| declaracion nn
nn : LLDE IDENT PCOMA o
o : estructura
| constante
| funcion
;
constante : PRDEFINIR PRCONSTANTE e
e : PRENTERO IDENT f
| PRREAL IDENT f
| PRBOOLEANO IDENT f
f : ASIG g
g : ENTERO PCOMA y
| REAL PCOMA y
| BOOLEANO PCOMA y
y : constante
| estructura
| funcion
;
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
;
comparacion : IDENT COMPARADOR b
b : IDENT
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
| REAL
| ENTERO
| BOOLEANO
;
declaracion : PRENTERO c
| PRREAL c
| PRBOOLEANO c
| PRCARACTER c
c : IDENT PCOMA
;
asignacion : IDENT ASIG a
a : IDENT PCOMA
| ENTERO PCOMA
| REAL PCOMA
| BOOLEANO PCOMA
| oparitmetica PCOMA
;
mientras : PRMIENTRAS PARIZ x
x : comparacion y
| oplogica y
y : PARDE sentencia PRFINMIENTRAS
;
hacermientras : PRHACER sentencia PRFINHACERMIENTRAS PRMIENTRAS PARIZ cc
cc : comparacion PARDE
| oplogica PARDE
;
para : PRPARA PARIZ asignacion comparacion PCOMA asignacion PARIZ sentencia
PRFINPARA
;
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
;
sentencia : declaracion sentencia
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
| declaracion
| asignacion sentencia
| asignacion
| mientras sentencia
| mientras
| hacermientras sentencia
| hacermientras
| para sentencia
| para
| si sentencia
| si
| entrada sentencia
| entrada
| salida sentencia
| salida
;
salida : PRSALIDA ASIG LLIZ LLDE PCOMA
;
entrada : PRENTRADA IDENT PCOMA
;
oparitmetica : MAS PARIZ q
| POR PARIZ q
| suma
| producto
q : oparitmetica PARDE r
suma : MAS r t
producto : POR r t
t : r u
u : t
|
r : IDENT
| REAL
| ENTERO
;
oplogica : OLOG PARIZ qq
| YLOG PARIZ qq
| yy
| oo
qq : oplogica PARDE rr
oo : OLOG rr tt
yy : YLOG rr tt
tt : rr uu
PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
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 ("%sn", msg);
}
Ahora solo nos queda compilar los scripts de flex y bison del siguiente modo:
Con esto nuestro directorio de trabajo debería quedar algo así:
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

Más contenido relacionado

La actualidad más candente

Plantilla writer02bvbsoloindices
Plantilla writer02bvbsoloindicesPlantilla writer02bvbsoloindices
Plantilla writer02bvbsoloindiceswashington1987
 
Historia de la programacion
Historia de la programacionHistoria de la programacion
Historia de la programacionTensor
 
Cap4
Cap4Cap4
Cap4CJAO
 
Flex y Bison
Flex y BisonFlex y Bison
Flex y BisonGuiru Xd
 
Evolucion historica del lenguaje de programacion
Evolucion historica del lenguaje de programacionEvolucion historica del lenguaje de programacion
Evolucion historica del lenguaje de programacionSergio Maidana
 
Trabajo compiladores ivan bolaños
Trabajo compiladores ivan bolañosTrabajo compiladores ivan bolaños
Trabajo compiladores ivan bolañosIván Bolaños
 
Arquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosArquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosDIEGO BAROJA
 
Herramientas flex y bison
Herramientas flex y bisonHerramientas flex y bison
Herramientas flex y bisonalexisdario
 
Fundamentos y Lógica de Programación
Fundamentos y Lógica de ProgramaciónFundamentos y Lógica de Programación
Fundamentos y Lógica de ProgramaciónTensor
 
Tutorial Flex y Bison
Tutorial Flex y BisonTutorial Flex y Bison
Tutorial Flex y BisonShirlid .n
 
Ensayo de programacion c
Ensayo de programacion cEnsayo de programacion c
Ensayo de programacion cChavez Raul
 
Presentación trabajo programación
Presentación trabajo programaciónPresentación trabajo programación
Presentación trabajo programaciónionurrutia
 
Compiladores flex bison
Compiladores flex bisonCompiladores flex bison
Compiladores flex bisonPancho Yepez
 

La actualidad más candente (20)

Flexybison
FlexybisonFlexybison
Flexybison
 
Plantilla writer02bvbsoloindices
Plantilla writer02bvbsoloindicesPlantilla writer02bvbsoloindices
Plantilla writer02bvbsoloindices
 
Historia de la programacion
Historia de la programacionHistoria de la programacion
Historia de la programacion
 
Cap4
Cap4Cap4
Cap4
 
Compiladores
CompiladoresCompiladores
Compiladores
 
Flex y Bison
Flex y BisonFlex y Bison
Flex y Bison
 
Bootstrapping
BootstrappingBootstrapping
Bootstrapping
 
Evolucion historica del lenguaje de programacion
Evolucion historica del lenguaje de programacionEvolucion historica del lenguaje de programacion
Evolucion historica del lenguaje de programacion
 
Trabajo compiladores ivan bolaños
Trabajo compiladores ivan bolañosTrabajo compiladores ivan bolaños
Trabajo compiladores ivan bolaños
 
Arquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzadosArquitecturas de ordenadores y compiladores cruzados
Arquitecturas de ordenadores y compiladores cruzados
 
Flex ybison
Flex ybisonFlex ybison
Flex ybison
 
Flex y bison
Flex y  bisonFlex y  bison
Flex y bison
 
Flex y Bison
Flex y BisonFlex y Bison
Flex y Bison
 
Herramientas flex y bison
Herramientas flex y bisonHerramientas flex y bison
Herramientas flex y bison
 
Fundamentos y Lógica de Programación
Fundamentos y Lógica de ProgramaciónFundamentos y Lógica de Programación
Fundamentos y Lógica de Programación
 
Tutorial Flex y Bison
Tutorial Flex y BisonTutorial Flex y Bison
Tutorial Flex y Bison
 
Ensayo de programacion c
Ensayo de programacion cEnsayo de programacion c
Ensayo de programacion c
 
Presentación trabajo programación
Presentación trabajo programaciónPresentación trabajo programación
Presentación trabajo programación
 
Compiladores flex bison
Compiladores flex bisonCompiladores flex bison
Compiladores flex bison
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 

Similar a Herramientas Procesadores Lenguaje

Similar a Herramientas Procesadores Lenguaje (20)

Edison caicedo
Edison caicedoEdison caicedo
Edison caicedo
 
Flex y Bison
Flex y Bison Flex y Bison
Flex y Bison
 
Flex y Bison
Flex y BisonFlex y Bison
Flex y Bison
 
INFORMATICA TRABAJO.docx
INFORMATICA TRABAJO.docxINFORMATICA TRABAJO.docx
INFORMATICA TRABAJO.docx
 
FLEX Y BISON
FLEX Y BISONFLEX Y BISON
FLEX Y BISON
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
684551811-Computacion-2-Unidad-1.pdf
684551811-Computacion-2-Unidad-1.pdf684551811-Computacion-2-Unidad-1.pdf
684551811-Computacion-2-Unidad-1.pdf
 
Resolución de problemas de algoritmo.
Resolución de problemas de algoritmo.Resolución de problemas de algoritmo.
Resolución de problemas de algoritmo.
 
Colegio bilingüe maría auxiliadora
Colegio bilingüe maría auxiliadoraColegio bilingüe maría auxiliadora
Colegio bilingüe maría auxiliadora
 
Lenguajes de programación saia
Lenguajes de programación saiaLenguajes de programación saia
Lenguajes de programación saia
 
Flex y bison héctor espinosa
Flex y bison   héctor espinosaFlex y bison   héctor espinosa
Flex y bison héctor espinosa
 
Fyb
FybFyb
Fyb
 
Cuaderno2
Cuaderno2Cuaderno2
Cuaderno2
 
Introducción a la programación
Introducción a la programaciónIntroducción a la programación
Introducción a la programación
 
Programación de computadores
Programación de computadoresProgramación de computadores
Programación de computadores
 
Bison y flex
Bison y flexBison y flex
Bison y flex
 
Preguntas y Respuestas
Preguntas y RespuestasPreguntas y Respuestas
Preguntas y Respuestas
 
Prueba 222
Prueba 222Prueba 222
Prueba 222
 
Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
lenguaje de Programacion
lenguaje de Programacionlenguaje de Programacion
lenguaje de Programacion
 

Más de Der Col Bold

Más de Der Col Bold (6)

Flex y bison
Flex y bisonFlex y bison
Flex y bison
 
Phyton
PhytonPhyton
Phyton
 
Dreamweaver
DreamweaverDreamweaver
Dreamweaver
 
Instalacion emu8086
Instalacion emu8086Instalacion emu8086
Instalacion emu8086
 
Decompiladores
DecompiladoresDecompiladores
Decompiladores
 
Instalacion de flash
Instalacion de flashInstalacion de flash
Instalacion de flash
 

Último

Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTEREMMAFLORESCARMONA
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...ITeC Instituto Tecnología Construcción
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionarmando_cardenas
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOSelenaCoronadoHuaman
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3AlexysCaytanoMelndez1
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfmasogeis
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Opentix
 

Último (7)

Introducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTERIntroducción a Funciones LENGUAJE DART FLUTTER
Introducción a Funciones LENGUAJE DART FLUTTER
 
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
BREEAM ES Urbanismo como herramienta para un planeamiento sostenible - Miguel...
 
Unidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacionUnidad_3_T1_AutomatasFinitos presentacion
Unidad_3_T1_AutomatasFinitos presentacion
 
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLOPARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
PARTES DEL TECLADO Y SUS FUNCIONES - EJEMPLO
 
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3Segmentacion Segmantica_Modelos UNET and DEEPLABV3
Segmentacion Segmantica_Modelos UNET and DEEPLABV3
 
Manual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdfManual de Usuario APPs_AppInventor-2023.pdf
Manual de Usuario APPs_AppInventor-2023.pdf
 
Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200Caso de éxito de Hervian con el ERP Sage 200
Caso de éxito de Hervian con el ERP Sage 200
 

Herramientas Procesadores Lenguaje

  • 1. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA Nombre: Cristian Cuaspa Curso: 5to nivel Fecha:21 de junio de 2016 Herramientas para la construcción de procesadores de lenguaje. Herramientas para la construcción de Procesadores de LenguajesMás información: 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) Aplicación de los lenguajes: • 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,
  • 2. 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: Unidad de entrada, para introducir datos e instrucciones. Memoria, donde se almacenaban datos y resultados intermedios. Unidad de control, para regular la secuencia de ejecución de las operaciones. Unidad Aritmético-Lógica, que efectúa las operaciones. Unidad de salida, encargada de comunicar al exterior los resultados. 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.
  • 3. 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. Diseño y construcción de un compilador. En informática, un compilador es un programa informático que transforma código fuente escrito en un lenguaje de programación o lenguaje informático (el lenguaje fuente), en otro lenguaje informático (el lenguaje objetivo, estando a menudo en formato binario conocido como código objeto). La razón más común para querer transformar código fuente es crear un programa ejecutable. 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. Los compiladores son programas grandes y complejos, pero el análisis sistemático y la investigación de los científicos informáticos ha llevado a un entendimiento más claro de la construcción de los compiladores y una gran cantidad de teoría ha sido desarrollada sobre ellos. La investigación en la construcción de compiladores ha conducido a herramientas que hacen mucho más fácil crear compiladores, de modo que los estudiantes de informática de hoy en día pueden crear sus propios lenguajes pequeños y desarrollar un compilador simple en pocas semanas. 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.
  • 4. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
  • 5. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
  • 6. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA
  • 7. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA Ejemplo Flex y Bison Vamos a 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}*/
  • 8. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA DIGITO [0-9] NUMERO {DIGITO}+("."{DIGITO}+)? %% /*************** 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);} %% /*
  • 9. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA Ejemplos Flex y Bison Archivo para FLEX %{ #include <stdio.h> #include <conio.h> #include "parser.h" %} %option noyywrap %option yylineno letra [a-zA-Z] digito [0-9] binario [0-1] ignora " "|t|n operarit *|+|-|/ operlog &|$ comparador <|>|<=|>=|==|!= %% {ignora}+ {;} "Entero" {printf("Palabra reservada para tipo de dato enteron");return PRENTERO;} "Real" {printf("Palabra reservada para tipo de dato realn");return PRREAL;} "Booleano" {printf("Palabra reservada para tipo de dato booleanon");return PRBOOLEANO;} "Caracter" {printf("Palabra reservada para tipo de dato caractern");return PRCARACTER;} "Si" {printf("Palabra reservada para condicionaln");return PRSI;} "Sino" {printf("Palabra reservada para otro condicionaln");return PRSINO;} "SinoSi" {printf("Palabra reservada para definir condicionales secundariasn");return PRSINOSI;} "Entonces" {printf("Palabra reservada para definir accion a realizarn");return PRENTONCES;} "FinSi" {printf("Palabra reservada finalizar condicionaln");return PRFINSI;} "Para" {printf("Palabra reservada para bucle de tipo Paran");return PRPARA;} "FinPara" {printf("Palabra reservada para fin de bucle de tipo Paran");return PRFINPARA;} "Mientras" {printf("Palabra reservada para bucle de tipo Mientrasn");return PRMIENTRAS;} "Hacer" {printf("Palabra reservada para indicar que se empieza algon");return PRHACER;} "FinMientras" {printf("Palabra reservada fin de bucle de tipo Mientrasn");return PRFINMIENTRAS;}
  • 10. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA "FinHacerMientras" {printf("Palabra reservada para indicar fin de bucle Hacer-Mientrasn");return PRFINHACERMIENTRAS;} "Funcion" {printf("Palabra reservada para declaracion de funcionesn");return PRFUNCION;} "Estructura" {printf("Palabra reservada para declaracion de estructurasn");return PRESTRUCTURA;} "FinFuncion" {printf("Palabra reservada para finalizar funcionn");return PRFINFUNCION;} "Retorna" {printf("Palabra reservada para retorno de funcionn");return PRRETORNA;} "SinValor" {printf("Palabra reservada para funcion sin valor de retornon");return PRSINVALOR;} "Definir" {printf("Palabra reservada para definir funcionesn");return PRDEFINIR;} "Constante" {printf("Palabra reservada para definir constantesn");return PRCONSTANTE;} "Entrada" {printf("Palabra reservada para definir entradasn");return PRENTRADA;} "Salida" {printf("Palabra reservada para definir salidasn");return PRSALIDA;} {letra}({letra}|{digito})* {printf("Identificadorn");return IDENT;} {letra}+ {printf("Caractern");return CARACTER;} {binario}+ {printf("Binarion");return BOOLEANO;} {digito}+ {printf("Enteron");return ENTERO;} {digito}+"."{digito}+ {printf("Realn");return REAL;} {comparador} {printf("Comparadorn");return COMPARADOR;} ":=" {printf("Asignadorn");return ASIG;} ";" {printf("Fin sentencian");return PCOMA;} "!=" {printf("Diferenten");return DIF;} "," {printf("Coman");return COMA;} "==" {printf("Igualn");return IGUAL;} "." {printf("Punton");return PTO;} ">=" {printf("Signo mayor-igualn");return MAIGU;} "<=" {printf("Signo menor-igualn");return MEIGU;} "(" {printf("(n");return PARIZ;} ")" {printf(")n");return PARDE;} ">" {printf(">n");return MAYOR;} "<" {printf("<n");return MENOR;} "{" {printf("{n");return LLIZ;} "}" {printf("}n");return LLDE;} "+" {printf("+n");return MAS;} "-" {printf("-n");return MENOS;} "*" {printf("*n");return POR;} "/" {printf("/n");return ENTRE;} "&" {printf("&n");return YLOG;} "$" {printf("Operador Logicon");return OLOG;} . {printf("ERROR LEXICO EN LINEA %d n",yylineno);}
  • 11. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA %% int main(int argc,char *argv[]) { if ((yyin = fopen(argv[1], "rt")) == NULL) { printf("nNo se puede abrir el archivo: %sn", 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
  • 12. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA #define ENTRE 280 #define OLOG 281 #define YLOG 282 #define PRDEFINIR 283 #define PRCONSTANTE 284 #define IDENT 285 #define ENTERO 286 #define REAL 287 #define BOOLEANO 288 #define CARACTER 289 #define COMPARADOR 290 #define ASIG 291 #define PCOMA 292 #define DIF 293 #define COMA 294 #define IGUAL 295 #define PTO 296 #define MAIGU 297 #define MEIGU 298 #define PARIZ 299 #define PARDE 300 #define MAYOR 301 #define MENOR 302 #define LLIZ 303 #define LLDE 304 #define PRSALIDA 305 #define PRENTRADA 306 extern YYSTYPE yylval; Cone esto ahora debemos definir el archivo para bison. Archivo para Bison: %{ int yystopparser=0; %} %token PRENTERO PRREAL PRBOOLEANO PRCARACTER PRSI PRSINO PRSINOSI PRENTONCES PRFINSI PRPARA PRFINPARA PRMIENTRAS PRHACER PRFINMIENTRAS PRFINHACERMIENTRAS PRFUNCION PRFINFUNCION PRRETORNA PRSINVALOR PRESTRUCTURA MAS MENOS POR ENTRE OLOG YLOG PRDEFINIR PRCONSTANTE IDENT ENTERO REAL BOOLEANO CARACTER COMPARADOR ASIG PCOMA DIF COMA IGUAL PTO MAIGU MEIGU PARIZ PARDE MAYOR MENOR LLIZ LLDE PRSALIDA PRENTRADA %start inicio
  • 13. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA %% inicio : funcion | constante | estructura ; estructura : PRESTRUCTURA IDENT LLIZ n n : declaracion n | declaracion nn nn : LLDE IDENT PCOMA o o : estructura | constante | funcion ; constante : PRDEFINIR PRCONSTANTE e e : PRENTERO IDENT f | PRREAL IDENT f | PRBOOLEANO IDENT f f : ASIG g g : ENTERO PCOMA y | REAL PCOMA y | BOOLEANO PCOMA y y : constante | estructura | funcion ; 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 ; comparacion : IDENT COMPARADOR b b : IDENT
  • 14. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA | REAL | ENTERO | BOOLEANO ; declaracion : PRENTERO c | PRREAL c | PRBOOLEANO c | PRCARACTER c c : IDENT PCOMA ; asignacion : IDENT ASIG a a : IDENT PCOMA | ENTERO PCOMA | REAL PCOMA | BOOLEANO PCOMA | oparitmetica PCOMA ; mientras : PRMIENTRAS PARIZ x x : comparacion y | oplogica y y : PARDE sentencia PRFINMIENTRAS ; hacermientras : PRHACER sentencia PRFINHACERMIENTRAS PRMIENTRAS PARIZ cc cc : comparacion PARDE | oplogica PARDE ; para : PRPARA PARIZ asignacion comparacion PCOMA asignacion PARIZ sentencia PRFINPARA ; 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 ; sentencia : declaracion sentencia
  • 15. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA | declaracion | asignacion sentencia | asignacion | mientras sentencia | mientras | hacermientras sentencia | hacermientras | para sentencia | para | si sentencia | si | entrada sentencia | entrada | salida sentencia | salida ; salida : PRSALIDA ASIG LLIZ LLDE PCOMA ; entrada : PRENTRADA IDENT PCOMA ; oparitmetica : MAS PARIZ q | POR PARIZ q | suma | producto q : oparitmetica PARDE r suma : MAS r t producto : POR r t t : r u u : t | r : IDENT | REAL | ENTERO ; oplogica : OLOG PARIZ qq | YLOG PARIZ qq | yy | oo qq : oplogica PARDE rr oo : OLOG rr tt yy : YLOG rr tt tt : rr uu
  • 16. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA 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 ("%sn", msg); } Ahora solo nos queda compilar los scripts de flex y bison del siguiente modo: Con esto nuestro directorio de trabajo debería quedar algo así: 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:
  • 17. PONTIFICIA UNIVERSIDAD CATOLICA DEL ECUADOR SEDE IBARRA