Sunteți pe pagina 1din 6

UNIVERSIDAD NACIONAL JORGE BASADRE

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

INFORME 02: FLEX

Estudiante: Frank Lupaca Lupaca


Código: 2016-119005
Ciclo: XI
Curso: Compiladores y teoría de lenguajes

Tacna - Perú
2018
INTRODUCCIÓN

La teoría de compiladores es un área muy interesante y compleja. El


implementar un lenguaje de programación y crear un compilador para este
es una tarea muy dura, pero el ámbito de las aplicaciones son muy variadas
y la satisfacción es grande. Los compiladores están muy ligados a las
teorías de autómatas, lenguajes formales y teoría de la computación. El
desarrollo de estos comprende varias partes, el análisis léxico, sintáctico,
semántico, la generación de código intermedio y generación de código final.
Por otro lado el avance de la tecnología respecto a software, ha permitido
que la web sea muy concurrida y por ende las aplicaciones web han ido en
aumento, tal es el caso que para las personas ligadas al ámbito de las
ciencias de la computación se nos sea de gran utilidad acceder a un sitio
web y poder realizar cálculos y pruebas de escritorio de nuestros
algoritmos.
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.
%%
patrón1 {acción1}
patrón2 {acción2}
...
Donde:
patrón: expresión regular
acción: código C con las acciones
Flex lee los ficheros de entrada dados, o la entrada estándar si no se le ha
indicado ningún nombre de fichero, con la descripción de un escáner a generar.
La descripción se encuentra en forma de parejas de expresiones regulares y
código C, denominadas reglas. Flex genera como salida un fichero fuente en C,
‘lex.yy.c’, que define una función ‘yylex()’. Este fichero se compila y se enlaza
con la librería de Flex para producir un ejecutable. Cuando se arranca el fichero
ejecutable, este analiza su entrada en busca de casos de las expresiones
regulares. Siempre que encuentra uno, ejecuta el código C correspondiente.
El fichero de entrada de Flex está compuesto de tres secciones, separadas por
una línea donde aparece únicamente un ‘%%’ en esta:
1. Definiciones
2. %%
3. reglas
4. %%
5. código de usuario
La sección de definiciones
Esta sección del archivo contiene la declaración Lex en C para incluir el
archivo (y.tab.h) producido por Yacc / Bison que contiene las definiciones
de la del fichas de varios caracteres. La primera sección también contiene
definiciones Lex utilizados en las expresiones regulares. En este caso,
DIGIT se define como uno de los símbolos del 0 al 9 y el ID se define para
ser una letra minúscula seguida de cero o más letras o dígitos.
2.10.1.2.

La sección de reglas
La segunda sección del archivo Lex da las expresiones regulares para cada
ficha ser reconocido y una acción correspondiente. Las cadenas de uno o
más dígitos se reconocen como un entero y por lo tanto el valor INT se
devuelve al analizador. Las palabras reservadas del lenguaje son una
cadena de letras en minúscula (mayúscula pueden ser utilizados,
pero deben ser tratados de manera diferente).Los espacios en blanco,
tabuladores y saltos de línea se ignoran. Todos los demás símbolos de
caracteres solo se devuelven como ellos mismos (los lugares de entrada de
escáner todo en el yytextcadena).

La sección de código de usuario


Esta sección suele estar vacía pero puede contener código C asociado con
las acciones.
Analizador Léxico En Flex "/" {return(DIV);}
"(" {return(PARENTABIER);}
Código de Usuario:
")" {return(PARENTCERR);}
%{ "Dim" {return(DIM);}
#include <stdio.h> "As" {return (AS);}
#include <stdlib.h> "Integer" {return (TIPO);}
#include "y.tab.h" "End" {return(END);}
int linea=0; "Else" {return(ELSE);}
%} "If" {return(IF);}
"Then" {return(THEN);}
Definiciones: "Select" {return(SELECT);}
DIGITO [0-9] "Case" {return(CASE);}
LETRA [a-zA-Z] "While" {return(WHILE);}
IDENTIFICADOR "Do" {return(DO);}
{LETRA}({LETRA}|{DIGITO})* "Loop" {return(LOOP);}
constEntera {DIGITO}({DIGITO})* "Until" {return(UNTIL);}
/*SIGNO [< <= > >= != ;]*/ "Next" {return(NEXT);}
Boleano "For" {return(FOR);}
"True"|"False"|"<"|"<="|">"|">="|"!=" "Step" {return(STEP);}
"To" {return(TO);}
Reglas: {Boleano} {return BOLEANO;}
%% {constEntera} {return (INT);}
"=" {return(IGUAL);} {IDENTIFICADOR} {return (ID);}
"+" {return(MAS);} "\n" {linea++;}
"-" {return(MENOS);} [\t\r\f] {}
"," {return(COMA);} "" {}
";" {return(PTOCOMA);} . {printf("Error lexico en linea
"*" {return(POR);} %d",linea);}
%%
TRADUCCIÓN DIRIGIDA POR LA SINTAXIS

Es importante destacar que el analizador sintáctico tiene el control en todo


momento, y el léxico por trozos, a petición del sintáctico. En otras palabras,
el sintáctico va construyendo su árbol poco a poco (de izquierda derecha), y
cada vez que necesita un nuevo componente léxico para continuar dicha
construcción, se lo solicita al lexicográfico; éste lee nuevos caracteres del
fichero de entrada hasta conformar un nuevo componente y, una vez
obtenido, se lo suministra al sintáctico, quien continúa la construcción del
árbol hasta que vuelve a necesitar otro componente, momento en que se
reinicia el proceso. Este mecanismo finaliza cuando se ha obtenido el árbol
y ya no hay más componentes en el fichero de entrada, o bien cuando es
imposible construir el árbol. Estos tan sólo el principio de lo que se
denomina compilación dirigida por sintaxis (ver figura 5): es aquél
mecanismo de compilación en el que el control lo lleva el analizador
sintáctico, y todas las demás fases están sometidas a él.

TRADUCCIÓN DIRIGIDA POR LA SINTAXIS . (GALVEZ ROJAS & MORA MATA, 2005)

Desarrollo
Lo desarrolle en Ubuntu (Linux) poniendo en el terminal los siguientes
comandos:
1. sudo apt-get update
2. sudo apt-get install flex
3. sudo apt-get install bison
Para luego crear el código básico en un documento de texto terminando con .l
Para que resulte de la siguiente manera en el terminal:

Bibliografía:
 Aho, A., Lam, M., Sethi, R., & Ullman, J. (1998).
Compiladores: Principios, Tecnicas y Herramientas 2 Edicion.
 https://es.scribd.com/document/319235593/Diseno-de-un-Compilador-
Online-usando-Flex-y-Bison

S-ar putea să vă placă și