12
CIS-IX-B UNIVERSIDAD NACIONAL DE LOJA ´ Area de la Energ´ ıa las Industrias y los Recursos Naturales No Renovables Carrera de Ingenier ´ ıa en Sistemas “Conversor de Enteros a Binarios” Informe Final oveno B Responsable: Morocho Morocho Priscila Beatriz Docente: Ing.: Henry Paz Loja - Ecuador 2015 1

Compilador Conversor a Binarios

Embed Size (px)

DESCRIPTION

El siguiente compilador lo que va a resolver es la conversión de números enteros a binarios, para que se realice la operación se deberá ingresar el número a convertir seguido de lapalabra reservada convertir, por ejemplo: 256 convertir.Esto lo vamos a realizar en un archivo que posteriormente lo leeremos con nuestro compilador, en el caso de que se ingrese de forma incorrecta saldrán los debidos errores del archivo.

Citation preview

  • CIS-IX-B

    UNIVERSIDADNACIONALDE LOJA

    Area de la Energa las Industrias y los Recursos Naturales No Renovables

    Carrera de Ingeniera en Sistemas

    Conversor de Enteros a Binarios

    Informe FinalNoveno B

    Responsable:

    Morocho Morocho Priscila Beatriz

    Docente:

    Ing.: Henry Paz

    Loja - Ecuador2015

    1

  • Indice general

    A. Compiladores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3B. Descripcion del Problema . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3C. Automata del Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3D. Compilador . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4

    1 . Analizador Lexico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42 . Analizador Sintactico . . . . . . . . . . . . . . . . . . . . . . . . . . . 63 . Resultados . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9

    E. Bibliografa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

    2

  • Conversor de Enteros a Binarios

    A. CompiladoresLos compiladores como los interpretes son programas de gran complejidad. Un compila-

    dor no es mas que un traductor, es decir un programa que nos permite pasar informacion deun lenguaje a otro. Por ejemplo, un compilador de C nos permite traducir ficheros escritosen lenguaje C a un lenguaje legible para la maquina.

    Al final tendremos un unico programa que sera el traductor. Este traductor tendra unanalizador sintactico, y a su vez el analizador sintactico tendra un analizador lexico. [1]

    Analisis lexico:Se encarga de la division de la entrada en componentes lexicos.

    Analisis sintactico:Se encarga de encontrar las estructuras presentes en la entrada.

    Analisis semantico:Se encarga de comprobar que se cumplen las restricciones semanti-cas del lenguaje.

    B. Descripcion del ProblemaEl siguiente compilador lo que va a resolver es la conversion de numeros enteros a bina-

    rios, para que se realice la operacion se debera ingresar el numero a convertir seguido de lapalabra reservada convertir, por ejemplo: 256 convertir.Esto lo vamos a realizar en un archivo txt que posteriormente lo leeremos con nuestro compi-lador, en el caso de que se ingrese de forma incorrecta saldran los debidos errores del archivo.

    Para realizar la codificacion del compilador se necesita de las librerias JFLEX y CUP, almismo se lo realiza con el lenguaje java por medio del IDE Netbeans.

    C. Automata del CompiladorEste compilador tendra la estructura que se muestra a continuacion:

    Figura 1: Automata del conversor

    3

  • D. Compilador1 . Analizador Lexico

    JFlex es un generador de analizador lexico para Java, esta disenado para trabajar juntocon el generador de analizador LALR CUP. Tambien se puede utilizar junto con otros gene-radores de analizadores sintacticos como antlr o como una herramienta independiente.[2]Este generador toma una cadena de caracteres como entrada y lo convierte en una secuenciade tokens, consta de 3 partes principales en su estructura que son: opciones y declaraciones,codigo de usuario y reglas lexicas.

    Opciones y declaraciones: En esta seccion van los paquetes que se van a utilizar,aqu se declaran las directivas y macros, se indica el nombre de la clase, en este casoAnalizadorlexico, se habilita line y column para obtener la lnea y columna de laposicion actual del compilador y cup para realizar la integracion con el archivo cup, enesta seccion van las siguientes lneas de codigo:

    package ejemplocup: Esto nos indica el paquete en el cual nuestra clase seencuentra. import javacup.runtime: Esta importacion permitira hacer la implementacion

    con cup. import java.io.Reader: Io Reader nos permitira leer nuestro archivo en el que

    estara el numero a convertir. %class AnalizadorLexico: Nombre de nuestra clase java. %line: Indica la posicion de la lnea. %column: Indica la posicion de la columna. %cup: Nos permitira realizar la compatibilidad con Cup.

    Figura 2: Opciones y Declaraciones

    4

  • Codigo de usuario: En esta seccion van las directivas, o especificaciones para obtenerla salida deseada. Tambien se encuentra aqui los metodos para encontrar los tokensdeseados.

    Estos 2 metodos van a permitir trabajar con la clase symbol la cual sera de ayudapara que al momento de analizar la expresion nos devuelva los tokens encontrados enla misma.

    Figura 3: Metodos

    En esta seccion especificamos nuestro codigo creando tres variables, la variable salto queindica que se ignorara los saltos de lnea, retorno de carro o salto de linea y retorno decarro, la variable espacio que indica que se ignora lo declarado en la variable anterior,o tabulador y fin de linea y por ultimo una variable entero donde vamos a aceptarenteros del 0 al 9 y todas sus combinaciones.

    Figura 4: Codigo de Usuario

    Reglas lexicas: En esta seccion del archivo JFlex, es donde se definen las reglas paraobtener los tokens de la cadena que se esta leyendo.Donde:

    convertir return symbol(sym.FINAL,yyline,yycolumn); Es el operadorque me permitira hacer la transformacion de un entero decimal a binario, a esteToken se lo llamara FINAL. {Entero} return symbol(sym.ENTERO, new Integer(yytext()),yyline,yycolumn);

    Me indica que se va a ingresar un entero al cual lo vamos a transformor, el nombrepara este token es el de ENTERO.

    En la imagen siguiente se puede ver, lo que se ha explicado:

    5

  • Figura 5: Reglas lexicas

    Aqu tambien encontramos el siguiente codigo que nos lanzara informacion acercade la posicion de algun error encontrado en caso de haberlo.

    Figura 6: Reglas lexicas - captura errores

    2 . Analizador SintacticoLuego de realizar el analizador lexico se realiza el analizador sintactico, para el cual vamos

    a emplear la libreria CUP, Cup esta escrito en Java, utiliza especificaciones incluyendo codigoJava embebido, y produce programas de analisis que se implementan en Java. Nuestro archivocup esta conformado por [3]:

    Definicion de paquete y sentencias import.

    package ejemplocup: Esto nos indica el paquete en el cual nuestra clase seencuentra. import javacup.runtime.*: Esta importacion permitira hacer la implementa-

    cion con cup. import java.io.Reader: Io Reader nos permitira leer nuestro archivo en el que

    estara el numero a convertir.

    Figura 7: Paquetes e importaciones

    6

  • Seccion del parser code, aqu estaran los metodos que nos permitiran capturar loserrores encontrados, los mismos que los describiremos a continuacion:

    report error: Este metodo recibe un mensaje de tipo string y info de tipo object.Aqu se crea un objeto m de tipo StringBuilder a la cual se la inciara con el valorde Error, luego creo un objeto de tipo Symbol que se lo denomino s, el cual meservira para econtrar la fila y la columna donde se muestre el error.El metodo:String var=info.toString()+;String[] varres=var.split();if (Integer.parseInt(varres[1])==sym.EOF) {System.err.println(Falta Ingresar el operador convertir ); }else{if (Integer.parseInt(varres[1])==sym.FINAL) {System.err.println(.Error con la palabra reservadaconvertir o Error falta ingresar entero a convertir);}}m.append(: -message);// System.err.println(m); }Me permitira primero crear una variable de tipo String a que le denominamosvar, luego en el paso posteior se crea un arreglo de cadenas en donde se va a irguardando las variables ingresadas.Luego pregunta si la posicion 1 del arreglo es igual al token de Fin de archivvo,si ese fuera el caso me arroja el mensaje:Falta ingresar el operador convertirDe darse el caso contrario ah quiere decir que el arreglo de cadenas de posicion 1,sea igual al token FINAL que hace referencia al operador Convertir del proyecto,se emite el mensaje: Error ingresar convertir. report fatal error Este metodo funcionara en caso que se encuentre un error

    en el cual el sistema no pueda recuperarse, lanzando un mensaje de informacion.

    7

  • Figura 8: Metodos de Errores Encontrados

    En esta seccion tambien encontramos el metodo main que permitira garantizar laejecucion del analizador lexico y sintactico.

    Figura 9: Metodo Main

    Declaracion de smbolos terminales y no terminales.Se declaran dos teminales el uno un entero y el otro final, y dos no terminales el unode tipo object imprime y el otro de tipo string codigo.

    Figura 10: Terminales y No terminales

    Seccion de la gramatica

    8

  • Las gramaticas sirven para armar las expresiones aceptadas en el compilador. Todos losterminos no terminales deben tener su gramatica declarada para determinar su valor.El codigo Java que se requiera usar debe ser colocado entre {: codigo :}La gramatica propuesta para este proyecto debe seguir la siguiente estructura:

    ENTERO FINALEjemplo:

    12324 convertirEn la imagen que veran a continuacion indico la gramatica en donde se vera la formaque tendra la sentencia para realizar la conversion de decimal a binario, declarandopara ellos los terminos terminales de acuerdo a la forma que el analizador sintacticoaceptara.

    Figura 11: Metodo para convertir

    3 . ResultadosPara poder realizar las conversiones con nuestro compilador vamos a tener un archivo

    .txt en el cual este el numero a convertir con el siguiente formato:

    (numero) Operador

    Por lo tanto si el numero al que queremos transformar a binario es el 400, lo vamos aguardar en el .txt para que el compilador pueda leer y convertir al numero deseado.

    Ejemplos:

    Entrada: 400 convertir

    Salida: RESULTADO BINARIO: 110010000

    Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas

    Entrada: convertir

    9

  • Salida: Error con la palabra reservada convertir o Error falta ingresar entero a con-vertir

    Entrada: 34 vertir

    Salida:

    El caracter ingresado no es valido (v)posicion(0 5) El caracter ingresado no es valido (e)posicion(0 6) El caracter ingresado no es valido (r)posicion(0 7) El caracter ingresado no es valido (t)posicion(0 8) El caracter ingresado no es valido (i)posicion(0 9) El caracter ingresado no es valido (r)posicion(0 10) Falta Ingresar el operador convertir

    Entrada: 27 convertirdd

    Salida:

    RESULTADO BINARIO: 11011 El caracter ingresado no es valido (d)posicion(0 12) El caracter ingresado no es valido (d)posicion(0 13)

    La siguiente figura muestra el archivo .txt en el cual se ingresa el numero a convertir:

    Figura 12: Archivo texto

    10

  • Y finalmente presentamos la salida por pantalla de nuestro compilador.

    Figura 13: Resultado de la conversion

    Para una mejor comprension se puede descargar el codigo del compilador desde el reposi-torio de google code en el siguiente enlace: https://code.google.com/p/conversor-enteros-binarios/source/browse/#svn%2Ftrunk%2FConvertirEnterosBinarios

    11

  • E. Bibliografa1. Sistemas Inteligentes en Ingeniera Civl. Introduccion a las Redes Neuronales Artifi-

    ciales. [En lnea]. Disponible en: http://optimizacionheuristica.blogs.upv.es/files/2013/04/Introducci%C3%B3n-Redes-Neuronales-ArtificialesMFM.pdf

    2. Introduccion a Las Redes Neuronales (Neurales) CO-6612. Acerca de la Funcion de Ac-tivacion [En lnea] Disponible en: http://prof.usb.ve/mvillasa/redes/Introduccion-vl.pdf

    3. Introduccion a Las Redes Neuronales Artificiales. Funciones de Activacion y de Salida[En lnea] Disponible en: http://hugo-inc.com/RNA/Unidad%201/1.6.html

    12

    CompiladoresDescripcin del ProblemaAutmata del CompiladorCompiladorAnalizador LexicoAnalizador SintcticoResultados

    Bibliografa