Informe 02.docx

  • Uploaded by: Lupaca Frank
  • 0
  • 0
  • June 2020
  • PDF

This document was uploaded by user and they confirmed that they have the permission to share it. If you are author or own the copyright of this book, please report to us by using this DMCA report form. Report DMCA


Overview

Download & View Informe 02.docx as PDF for free.

More details

  • Words: 971
  • Pages: 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. 2. 3. 4. 5.

Definiciones %% reglas %% 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 Código de Usuario: %{ #include <stdio.h> #include <stdlib.h> #include "y.tab.h" int linea=0; %} Definiciones: DIGITO [0-9] LETRA [a-zA-Z] IDENTIFICADOR {LETRA}({LETRA}|{DIGITO})* constEntera {DIGITO}({DIGITO})* /*SIGNO [< <= > >= != ;]*/ Boleano "True"|"False"|"<"|"<="|">"|">="|"!=" Reglas: %% "=" "+" "-" "," ";" "*"

{return(IGUAL);} {return(MAS);} {return(MENOS);} {return(COMA);} {return(PTOCOMA);} {return(POR);}

"/" {return(DIV);} "(" {return(PARENTABIER);} ")" {return(PARENTCERR);} "Dim" {return(DIM);} "As" {return (AS);} "Integer" {return (TIPO);} "End" {return(END);} "Else" {return(ELSE);} "If" {return(IF);} "Then" {return(THEN);} "Select" {return(SELECT);} "Case" {return(CASE);} "While" {return(WHILE);} "Do" {return(DO);} "Loop" {return(LOOP);} "Until" {return(UNTIL);} "Next" {return(NEXT);} "For" {return(FOR);} "Step" {return(STEP);} "To" {return(TO);} {Boleano} {return BOLEANO;} {constEntera} {return (INT);} {IDENTIFICADOR} {return (ID);} "\n" {linea++;} [\t\r\f] {} "" {} . {printf("Error lexico en linea %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.pdfcoke.com/document/319235593/Diseno-de-un-CompiladorOnline-usando-Flex-y-Bison

Related Documents

Informe
April 2020 50
Informe
October 2019 81
Informe
November 2019 73
Informe
November 2019 82
Informe
May 2020 48
Informe
November 2019 25

More Documents from "Javier Perez"

Informe 01.docx
June 2020 8
Informe 02.docx
May 2020 6
Temas-13-y-14.docx
June 2020 6
Ct-g2175 Panasonic Diagrama
December 2019 36
May 2020 12