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 la palabra reservada convertir, por ejemplo: 256 convertir.
Guia Basica para bachillerato de Circuitos Basicos
Compiladores informe final
1. 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
N´oveno B
Responsable:
• Morocho Morocho Priscila Beatriz
Docente:
• Ing.: Henry Paz
Loja - Ecuador
2015
1
3. Conversor de Enteros a Binarios
A. Compiladores
Los compiladores como los int´erpretes son programas de gran complejidad. Un compila-
dor no es m´as que un traductor, es decir un programa que nos permite pasar informaci´on de
un lenguaje a otro. Por ejemplo, un compilador de C nos permite traducir ficheros escritos
en lenguaje C a un lenguaje legible para la m´aquina.
Al final tendremos un ´unico programa que ser´ıa el traductor. Este traductor tendr´ıa un
analizador sint´actico, y a su vez el analizador sint´actico tendr´ıa un analizador l´exico. [1]
An´alisis l´exico:Se encarga de la divisi´on de la entrada en componentes l´exicos.
An´alisis sint´actico:Se encarga de encontrar las estructuras presentes en la entrada.
An´alisis sem´antico:Se encarga de comprobar que se cumplen las restricciones sem´anti-
cas del lenguaje.
B. Descripci´on del Problema
El siguiente compilador lo que va a resolver es la conversi´on de n´umeros enteros a bina-
rios, para que se realice la operaci´on se deber´a ingresar el n´umero a convertir seguido de la
palabra 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 codificaci´on del compilador se necesita de las librerias JFLEX y CUP, al
mismo se lo realiza con el lenguaje java por medio del IDE Netbeans.
C. Aut´omata del Compilador
´Este compilador tendr´a la estructura que se muestra a continuaci´on:
Figura 1: Aut´omata del conversor
3
4. D. Compilador
1 . Analizador Lexico
JFlex es un generador de analizador l´exico para Java, est´a dise˜nado para trabajar junto
con el generador de analizador LALR CUP. Tambi´en se puede utilizar junto con otros gene-
radores de analizadores sint´acticos como antlr o como una herramienta independiente.[2]
Este generador toma una cadena de caracteres como entrada y lo convierte en una secuencia
de tokens, consta de 3 partes principales en su estructura que son: opciones y declaraciones,
c´odigo de usuario y reglas l´exicas.
Opciones y declaraciones: En esta secci´on van los paquetes que se van a utilizar,
aqu´ı se declaran las directivas y macros, se indica el nombre de la clase, en este caso
Analizadorlexico, se habilita line y column para obtener la l´ınea y columna de la
posici´on actual del compilador y cup para realizar la integraci´on con el archivo cup, en
esta secci´on van las siguientes l´ıneas de codigo:
• package ejemplocup: Esto nos indica el paquete en el cual nuestra clase se
encuentra.
• import javacup.runtime: Esta importaci´on permitir´a hacer la implementaci´on
con cup.
• import java.io.Reader: Io Reader nos permitira leer nuestro archivo en el que
estara el n´umero a convertir.
• %class AnalizadorLexico: Nombre de nuestra clase java.
• %line: Indica la posici´on de la l´ınea.
• %column: Indica la posici´on de la columna.
• %cup: Nos permitir´a realizar la compatibilidad con Cup.
Figura 2: Opciones y Declaraciones
4
5. C´odigo de usuario: En esta secci´on van las directivas, o especificaciones para obtener
la salida deseada. Tambi´en se encuentra aqui los metodos para encontrar los tokens
deseados.
Estos 2 m´etodos van a permitir trabajar con la clase symbol la cual ser´a de ayuda
para que al momento de analizar la expresi´on nos devuelva los tokens encontrados en
la misma.
Figura 3: M´etodos
En esta secci´on especificamos nuestro c´odigo creando tres variables, la variable salto que
indica que se ignorar´a los saltos de l´ınea, retorno de carro o salto de linea y retorno de
carro, 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 aceptar
enteros del 0 al 9 y todas sus combinaciones.
Figura 4: C´odigo de Usuario
Reglas l´exicas: En esta secci´on del archivo JFlex, es donde se definen las reglas para
obtener los tokens de la cadena que se esta leyendo.
D´onde:
• convertir return symbol(sym.FINAL,yyline,yycolumn); Es el operador
que me permitir´a hacer la transformaci´on de un entero decimal a binario, a este
Token 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 nombre
para este token es el de ENTERO.
En la imagen siguiente se puede ver, lo que se ha explicado:
5
6. Figura 5: Reglas l´exicas
Aqu´ı tambi´en encontramos el siguiente c´odigo que nos lanzar´a informaci´on acerca
de la posici´on de algun error encontrado en caso de haberlo.
Figura 6: Reglas l´exicas - captura errores
2 . Analizador Sint´actico
Luego de realizar el analizador l´exico se realiza el analizador sint´actico, para el cual vamos
a emplear la libreria CUP, Cup est´a escrito en Java, utiliza especificaciones incluyendo c´odigo
Java embebido, y produce programas de an´alisis que se implementan en Java. Nuestro archivo
cup esta conformado por [3]:
Definici´on de paquete y sentencias import.
• package ejemplocup: Esto nos indica el paquete en el cual nuestra clase se
encuentra.
• import javacup.runtime.*: Esta importaci´on permitir´a hacer la implementa-
ci´on con cup.
• import java.io.Reader: Io Reader nos permitira leer nuestro archivo en el que
estara el n´umero a convertir.
Figura 7: Paquetes e importaciones
6
7. Secci´on del parser code, aqu´ı estar´an los metodos que nos permitir´an capturar los
errores encontrados, los mismos que los describiremos a continuaci´on:
• report error: Este m´etodo 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 inciar´a con el valor
de Error, luego creo un objeto de tipo Symbol que se lo denomin´o s, el cual me
servir´a para econtrar la fila y la columna d´onde se muestre el error.
El m´etodo:
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(.Er
ror con la palabra reservada
convertir ´o Error falta ingresar entero a convertir”);
}
}
m.append(”: -message);
// System.err.println(m); }
Me permitir´a primero crear una variable de tipo String a que le denominamos
var, luego en el paso posteior se crea un arreglo de cadenas en d´onde se va a ir
guardando las variables ingresadas.
Luego pregunta si la posici´on 1 del arreglo es igual al token de Fin de archivvo,
si ese fuera el caso me arroja el mensaje:
Falta ingresar el operador convertir
De 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 m´etodo funcionar´a en caso que se encuentre un error
en el cual el sistema no pueda recuperarse, lanzando un mensaje de informaci´on.
7
8. Figura 8: M´etodos de Errores Encontrados
En esta secci´on tambi´en encontramos el m´etodo main que permitir´a garantizar la
ejecuci´on del analizador lexico y sint´actico.
Figura 9: M´etodo Main
Declaraci´on de s´ımbolos terminales y no terminales.
Se declaran dos teminales el uno un entero y el otro final, y dos no terminales el uno
de tipo object imprime y el otro de tipo string codigo.
Figura 10: Terminales y No terminales
Secci´on de la gram´atica
8
9. Las gram´aticas sirven para armar las expresiones aceptadas en el compilador. Todos los
terminos no t´erminales deben tener su gram´atica declarada para determinar su valor.
El c´odigo Java que se requiera usar debe ser colocado entre {: c´odigo :}
La gram´atica propuesta para este proyecto debe seguir la siguiente estructura:
• ENTERO FINAL
Ejemplo:
• 12324 convertir
En la imagen que ver´an a continuaci´on indico la gram´atica en d´onde se vera la forma
que tendra la sentencia para realizar la conversion de decimal a binario, declarando
para ellos los t´erminos terminales de acuerdo a la forma que el analizador sint´actico
aceptar´a.
Figura 11: M´etodo para convertir
3 . Resultados
Para poder realizar las conversiones con nuestro compilador vamos a tener un archivo
.txt en el cual est´e el n´umero a convertir con el siguiente formato:
(n´umero) Operador
Por lo tanto si el n´umero al que queremos transformar a binario es el 400, lo vamos a
guardar en el .txt para que el compilador pueda leer y convertir al n´umero deseado.
Ejemplos:
Entrada: 400 convertir
Salida: RESULTADO BINARIO: 110010000
Si se ingresa de forma incorrecta nos puede presentar las siguientes salidas
Entrada: convertir
9
10. 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 n´umero a convertir:
Figura 12: Archivo texto
10
11. Y finalmente presentamos la salida por pantalla de nuestro compilador.
Figura 13: Resultado de la conversi´on
Para una mejor comprensi´on se puede descargar el c´odigo del compilador desde el reposi-
torio de google code en el siguiente enlace: https://code.google.com/p/conversor-enteros-binario
source/browse/#svn%2Ftrunk%2FConvertirEnterosBinarios
11
12. E. Bibliograf´ıa
1. Sistemas Inteligentes en Ingenier´ıa Civ´ıl. “Introducci´on a las Redes Neuronales Artifi-
ciales”. [En l´ınea]. Disponible en: http://optimizacionheuristica.blogs.upv.es/
files/2013/04/Introducci%C3%B3n-Redes-Neuronales-ArtificialesMFM.pdf
2. Introducci´on a Las Redes Neuronales (Neurales) CO-6612. “Acerca de la Funci´on de Ac-
tivaci´on” [En l´ınea] Disponible en: http://prof.usb.ve/mvillasa/redes/Introduccion-vl.
pdf
3. Introducci´on a Las Redes Neuronales Artificiales. “Funciones de Activaci´on y de Salida”
[En l´ınea] Disponible en: http://hugo-inc.com/RNA/Unidad%201/1.6.html
12